8位数码管显示电子时钟c51单片机程序.docx

上传人:scccc 文档编号:12607821 上传时间:2021-12-05 格式:DOCX 页数:11 大小:16.38KB
返回 下载 相关 举报
8位数码管显示电子时钟c51单片机程序.docx_第1页
第1页 / 共11页
8位数码管显示电子时钟c51单片机程序.docx_第2页
第2页 / 共11页
8位数码管显示电子时钟c51单片机程序.docx_第3页
第3页 / 共11页
8位数码管显示电子时钟c51单片机程序.docx_第4页
第4页 / 共11页
8位数码管显示电子时钟c51单片机程序.docx_第5页
第5页 / 共11页
点击查看更多>>
资源描述

《8位数码管显示电子时钟c51单片机程序.docx》由会员分享,可在线阅读,更多相关《8位数码管显示电子时钟c51单片机程序.docx(11页珍藏版)》请在三一文库上搜索。

1、8位数码管显示电子时钟 C51单片机程序时间: 2012-09-10 13:52:26来源: 作者:/*8位数码管显示 时间格式51 用于小时加 1操作52 用于小时减 1操作53 用于分钟加 1操作54 用于分钟减 1操作05 5000 标示 05点50分00秒*/#inClude<>sbit KEY仁P39/sbit KEY2=P3A1;定义端口参数sbit KEY3=P3A2;sbit KEY4=P3A3;sbit LED=P1A2; /定义指示灯参数Code unsigned Char tab=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,

2、0x7f,0x6f;/ 共阴极数码管 0 9 unsigned Char StrTab8; /定义缓冲区unsigned Char minute=19,hour=23,seCond; /定义并初始化为 12:30:00void delay(unsigned int Cnt)while(-Cnt);/*/*显示处理函数*/*/ void Displaypro(void)StrTab0=tabhour/10;/显示小时StrTab1=tabhour%10;StrTab2=0x40;/显示 "-"StrTab3=tabminute/10;/显示分钟StrTab4=tabminut

3、e%10;StrTab5=0x40;/显示 "-"StrTab6=tabseCond/10; /显示秒StrTab7=tabseCond%10;main()TMOD |=0x01;TH0=0xd8; /TL0=0xf0;/定时器 0 10ms inM crystal 初值用于计时ET0=1;TR0=1;TMOD |=0x10; TH1=0xF8; TL1=0xf0;/定时器 1用于动态扫描初值ET1=1;TR1=1;EA =1;Displaypro();while(1) /调用显示处理函数if(!KEY1)/按键 1去抖以及动作delay(10000);if(!KEY1)h

4、our+;if(hour=24)hour=0;Displaypro();/正常时间小时 加 1if(!KEY2) /按键 2去抖以及动作delay(10000);if(!KEY2)hour-;if(hour=255) hour=23;/正常时间小时减 1Displaypro();if(!KEY3)delay(10000); if(!KEY3)/按键去抖以及动作minute+;if(minute=60) minute=0; Displaypro();/分加 1if(!KEY4) /delay(10000);if(!KEY4)minute-;if(minute=255) minute=59;Dis

5、playpro();按键去抖以及动作/分减 1/*/*定时器 1中断/*void time1_isr(void) interrupt 3 using 0 /static unsigned char num;TH1=0xF8; / 重入初值TL1=0xf0;switch (num)case 0:P2=0;P0=StrTabnum;break; /case 1:P2=1;P0=StrTabnum;break;case 2:P2=2;P0=StrTabnum;break;case 3:P2=3;P0=StrTabnum;break;case 4:P2=4;P0=StrTabnum;break;cas

6、e 5:P2=5;P0=StrTabnum;break;case 6:P2=6;P0=StrTabnum;break;case 7:P2=7;P0=StrTabnum;break; default:break;*/定时器 1用来动态扫描分别调用缓冲区的值进行扫描 num+; / if(num=8)扫描 8次,使用 8个数码管num=0;*定时器 0中断*/*void tim(void) interrupt 1 using 1static unsigned char count;/TH0=0xd8; / 重新赋值TL0=0xf0;count+;switch (count)case 0:case

7、20:case 40:case 60:case 80:Displaypro();break; / case 50:P1=P1;break; / default:break;if (count=100)count=0;second+; / 秒加 1 if(second=60)second=0;minute+; / if(minute=60) minute=0;hour+; / if(hour=24) hour=0;定义内部局部变量隔一定时间调用显示处理半秒 LED 闪烁分加 1时加 1基于单片机的LCD1602空制总线模式时间: 2012-09-10 13:50:39 来源: 作者:第一行显示

8、"Welcome" 第二行显示 ="Happy day" 若要显示其他字符,请直接往数组 LCMLineOne16 和 LCMLineTwo16 填充相应的代码。直接上图,仿真图如下:源程序如下,可以对比时序方式,理解总线的操作方法。#include<>/#include<> #define uchar unsigned char#define uint unsigned int#define busy 0x80写指令寄存器读指令寄存器写数据寄存器 读数据寄存器 第一行显示的数据 第二行显示的数据uchar xdata LCMWr

9、iteCOM _at_ 0x80ff; / uchar xdata LCMReadCOM _at_ 0xa0ff ; / uchar xdata LCMWriteData _at_ 0xc0ff ; / uchar xdata LCMReadData _at_ 0xe0ff ; / uchar data LCMLineOne16="Welcome" / uchar data LCMLineTwo16="Happy day" /void Delayms(uchar ms) uchar i,j;for(i=0;i<ms;i+) for(j=0;j<

10、;57;j+) / 写指令寄存器void LCMWriteC(uchar COMData) uchar LCMStatus;doLCMStatus=(LCMReadCOM&busy);while(LCMStatus!=0);LCMWriteCOM=COMData;/ 读指令寄存器uchar LCMReadC()uchar LCMStatus;doLCMStatus=(LCMReadCOM&busy);while(LCMStatus!=0);LCMStatus=LCMReadCOM; return(LCMStatus);/ 读数据寄存器uchar LCMReadD(uchar a

11、ddr)uchar LCMStatus;doLCMStatus=(LCMReadCOM&busy);while(LCMStatus!=0);LCMWriteC(0x80+addr);LCMStatus=LCMReadData; return(LCMStatus);/ 写数据寄存器带地址void LCMWriteDAdd(uchar addr,uchar LCMData) uchar LCMStatus;doLCMStatus=(LCMReadCOM&busy);while(LCMStatus!=0);LCMWriteC(0x80+addr);LCMWriteData=LCMDa

12、ta;/ 写数据寄存器无地址void LCMWriteD(uchar LCMData)uchar LCMStatus;doLCMStatus=(LCMReadCOM&busy);while(LCMStatus!=0);LCMWriteData=LCMData;/ 初始化void LCMInit(void) Delayms(15);LCMWriteCOM=0x38;Delayms(5);LCMWriteCOM=0x38;Delayms(5);LCMWriteCOM=0x38;Delayms(5);LCMWriteC(0x38);LCMWriteC(0x08);LCMWriteC(0x01);LCMWriteC(0x06);LCMWriteC(0x0c);main() uchar i;LCMInit();while(1)第一行开始地址第二行开始地址 LCMWriteC(0x80); / for(i=0;i<16;i+)LCMWriteD(LCMLineOnei);LCMWriteC(0x80+0x40); / for(i=0;i<16;i+)LCMWriteD(LCMLineTwoi);

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 社会民生


经营许可证编号:宁ICP备18001539号-1