单灯转换(红黄绿一个灯):
Dim t As Integer
Private Sub Timer1_Timer()
If Shape1FillColor = &HFF& And t = 0 Then
t = Val(Text1Text) + 1
End If
If Shape1FillColor = &HFF00& And t = 0 Then
t = Val(Text2Text) + 1
End If
t = t - 1
If t = 0 Then
Select Case Shape1FillColor
Case &HFF&
Shape1FillColor = &HFF00&
Case &HFF00&
Shape1FillColor = &HFFFF&
t = 1
Case &HFFFF&
Shape1FillColor = &HFF&
End Select
End If
Text3Text = t
End Sub
控件:
一个Shape,颜色设置为绿色(红黄都行),填充样式为0-Solid,三个Text,一个Timer,Interval设置为1000。text1记录红灯时间,text2记录绿灯时间,text3显示剩余时间。
三等转换如果需要,我继续帮忙。
#include “windowsh”
#include "iostreamh"
class MyTimer
{ private:
int hour;
int minute;
int sec;
public:
MyTimer():hour(0),minute(0),sec(0){};
MyTimer(int h, int m, int s)
{ hour = h;
minute = m;
sec = s;
}
void setTime(int h, int m, int s)
{ hour = h;
minute = m;
sec = s;
}
void showTime()
{ while(1)
{ system("cls");
if(sec>=60)
{ sec = sec-60;
minute +=1;
}
if(minute>=60)
{ minute = minute-60;
hour +=1;
}
if(hour >=24)
{
hour = hour-24;
}
cout<<hour<<":"<<minute<<":"<<sec<<endl;
Sleep(1000);
sec++;
}
}
};
在主函数创建一个MyTimer对象后调用showTime就行了
就是十进制和十六进制的转换
写的时候十进制转换成十六进制
十进制 34
0x34 = (34/10)16 + 34%10;
读的时候十六进制转换成十进制
十六进制 0x34
34 = (0x34/16)10 + 0x34%16;
不是我做的
转至
>
如果数据如图所示
则B1单元格写入公式
=TEXT(A1,"[h]")+MINUTE(A1)/60
或
=A124
再设置单元格格式为常规,下拉填充公式
如果不对请上图说明数据的样式
#include <reg51h>
#define uchar unsigned char //定义unsigned int为uint
#define uint unsigned int //定义unsigned uchar为uchar
sbit LCD_RS = P2^0 ;
sbit LCD_RW = P2^1 ;
sbit LCD_EN = P2^2 ;
sbit D_SDA = P2^6; //定义74HC164数据线为P26端口
sbit D_SCL = P2^7; //定义74HC164数据线为P27端口
sbit CLK = P1^3; /实时时钟时钟线引脚 /
sbit IO = P1^4; /实时时钟数据线引脚 /
sbit RST = P1^5; /实时时钟复位线引脚 /
sbit ACC0 = ACC^0;
sbit ACC7 = ACC^7;
uchar time[8] = {0x50,0x30,0x19,0x30,0x12,0x06,0x06};
//========= 延时函数 ============
//延时时间以1ms为单位
//s决定延时时间长短
void delay_ms(uint s)
{
uint x;
for(s;s>0;s--)
{
x = 200;
while(x--);
}
}
//========= 送出一个字节给74HC164(实现串并转换) ==========
void send_out(unsigned char out)//传送一个字节8位
{
uchar i;
D_SCL = 0;
for (i=8;i>=1;i--)
{
D_SDA = out&0x80; //送数据到数据口
D_SCL = 1; //时钟线置1
D_SCL = 0; //送一时钟
out<<=1; //左移
}
}
//========= 写命令函数 ==========
void lcd_wcmd(uchar cmd)
{
LCD_RS = 0;
LCD_RW = 0;
LCD_EN = 0;
send_out(cmd);
LCD_EN = 1;
LCD_EN = 0 ;
}
//========= 写数据函数 ==========
void lcd_wdat(uchar dat)
{
LCD_RS = 1;
LCD_RW = 0;
LCD_EN = 0;
send_out(dat);
LCD_EN = 1;
LCD_EN = 0;
}
//========= LCD初始化函数 ==========
void lcd_init()
{
lcd_wcmd(0x38);
delay_ms(1);
lcd_wcmd(0x0c); //显示开,关光标
delay_ms(1);
lcd_wcmd(0x06); //向右移动光标
delay_ms(1);
lcd_wcmd(0x01); //清除LCD显示屏
delay_ms(1);
}
//========== 往DS1302写入1Byte数据 (内部函数) =============
void w_byte(uchar dat)
{
uchar i;
for(i=8; i>0; i--)
{
IO = dat & 0x01;
CLK = 1;
CLK = 0;
dat = dat >> 1;
}
}
//======== 从DS1302读取1Byte数据 (内部函数) ===================
uchar r_byte(void)
{
uchar i;
for(i=8; i>0; i--)
{
ACC = ACC >> 1;
ACC7 = IO;
CLK = 1;
CLK = 0;
}
return(ACC);
}
//========== 指定地址往DS1302写入1Byte数据 (内部函数) =============
void write_byte(uchar addr, uchar dat)
{
RST = 0;
CLK = 0;
RST = 1;
w_byte(addr);
w_byte(dat);
CLK = 1;
RST = 0;
}
//========== 指定地址往DS1302读1Byte数据 (内部函数) =============
uchar read_byte(uchar addr)
{
uchar ucData;
RST = 0;
CLK = 0;
RST = 1;
w_byte(addr);
ucData = r_byte();
CLK = 1;
RST = 0;
return(ucData);
}
//============ 设置ds1302日期和时间 =============
void write_ds1302(uchar p)
{
uchar i;
uchar addr = 0x80;
write_byte(0x8e,0x00); // 控制命令,WP=0,写 *** 作
for(i =7; i>0; i--)
{
write_byte(addr,p); // 秒 分 时 日 月 星期 年
p++;
addr +=2;
}
write_byte(0x8e,0x80); // 控制命令,WP=1,写保护
}
//============ 读ds1302当前日期和时间 =============
void read_ds1302(uchar p)
{
uchar i;
uchar addr = 0x81;
for (i=0; i<7; i++)
{
p = read_byte(addr); //格式为: 秒 分 时 日 月 星期 年
addr += 2;
p++;
}
}
//============ 显示函数 ===================
void lcd_disp()
{
uchar addr = 4;
lcd_wcmd(0x80 + addr);
lcd_wdat(((time[2]>>4)&0x0f)+0x30); //显示小时
addr++;
lcd_wcmd(0x80 + addr);
lcd_wdat((time[2]&0x0f)+0x30);
addr++;
lcd_wcmd(0x80 + addr);
lcd_wdat(':'); //显示":"
addr++;
lcd_wcmd(0x80 + addr);
lcd_wdat(((time[1]>>4)&0x0f)+0x30); //显示分
addr++;
lcd_wcmd(0x80 + addr);
lcd_wdat((time[1]&0x0f)+0x30);
addr++;
lcd_wcmd(0x80 + addr);
lcd_wdat(':'); //显示":"
addr++;
lcd_wcmd(0x80 + addr);
lcd_wdat(((time[0]>>4)&0x0f)+0x30); //显示秒
addr++;
lcd_wcmd(0x80 + addr);
lcd_wdat((time[0]&0x0f)+0x30);
addr = 2;
lcd_wcmd(0xc0 + addr); //在第二行显示年月日和星期
lcd_wdat('2'); //显示2
addr++;
lcd_wcmd(0xc0 + addr);
lcd_wdat('0'); //显示0
addr++;
lcd_wdat(((time[6]>>4)&0x0f)+0x30); //年
addr++;
lcd_wcmd(0xc0 + addr);
lcd_wdat((time[6]&0x0f)+0x30);
addr++;
lcd_wcmd(0xc0 + addr);
lcd_wdat(' ');
addr++;
lcd_wcmd(0xc0 + addr);
lcd_wdat(((time[4]>>4)&0x0f)+0x30); //显示月
addr++;
lcd_wcmd(0xc0 + addr);
lcd_wdat((time[4]&0x0f)+0x30);
addr++;
lcd_wcmd(0xc0 + addr);
lcd_wdat(' ');
addr++;
lcd_wcmd(0xc0 + addr);
lcd_wdat(((time[3]>>4)&0x0f)+0x30); //显示日
addr++;
lcd_wcmd(0xc0 + addr);
lcd_wdat((time[3]&0x0f)+0x30);
addr++;
lcd_wcmd(0xc0 + addr);
lcd_wdat(' ');
addr++;
lcd_wcmd(0xc0 + addr);
lcd_wdat((time[5]&0x0f)+0x30); //显示星期
}
//=========== 主函数 ===============
void main()
{
lcd_init(); // 初始化LCD
write_ds1302(time);
while(1)
{
read_ds1302(time); //读DS1302数据
lcd_disp(); //LCD显示
delay_ms(500); //延时05秒
}
}
这是一个电子时钟,在LCD1602上显示,时钟芯片是DS1302
以上就是关于利用vb时钟控件做黄绿红灯转换的的程序全部的内容,包括:利用vb时钟控件做黄绿红灯转换的的程序、C++设计模拟时钟转动的程序,急需源代码!!、51单片机DS1302时钟芯片BCD码转换问题等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)