利用vb时钟控件做黄绿红灯转换的的程序

利用vb时钟控件做黄绿红灯转换的的程序,第1张

单灯转换(红黄绿一个灯):

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码转换问题等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/10170175.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-06
下一篇 2023-05-06

发表评论

登录后才能评论

评论列表(0条)

保存