预览加载中,请您耐心等待几秒...
1/4
2/4
3/4
4/4

在线预览结束,喜欢就下载吧,查找使用更方便

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

//作品名:简单可调电子钟 //程序员:ln_电子 //编写日期:2012.08.04 #include<reg52.h> //头文件 #include<intrins.h> #defineuintunsignedint //宏定义 #defineucharunsignedchar //字段码 ucharcodetable[]={ 0x3f,0x06,0x5b,0x4f, 0x66,0x6d,0x7d,0x07, 0x7f,0x6f,0xff}; sbitdula=P2^0; //锁存器段选位 sbitwela=P2^1; //锁存器位选位 sbitK_xs=P3^0; //独立按键 sbitK_fz=P3^1; ucharXS,FZ,MZ,tt; //小时,分钟,秒钟,1/100秒 //延时函数 voiddelay_ms(ucharx) { uchari; while(x--)for(i=0;i<120;i++); } //显示函数 voidshows() { dula=1; P0=table[XS/10]; dula=0; P0=0xff; wela=1; P0=0xfe; wela=0; delay_ms(1); dula=1; P0=table[XS%10]; dula=0; P0=0xff; wela=1; P0=0xfd; wela=0; delay_ms(1); dula=1; P0=0X40; dula=0; P0=0xff; wela=1; P0=0xfb; wela=0; delay_ms(1); dula=1; P0=table[FZ/10]; dula=0; P0=0xff; wela=1; P0=0xf7; wela=0; delay_ms(1); dula=1; P0=table[FZ%10]; dula=0; P0=0xff; wela=1; P0=0xEF; wela=0; delay_ms(1); dula=1; P0=0X40; dula=0; P0=0xff; wela=1; P0=0xDF; wela=0; delay_ms(1); dula=1; P0=table[MZ/10]; dula=0; P0=0xff; wela=1; P0=0xBF; wela=0; delay_ms(1); dula=1; P0=table[MZ%10]; dula=0; P0=0xff; wela=1; P0=0x7F; wela=0; delay_ms(1); } //初始化函数 voidinit() { XS=0;FZ=0;MZ=0; //小时,分,秒初始化为00—00—00 TMOD=0x01;//设置定时器0为工作方式1 TH0=(65536-50000)/256; //高8位 TL0=(65536-50000)%256; //低8位 EA=1;//开总中断 ET0=1;//开定时器0中断 TR0=1;//启动定时器0 } //秒,分,小时 voidincresse_dzz() { if(++MZ>59) //秒 { MZ=0; if(++FZ>59) //分 { FZ=0; if(++XS>23) //小时 XS=0; } } } //按键调小时、分钟 voidkey() { if(K_xs==0) { shows(); while(K_xs==0); { if(++XS>23)XS=0; } } if(K_fz==0) { shows(); while(K_fz==0); { if(++FZ>59)FZ=0; } } } //主函数 voidmain() { init(); while(1) { key(); shows(); } } voidtimer0()interrupt1 { TH0=(65536-46100)/256; //定时器重装 TL0=(65536-46100)%256; //理论是50,实际在处理语句的时间要算进去(这里大概了下) if(++tt==20) //50ms*20=1S { tt=0;incresse_dzz(); } }