非常详细 单片机 数码管LED 显示电子钟

合集下载

51单片机作的电子钟程序及电路图

51单片机作的电子钟程序及电路图

51单片机作的电子钟程序在很多地方已经有了介绍,对于单片机学习者而言这个程序基本上是一道门槛,掌握了电子钟程序,基本上可以说51单片机就掌握了80%。

常见的电子钟程序由显示部分,计算部分,时钟调整部分构成。

时钟的基本显示原理:时钟开始显示为0时0分0秒,也就是数码管显示000000,然后每秒秒位加1 ,到9后,10秒位加1,秒位回0。

10秒位到5后,即59秒,分钟加1,10秒位回0。

依次类推,时钟最大的显示值为23小时59分59秒。

这里只要确定了1秒的定时时间,其他位均以此为基准往上累加。

开始程序定义了秒,十秒,分,十分,小时,十小时,共6位的寄存器,分别存在30h,31h,32h,33h,34h,35h单元,便于程序以后调用和理解。

6个数码管分别显示时、分、秒,一个功能键,可以切换调整时分秒、增加数值、熄灭节电等功能全部集一键。

以下是部分汇编源程序,购买我们产品后我们用光盘将完整的单片机汇编源程序和烧写文件送给客户。

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 中断入口程序 ;; (仅供参考) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ORG 0000H ;程序执行开始地址LJMP START ;跳到标号START执行ORG 0003H ;外中断0中断程序入口RETI ;外中断0中断返回ORG 000BH ;定时器T0中断程序入口LJMP INTT0 ;跳至INTTO执行ORG 0013H ;外中断1中断程序入口RETI ;外中断1中断返回ORG 001BH ;定时器T1中断程序入口LJMP INTT1 ;跳至INTT1执行ORG 0023H ;串行中断程序入口地址RETI ;串行中断程序返回;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; 主程序 ;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;START: MOV R0,#70H ;清70H-7AH共11个内存单元MOV R7,#0BH;clr P3.7 ;CLEARDISP: MOV @R0,#00H ;INC R0 ;DJNZ R7,CLEARDISP ;MOV 20H,#00H ;清20H(标志用)MOV 7AH,#0AH ;放入"熄灭符"数据MOV TMOD,#11H ;设T0、T1为16位定时器MOV TL0,#0B0H ;50MS定时初值(T0计时用)MOV TH0,#3CH ;50MS定时初值MOV TL1,#0B0H ;50MS定时初值(T1闪烁定时用)MOV TH1,#3CH ;50MS定时初值SETB EA ;总中断开放SETB ET0 ;允许T0中断SETB TR0 ;开启T0定时器MOV R4,#14H ;1秒定时用初值(50M S×20)START1: LCALL DISPLAY ;调用显示子程序JNB P3.7,SETMM1 ;P3.7口为0时转时间调整程序SJMP START1 ;P3.7口为1时跳回START1 SETMM1: LJMP SETMM ;转到时间调整程序SETMM; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; 1秒计时程序 ;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;T0中断服务程序INTT0: PUSH ACC ;累加器入栈保护PUSH PSW ;状态字入栈保护CLR TR0 ;关闭定时器T0MOV A,#0B7H ;中断响应时间同步修正ADD A,TL0 ;低8位初值修正MOV TL0,A ;重装初值(低8位修正值)MOV A,#3CH ;高8位初值修正ADDC A,TH0 ;MOV TH0,A ;重装初值(高8位修正值)SETB TR0 ;开启定时器T0DJNZ R4, OUTT0 ;20次中断未到中断退出ADDSS: MOV R4,#14H ;20次中断到(1秒)重赋初值MOV R0,#71H ;指向秒计时单元(71H-72H)ACALL ADD1 ;调用加1程序(加1秒操作)MOV A,R3 ;秒数据放入A(R3为2位十进制数组合)CLR C ;清进位标志CJNE A,#60H,ADDMM ;ADDMM: JC OUTT0 ;小于60秒时中断退出ACALL CLR0 ;大于或等于60秒时对秒计时单元清0MOV R0,#77H ;指向分计时单元(76H-77H)ACALL ADD1 ;分计时单元加1分钟MOV A,R3 ;分数据放入ACLR C ;清进位标志CJNE A,#60H,ADDHH ;ADDHH: JC OUTT0 ;小于60分时中断退出ACALL CLR0 ;大于或等于60分时分计时单元清0MOV R0,#79H ;指向小时计时单(78H-79H)ACALL ADD1 ;小时计时单元加1小时MOV A,R3 ;时数据放入ACLR C ;清进位标志CJNE A,#24H,HOUR ;HOUR: JC OUTT0 ;小于24小时中断退出ACALL CLR0 ;大于或等于24小时小时计时单元清0OUTT0: MOV 72H,76H ;中断退出时将分、时计时单元数据移MOV 73H,77H ;入对应显示单元MOV 74H,78H ;MOV 75H,79H ;POP PSW ;恢复状态字(出栈)POP ACC ;恢复累加器RETI ;中断返回; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 闪动调时程序 ;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;T1中断服务程序,用作时间调整时调整单元闪烁指示INTT1: PUSH ACC ;中断现场保护PUSH PSW ;MOV TL1, #0B0H ;装定时器T1定时初值MOV TH1, #3CH ;DJNZ R2,INTT1OUT ;0.3秒未到退出中断(50MS中断6次)MOV R2,#06H ;重装0.3秒定时用初值CPL 02H ;0.3秒定时到对闪烁标志取反JB 02H,FLASH1 ;02H位为1时显示单元"熄灭"MOV 72H,76H ;02H位为0时正常显示MOV 73H,77H ;MOV 74H,78H ;MOV 75H,79H ;INTT1OUT: POP PSW ;恢复现场POP ACC ;RETI ;中断退出FLASH1: JB 01H,FLASH2 ;01H位为1时,转小时熄灭控制MOV 72H,7AH ;01H位为0时,"熄灭符"数据放入分MOV 73H,7AH ;显示单元(72H-73H),将不显示分数据MOV 74H,78H ;MOV 75H,79H ;AJMP INTT1OUT ;转中断退出FLASH2: MOV 72H,76H ;01H位为1时,"熄灭符"数据放入小时MOV 73H,77H ;显示单元(74H-75H),小时数据将不显示MOV 74H,7AH ;MOV 75H,7AH ;AJMP INTT1OUT ;转中断退出; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 加1子程序 ;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ADD1: MOV A,@R0 ;取当前计时单元数据到ADEC R0 ;指向前一地址SWAP A ;A中数据高四位与低四位交换ORL A,@R0 ;前一地址中数据放入A中低四位ADD A,#01H ;A加1操作DA A ;十进制调整MOV R3,A ;移入R3寄存器ANL A,#0FH ;高四位变0MOV @R0,A ;放回前一地址单元MOV A,R3 ;取回R3中暂存数据INC R0 ;指向当前地址单元SWAP A ;A中数据高四位与低四位交换ANL A,#0FH ;高四位变0MOV @R0,A ;数据放入当削地址单元中RET ;子程序返回; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 清零程序 ;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;............. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 时钟调整程序 ;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;当调时按键按下时进入此程序SETMM: cLR ET0 ;关定时器T0中断CLR TR0 ;关闭定时器T0LCALL DL1S ;调用1秒延时程序JB P3.7,CLOSEDIS ;键按下时间小于1秒,关闭显示(省电)MOV R2,#06H ;进入调时状态,赋闪烁定时初值SETB ET1 ;允许T1中断SETB TR1 ;开启定时器T1SET2: JNB P3.7,SET1 ;P3.7口为0(键未释放),等待SETB 00H ;键释放,分调整闪烁标志置1SET4: JB P3.7,SET3 ;等待键按下LCALL DL05S ;有键按下,延时0.5秒JNB P3.7,SETHH ;按下时间大于0.5秒转调小时状态MOV R0,#77H ;按下时间小于0.5秒加1分钟操作LCALL ADD1 ;调用加1子程序MOV A,R3 ;取调整单元数据CLR C ;清进位标志CJNE A,#60H,HHH ;调整单元数据与60比较HHH: JC SET4 ;调整单元数据小于60转SET4循环LCALL CLR0 ;调整单元数据大于或等于60时清0CLR C ;清进位标志AJMP SET4 ;跳转到SET4循环CLOSEDIS: SETB ET0 ;省电(LED不显示)状态。

基于单片机的多功能数字钟60秒LED旋转电子钟

基于单片机的多功能数字钟60秒LED旋转电子钟

第1节引言1.1 电子钟概述目前市场上提供的无论是机械钟还是石英钟在晚上无照明的情况下都是不可见的。

要知道当前的时间,必须先开灯,故较为不便。

现在市场上也出现了一些电子钟,它以六只LED数码管来显示时分秒,违背了人们指针式的传统习惯与理念,而且这类电子钟一般是采用大型显示器件,适用于银行、车站等公共场所,且外观设计欠美观,很少进入百姓家庭。

此外,无论是机械钟、石英钟还是电子钟,都存在着共同的问题:时间误差。

针对以上存在的问题,我们设计了一款采用LED显示器件显示的电子时钟,解决了时钟存在的误差问题,并能在夜间不必其它照明就能看到时间,且以60只发光管实现秒显示,接近于传统的秒针来显示秒的形式,用户容易接受,而且美观大方。

另加七只装饰用的LED灯,使整个时钟显的相当美观新颖,故还可作为室内装饰用。

1.2 设计任务本次设计通过对一个实现定时、双时钟显示、闹钟、温度等功能的时间系统的设计,其中结合了数据转换显示、数码管显示、动态扫描、单片机定时中断等技术。

系统由AT89C2051、LED数码管、按键、三极管、两片CD4017BE、CD4069BE、DS18B20、电阻等组成。

能实现时钟时、分、秒的显示。

也具有温度显示、时间设置、闹铃开和关设置、制式切换。

文章后附有电路图、程序清单。

1.3 系统主要功能电子钟的外观如图1所示。

周边60只发光管顺时旋转来显示秒,中间四只LED 数码管用于显示时间,中下方的七只LED灯顺时旋转,供装饰用。

其主要功能有:①整点报时;②四只LED数码管显示当前时分;③每隔一秒钟周边的60只LED发光管旋转一格;④当发生停电事件时,由后备电池供电,系统进入低功耗状态,所有显示部件停止显示,这样即延长了电池的寿命,同时又保证CPU继续计数,不至于因停电而时钟停止运行。

⑤当恢复供电后,系统自动恢复工作状态,不影响计时。

图一第2节电子钟硬件设计2.1系统的硬件构成及功能电子钟的原理框图如图2所示。

基于郭天祥单片机数码管的电子钟(含闹钟、整点报时)

基于郭天祥单片机数码管的电子钟(含闹钟、整点报时)

基于单片机数码管的电子钟(郭天祥系列单片机)功能说明(D本电子钟可以显示当前时刻、年月日和闹钟时刻。

不同时间的显示可以用key4来切换。

(2)、独立键盘key—key4(左到右)调节不同功能,7段数码管显示。

(3)整点提示功能:当时间为整点时,蜂鸣器会滴滴滴响,响20秒;(4)闹铃功能:本程序有闹铃功能,当定时时间到时,闹铃会滴滴滴报警,报警30秒;(5)附加功能:当在闹铃和整点时,8个发光二极管会闪亮;(6)时、分、秒之间和年、月、日之间也是用分割。

2、键盘控制(1)key1-键移动调整单位,每按一次移动一个单位,可调整时分秒、年月日和闹钟时间。

比如:在显示时分秒时,按下keyl 键, 可通过key2和key3对'秒'加减;再按一下keyl,可对"分'加减;再按一下keyl,可对"时'加减;再按keyl,时间开始走动(2)key2-加 1 ; key3-减 1;(3)key4-键切换时分秒、年月日和闹铃时间的显示。

比如:当前为时分秒,按一下key4,则显示年月;再按一下,则显示闹铃时间;再按一下,则显示时分秒时间。

附录:C语言程序〃设计项目:带闹铃的电子钟//功能:keyV键:开始/调时分秒/调年月日/调定时// key2 ■键:加 1// key3-键:减 1// key4-键:切换页面#in clude<reg52.h>#define uchar unsigned char#define uint unsigned intsbit dula=P2A6;sbit wela=P2A7;sbit key1=P3A4;sbit key2=P3A5;sbit key3=P3A6;sbit key4=P3A7;sbit bear=P2A3;uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};uchar sed ,hour1 ,year1 ,mon1 ,day1,tempi ,temp2,sec2,min2,hour2; void keyscan();void display(uchar hour,uchar min,uchar sec);void delay(uint z){uint x,y;for(x=0;x<z;x++)for(y=0;y<110;y++);}void init(){TMOD=0X02;TH0=6;TL0=6;EA=1;ET0=1;TR0=1;hour1=00;mini =00;sed =00;year1=12;mon1=03;day1=10;void display(uchar hour,uchar min,uchar sec) { uchar s1 ,s2,m15m2,h1 ,h2;s2=sec/10;s1=sec%10;m2=min/10;m1=min%10;h2=hour/10;h1=hour%10;dula=1;P0=table[h2];dula=0;P0=0XFF;wela=1;P0=0XFE;delay(1);dula=1;P0=table[h1]+0x80;dula=0;P0=0XFF;wela=1;P0=0XFd;delay(1);dula=1;P0=table[m2];dula=0;P0=0XFF;wela=1;P0=0XFb;delay(1);dula=1;P0=table[m1]+0x80;dula=0;P0=0XFF;wela=1;P0=0XF7;delay(1);dula=1;P0=table[s2];dula=0;PO=OXFf;wela=1;P0=0Xef;delay(1);dula=1; PO=table[s1J; dula=0; P0=0XFF; wela=1; PO=OXdf; delay(1);}void keyscan()if(key1 ==0)delay(10); if(key1 ==0)//TR0=0; tempi++; if(temp1 ==4){tempi=;TR0=1;while(!key1)switch(temp2){case 0:display(hour1,sec1 );break; case1:display(year1 ,mon1 ,day1 );break; case2:display(hour2,min2,sec2);break;if(key2==0){delay(10); if(key2==0){ if(temp2==0) { TR0=0;switch(templ){case 1:sed ++;if(sec1 ==60)sec1 =O;break;case 2:min1 ++;if(min1 ==60)min1 =O;break;case 3:hour1 ++;if(hour1 ==24)hour1 =O;break;while(!key2) display(hour1 ,min1 ,sec1);if(temp2==1) { TR0=1;switch(templ)case 1:day1 ++;if(day1==31 )day1=1 ;break; case 2:mon1 ++;if(mon1==13)mon1 =1 ;break;case 3:year1 ++;if(year1 ==100)year1 =0;break; } while(!key2)display(year1 ,mon1 ,day1);if(temp2==2) { TR0=1;switch(templ)case 1:sec2++;if(sec2==60)sec2=0;break;case 2:min2++;if(min2==60)min2=0;break;case 3:hour2++;if(hour2==24)hour2=0;break; }while(!key2)display(hour2,min2,sec2);if(key3==0){delay(10); if(key3==0){if(temp2==0){ TR0=0;switch(templ){case 1:if(sec1 ==0)sec1 =60;sec1 ~;break;case 2:if(min1 ==0)min1 =60;min1 -;break;case 3:if(hour1 ==0)hour1 =24;hour1 -;break; } while(!key3)display(hour1 ,min1 ,sec1);if(temp2==1){ TR0=1;switch(templ){case 1:if(day1==1 )day1=31 ;day1-;break;case 2:if(mon1==1 )mon1 =13;mon1 ・-;break;case 3:if(year1 ==0)year1 =100;year1 -;break; } while(!key3) display(year1 ,mon1,day1);}if(temp2==2){ TR0=1;switch(templ){case 1:if(sec2==0)sec2=60;sec2-;break;case 2:if(min2==0)min2=60;min2-;break;case 3:if(hour2==0)hour2=24;hour2-;break; } while(!key3)display(hour2,mi n2,sec2);if(key4==0)delay(10); if(key4==O)tempi =0;temp2++; if(temp2==3)temp2=0;while(!key4) switch(temp2){case 0:display(hour1 ,min1 ,sec1);break; case1:display(year1 ,mon1 ,day1 );break;case 2:display(hour2,min2,sec2);break;switch(temp2){case 0:display(hour1 ,min1 ,sec1 );break;case 1:display(year1 ,mon1 ,day1 );break; case2:display(hour2,min2,sec2);break;void alarm(){uint i;if((hour1==hour2&&min1==min2&&(sec1 >=sec2&&sec1 <sec2+30))||(min1==0 &&sec"l <20)) { for(i=0;i<20;i++){bear=~bear;P1=~P1;switch(temp2){case 0:display(hour1,mi,sec1 );break;case 1:display(year1 ,mon1 ,day1);break;case 2:display(hour2,min2,sec2);break;}delay(30);}bear=1;P1=Oxff;void main(){init();while(1){keyscan();{if (key 1 ==0 || key2==0 || key3==0 || key4==O )Bear=0}alarm();void time1()interrupt 1{uint m;m++;if(m==3686){m=0;sec1++;if(sec1 ==60){sec1=0;min1++;if(min1==60){min1=0; hour1++; if(hour1==24)hour1=0;day1++; if(day1==31) {day1=1;mon 1++;if(mon1==13){mon1 =1; year1++; if(year1==100) year1=0;。

LED数字显示电子时钟源程序代码

LED数字显示电子时钟源程序代码

LED数字显示电子时钟源程序代码程序:(注已完全经过调试,达到预期目的)#include<reg51.h>#define uchar unsigned char#define uint unsigned intuchar count=0;sbit LED=P1^0;uchar tab[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; //显示数码管0,1,3,4,5,6,7,8,9 uchar miao=0,fen=0,hour=0;void delay(uint i) //延迟函数{uint j;for(;i>0;i--)for(j=124;j>0;j--);}void init(){ET0=1;TMOD=0x51; //选定定时器0,1和中断0,1TH0=(65536-25000)/256;TL0=(65536-25000)%256; //设定时器0时间为250ms一次ET1=1;TH1=0xff;TL1=0xff; //定时器1为中断EX0=1;IT0=1; //中断0开EX1=1;IT1=1; //中断1开TR0=1; //定时器0开TR1=1; //定时器1开EA=1; //总中断开}void display() //时钟显示函数{P0=tab[hour/10%10];P2=0xfe;delay(1);P0=tab[hour%10];P2=0xfd;delay(1);P0=tab[fen/10%10];P2=0xfb;delay(1);P0=tab[fen%10];P2=0xf7;delay(1);P0=tab[miao/10%10];P2=0xef;delay(1);P0=tab[miao%10];P2=0xdf;delay(1);}void main() //主函数{init();LED=0;while(1){display();}}void T0_int() interrupt 1 //定时器0函数{TH0=(65536-25000)/256;TL0=(65536-25000)%256;count++;if(count==20){count=0;miao= miao +1;LED=~LED;if(sec==60){miao=0;fen= fen +1;if(fen ==60){fen =0;hour=hour+1;if(hour==24)hour=0;}}}}void T1_int() interrupt 3 //定时器1函数控制秒针加1 {TH1=0xff;TL1=0xff;miao=miao+1;if(miao ==60)miao =0;}void I1_int() interrupt 2 //中断1函数控制按键分针加1 {EX0=0;fen= fen +1;if(fen ==60)fen =0;EX0=1;}void I0_int() interrupt 0 //中断函数0控制按键时针加1 {EX1=0;hour=hour+1;if(hour==24)hour=0;EX1=1;}。

LED数码管设计的可调式电子钟说明说

LED数码管设计的可调式电子钟说明说

LED数码管设计的可调式电子钟说明说可调式电子钟的设计理念是提供用户多样化的时间显示和闹钟设定选项,以满足用户不同的需求和喜好。

以下是对设计的详细说明:1.数码管显示:LED数码管采用7段共阳极连接方式,每个数码管由7个LED灯组成,通过控制各个LED灯的点亮与否,可以显示0-9的数字。

数码管的显示仿真效果要清晰、鲜明,确保用户可以轻松辨认时间。

2.时间调节功能:可调式电子钟具备时间调节的功能,用户可以通过按钮或旋钮调整时间。

其中旋钮可以实现小时和分钟的调节,而按钮可以实现小时和分钟的增加或减少。

设计时需考虑人机交互的便利性,确保时间调节操作简单明了。

3.闹钟设定:可调式电子钟还具备闹钟功能,用户可以设定一个或多个闹钟时间点。

用户可以通过按钮或旋钮设置闹钟的小时和分钟,还可以设定是否重复响铃。

闹铃可以通过声音、震动或LED灯闪烁等方式提醒用户。

为了避免误操作,设计时需要考虑设置闹钟的过程,确保用户能够轻松设置闹钟。

4.电源供应:可调式电子钟可采用外部电源或内置电池供电。

设计时需考虑到电源的稳定性和可靠性,确保时钟长时间准确运行。

当外部电源断开时,内置电池可以提供备用电源,防止时间设置的丢失。

5.背光功能:可调式电子钟还可以考虑添加背光功能,在光线不好的情况下,用户可以通过按下按钮或通过传感器自动点亮背光。

背光的亮度可以根据用户偏好进行调节。

6.美观设计:除了功能性,可调式电子钟的外观设计也很重要。

设计时可以考虑采用简约设计风格,以及时尚的外壳材料。

同时,数字显示的对齐和间距,以及按钮和旋钮的位置、大小都需要细致推敲,确保整体外观美观大方。

总之,可调式电子钟的设计需要满足用户对时间显示和闹钟功能的需求。

通过合理的控制功能,人性化的设计以及简洁好看的外观,可为用户提供一台方便、易用的电子钟。

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

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

8位数码管显示电子时钟c51单片机程序 /*8位数码管显示时间格式 055000 标示05点50分00秒S1 用于小时加1操作S2 用于小时减1操作S3 用于分钟加1操作S4 用于分钟减1操作*/#includereg52.hsbit KEY1=P3^0; //定义端口参数sbit KEY2=P3^1;sbit KEY3=P3^2;sbit KEY4=P3^3;sbit LED=P1^2; //定义指示灯参数code unsigned chartab[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; //共阴极数码管09unsigned char StrTab[8]; //定义缓冲区unsigned char minute=19,hour=23,second; //定义并初始化为12:30:00void delay(unsigned int cnt){while(cnt);}/********************************************************** ********//* 显示处理函数 *//********************************************************** ********/void Displaypro(void){StrTab[0]=tab[hour/10]; //显示小时StrTab[1]=tab[hour%10];StrTab[2]=0x40; //显示StrTab[3]=tab[minute/10]; //显示分钟StrTab[4]=tab[minute%10];StrTab[5]=0x40; //显示StrTab[6]=tab[second/10]; //显示秒StrTab[7]=tab[second%10];}main(){TMOD |=0x01; //定时器0 10ms inM crystal 用于计时TH0=0xd8; //初值TL0=0xf0;ET0=1;TR0=1;TMOD |=0x10; //定时器1用于动态扫描 TH1=0xF8; //初值TL1=0xf0;ET1=1;TR1=1;EA =1;Displaypro(); //调用显示处理函数while(1){if(!KEY1) //按键1去抖以及动作{delay(10000);if(!KEY1){hour++;if(hour==24)hour=0; //正常时间小时加1Displaypro();}if(!KEY2) //按键2去抖以及动作 {delay(10000);if(!KEY2){hour;if(hour==255)hour=23; //正常时间小时减1 Displaypro();}}if(!KEY3) //按键去抖以及动作{delay(10000);if(!KEY3){minute++;if(minute==60)minute=0; //分加1Displaypro();}if(!KEY4) //按键去抖以及动作{delay(10000);if(!KEY4){minute;if(minute==255)minute=59; //分减1Displaypro();}}}}/********************************************************** ********//* 定时器1中断 *//********************************************************** ********/void time1_isr(void) interrupt 3 using 0 //定时器1用来动态扫描static unsigned char num;TH1=0xF8; //重入初值TL1=0xf0;switch (num){case 0:P2=0;P0=StrTab[num];break; //分别调用缓冲区的值进行扫描case 1:P2=1;P0=StrTab[num];break;case 2:P2=2;P0=StrTab[num];break;case 3:P2=3;P0=StrTab[num];break;case 4:P2=4;P0=StrTab[num];break;case 5:P2=5;P0=StrTab[num];break;case 6:P2=6;P0=StrTab[num];break;case 7:P2=7;P0=StrTab[num];break;default:break;}num++; //扫描8次,使用8个数码管if(num==8)num=0;}/******************************************************************//* 定时器0中断 *//********************************************************** ********/void tim(void) interrupt 1 using 1{static unsigned char count; //定义内部局部变量TH0=0xd8; //重新赋值TL0=0xf0;count++;switch (count){case 0:case 20:case 40:case 60:case 80:Displaypro();break; //隔一定时间调用显示处理case 50:P1=~P1;break; //半秒 LED 闪烁default:break;}if (count==100){count=0;second++; //秒加1 if(second==60){second=0;minute++; //分加1 if(minute==60){minute=0;hour++; //时加1 if(hour==24)hour=0;}}}}。

基于单片机的时钟设计6位LED

基于单片机的时钟设计6位LED

基于单片机的时钟设计6位LED1. 引言时钟是我们日常生活中必不可少的工具之一。

设计一个基于单片机的6位LED时钟,不仅可以提供时间显示功能,还能够增加一些附加功能,如闹钟、计时器等。

本文将介绍基于单片机的时钟设计方案,并提供详细的电路原理图和源代码。

2. 设计思路基于单片机的时钟设计通常采用时分秒的显示方式,并通过按键进行时间的调整和功能的切换。

考虑到使用方便和成本等因素,我们选择采用6位LED数码管作为显示屏,并使用74HC595芯片进行驱动。

2.1 电路设计电路的主要部分包括单片机、时钟模块、数码管及驱动芯片。

单片机的核心是时钟芯片,用于计时和存储时间数据。

时钟模块提供了精确的时间信号,可以与单片机进行通信。

数码管通过74HC595芯片进行驱动,以实现数字的显示。

2.2 软件设计软件设计是基于单片机的时钟设计中非常重要的一环。

主要包括以下功能:•时间显示:将时、分、秒的数据转换为数码管的显示信息,并实现动态显示效果。

•时间调整:通过按键对时钟进行时间的调整,包括调整小时、分钟、秒钟。

•附加功能:实现闹钟、计时器等附加功能,可以通过按键进行设置和开关。

3. 电路原理图电路的原理图如下:+--------------+| 数码管 |+--------------+|+--------------------------+| 74HC595驱动芯片 |+--------------------------+|+--------------+| 单片机 |+--------------+|+---------------------+| 时钟模块 |+---------------------+4. 源代码以下是基于单片机的时钟设计的部分源代码示例:#include <reg52.h>sbit SCLK=P1^0; // 74HC595芯片时钟输入sbit RCLK=P1^1; // 74HC595芯片锁存输出sbit DIO=P1^2; // 74HC595芯片串行数据输入// 数字码表unsigned char code number[10]={0x3F, // 00x06, // 10x5B, // 20x4F, // 30x66, // 40x6D, // 50x7D, // 60x07, // 70x7F, // 80x6F// 9};void delay(unsigned int t){unsigned int i, j;for(i=0; i<t; i++)for(j=0; j<123; j++);}void display(unsigned char *num){unsigned char i;for(i=0; i<8; i++){DIO = num[i];SCLK = 0;SCLK = 1;}RCLK = 0;RCLK = 1;}void main(){unsigned char time[8] = {0, 0, 0, 0, 0, 0, 0, 0};unsigned char i, j;while(1){// 获取当前时间// 进行时间调整// 显示时间display(time);// 延时0.5秒delay(500);}}5. 结语基于单片机的6位LED时钟设计,通过硬件和软件的设计实现了时间的显示和调整功能,并可以扩展其他附加功能。

第一讲 电子钟的组成及工作原理

第一讲 电子钟的组成及工作原理

多功能大尺寸LED 时钟显示屏的设计与制作LED 数码管时钟显示屏的组成及工作原理一、时钟显示屏的组成数码管时钟显示屏的组成电路如图所示:由电源电路,单片机最小系统,时钟电路,键盘电路,数码管驱动显示电路,温湿度检测电路,红外接收电路,光亮度检测电路,语音报时电路、电器控制电路,通讯电路等组成。

图3-1 多功能时钟显示屏的组成框图二、时钟显示屏的工作原理时钟显示屏以单片机为核心完成对时钟芯片DS1302管理和数码管的驱动显示控制。

数码管采用静态显示方式,由多片串入并出芯片74HC595(功能等同74HC164)级联的方式进行驱动。

通过温湿度传感器实现温湿度的检测,红外接收电路完成无线调表和多种定时等时钟功能的设置,用按键也可实现时钟调整等以及各种时钟功能的设定。

光亮传感器可以监测环境明暗,实时调整数码管的显示亮度。

语音报时电路实现语音报时,电器控制电路可实现家用电器的定时控制或者上课打铃的控制等,通讯电路可进行有线、无线通讯、控制等。

单片机最小系统数码管红外接收电路键盘电路温湿度传感器光亮检测电路驱动电路语音报时电路通讯电路电器控制电路扩展接口时钟电路功能与特点一、功能:1、年、月、日、时、分、秒、星期;2、温度、湿度检测与显示;3、农历日期的显示;4、手动按键调表;5、红外遥控器调表;6、预留光亮度检测及显示亮度的自动调整;7、预留继电器控制(10A,可实现定时打铃、家电定时控制等);8、预留语音报时和音乐报时功能;9、预留RS232和485串行通讯接口,实现与微机通讯或者远程通讯;10、预留蜂鸣器提示音功能;11、预留无线通讯接口,可实现无线通讯;12、预留I/O接口,方便今后功能扩展。

13、电源保护电路,防止电源反接烧坏路线板元件;二、特点:1、大尺寸,由1.5~2.3寸数码管显示;2、农历、星期能尾随日期变化自动调整;3、采用时钟芯片和备用电池,走时准确,断电不影响计时;4、静态显示工作模式,延长时钟显示屏使用寿命;5、采用新型单片机功能更强、速度更快;6、硬件设计功能丰富;7、可实现数码管显示亮度随环境明暗自动调节,人性化设计,使用舒适;8、可实现多种显示模式,以实现节能目的;9、软件开辟可实现多种扩展功能;10、插接件接口设计,便于组装、维护。

单片机课设LED显示电子钟

单片机课设LED显示电子钟

辽宁工业大学单片机与接口技术课程设计(论文)题目:LED显示的电子钟院(系):电子与信息工程学院专业班级:计算机班学号:学生姓名:指导教师:教师职称:起止时间:课程设计(论文)任务及评语院(系):电子与信息工程学院教研室:计算机科学与技术目录第1章设计概述与要求 (1)1.1 设计概述 (1)1.2设计要求 (1)第2章系统设计 (3)2.1 框图设计 (3)2.2 硬件设计 (3)第3章软件设计 (9)3.1 程序流程图 (9)第4章PROTEUS仿真结果 (12)4.1 总体电路仿真结果 (12)4.2 各个功能的仿真结果 (12)第5章总结 (14)参考文献 (14)附录程序代码 (15)第1章设计概述与要求1.1 设计概述课程设计应以学生认知为主体,充分调动学生的积极性和能动性,重视学生自学能力培养。

根据课程设计具体课题安排时间,确定课题的涉及,变成和调试内容,分团队开展课程设计活动,安排完成每部分工作。

课程设计集中在实验室进行。

在课程设计过程中,坚持独立完成,实现课题规定的各项指标,并写出设计报告。

要求学生自己调研,设计系统功能,划分软硬件功能,选择器件,用Proteus软件在PC机上完成硬件原理图设计。

然后使用使用Proteus软件在PC机运行系统仿真,调试电路和修改调试程序。

对整个系统做试运行,有问题再进一步修改调试,直至达到设计的要求和取得满意的效果。

最后编写系统说明书,其内容主要包括系统功能介绍,使用范围,主要性能指标,使用方法,注意事项等。

要求学生通过理论设计和实物制作解决相应的实际问题,巩固和运用在《单片机原理与接口技术》课程中所学的理论知识和实验技能,掌握单片机应用系统的一般设计方法,提高设计能力和实践动手能力,为以后从事电子电路设计、研发电子产品打下良好的基础。

基于AT89C51单片机,制作一个LED显示的智能电子钟。

1.2设计要求1、设计题目:LED显示的电子钟2、设计任务:基于AT89C51单片机,制作一个LED显示的智能电子钟。

基于单片机LED点阵显示电子时钟设计

基于单片机LED点阵显示电子时钟设计

.2015~2016学年第一学期《单片机原理及应用》课程设计报告题目:基于单片机LED点阵显示电子时钟设计班级:13级电子信息姓名:指导教师:.电气工程学院2015年11月《单片机原理及应用》任务书摘要LED显示屏作为信息传播的一种重要手段,已经成为城市信息现代化建设的标志,LED显示屏随着社会经济的不断进步,以及LED制造技术的完善,人们对LED显示屏的认识将会越来越深入,其应用领域将会越来越广;LED显示屏经多年的开发、研制、生产,其技术目前已经成熟。

现在各种广告牌不再是白底黑字了,也不再是单一的非电产品,而是用上了丰富多彩的LED电子产品,为城市增添了一道靓丽的风景。

本次课程设计是基于AT89C52单片机的LED点阵电子显示器的设计,采用的并行方式的显示方案来实现。

该电子时钟由AT89C51,74LS373数码管等构成,采用晶振电路作为驱动电路,由延时程序和循环程序产生的一秒定时,达到时分秒的计时。

用keil软件生成.hex文件,用Proteus的ISIS软件实现了单片机LED 点阵电子时钟系统的设计与仿真。

关键词:单片机;LED点阵;电子显示器目录《单片机原理及应用》 (I)课程设计报告 (I)《单片机原理及应用》任务书....................................................................................................................... I I 摘要.. (IV)第1章方案选择与论证 (1)1.1 设计任务与要求 (1)1.2 总体设计方案 (1)1.2.1 硬件部分的设计 (1)1.2.2 软件部分设计 (3)第2章硬件电路的设计 (3)2.1 晶振电路设计 (3)2.2 复位电路设计 (4)2.3 时分调节电路设计 (4)2.4 驱动电路设计 (5)2.5 总原理图 (5)第3章系统软件设计 (7)3.1 软件流程图 (7)3.2 主要软件程序内容 (8)3.2.1 定时器工作程序 (8)3.2.2 数字显示程序 (9)第4章系统调试与仿真 (14)4.1开发过程 (14)4.2 电路仿真 (17)总结 (22)参考文献 (23)附录 (25)答辩记录及评分表 (36)第1章方案选择与论证1.1 设计任务与要求(1)采用LED灯进行显示(2)可以根据按键来对时间进行调整(3)初始时间为12:00.1.2 总体设计方案1.2.1硬件部分的设计这次硬件电路部分用PROTEUS软件,该软件主要用来进行元器件的绘制和原理图的绘制,PROTEUS软件对绘制好的原理图进行仿真和调试。

单片机实验报告——LED数码管显示实验

单片机实验报告——LED数码管显示实验

单片机实验报告——LED数码管显示实验引言单片机是一种基础的电子元件,作为电子专业的学生,学习单片机编程是必不可少的。

在单片机编程实验中,学习如何使用IO口驱动LED数码管显示是重要的一部分。

在此次实验中,我们用到的是STM32F103C8T6单片机,与之相配套的是LED数码管、杜邦线等元件,并利用Keil uVision5软件进行编程操作。

本文的目的是通过实验与实验数据的分析说明单片机控制LED数码管的方法,希望对单片机初学者有所帮助。

实验原理1.LED数码管简介LED数码管是利用发光二极管实现数字和字母的显示,其外观形式有共阳和共阴两种。

共阳型数码管的共阳端是接在公共的端子上,数字和字母的每一个元素(即1、2、3、4、5、6、7、8、9、A、B、C、D、E、F)的生命延伸出去,称为”高”电平;共阴型数码管的共阴端是接在公共的端子上,数字和字母的每一个元素的生命也是分别延伸出去,但称为”低”电平。

2.STM32F103C8T6单片机STM32F103C8T6单片机是一款功能完备的32位MCU产品,它具有高性能,低功耗的特点,可广泛应用于许多硬件系统。

此次实验所需的LED数码管的显示量是5个(共阳型),因此我们只需要5个IO口即可将STM32F103C8T6单片机与LED数码管连接起来。

实验材料STM32F103C8T6单片机、LED数码管、杜邦线、电容、电阻、面包板等。

实验步骤1.硬件连接:将LED数码管的针脚连接到单片机的IO口,如下图所示:其中P0-P4分别代表数字0-4,PE2口作为LED点亮控制口,分别接入面包板中。

2.软件设置:使用Keil uVision5进行程序编写,将代码下载到单片机控制器内,开启电路,即可观察到LED数码管上的数字进行了变化。

代码如下所示:实验结果将程序下载到开发板后,启动单片机,即可看到红色LED数码管逐个显示从0-9的数字。

达到9后又从0开始循环。

实验过程及结论本次实验中彻底了解到了用单片机控制LED数码管的方法,单片机控制LED数码管变化是通过选中不同的IO口来完成的,利用Keil uVision5软件可以完成程序编写。

51单片机数码管显示时钟程序

51单片机数码管显示时钟程序

#include〈reg52.h〉//#include#include<intrins。

h〉#define uchar unsigned char#define uint unsigned intsbit dula=P2^6;sbit wela=P2^7;sbit key1=P3^4;sbit key2=P3^5;sbit key3=P3^6;sbit beep=P2^3;unsigned code table[]={0x3f ,0x06 ,0x5b , 0x4f ,0x66 ,0x6d ,0x7d ,0x07 ,0x7f ,0x6f ,0x77 ,0x7c,0x39 , 0x5e , 0x79 ,0x71};uchar num1,num2,s,s1,m,m1,f,f1,num,numf,nums,dingshi;uchar ns,ns1,nf,nf1,numns,numnf;void delay(uint z);void keyscan ();void keyscan1 ();void alram();void display(uchar m,uchar m1,uchar f,ucharf1,uchars,uchars1); void display0(uchar nf,uchar nf1,uchar ns,uchar ns1);void main(){TMOD=0x01;//设定定时器0工作方式1TH0=(65536—46080)/256 ;TL0=(65536—46080)%256 ;EA=1;//开总中断ET0=1;//开定时器0中断TR0=1;//启动定时器0中断numns=12;numnf=0;while(1){if(dingshi==0){keyscan ();display(m,m1,f,f1,s,s1);alram();}else{keyscan1 ();display0(nf,nf1,ns,ns1);}}}void keyscan (){if(key1==0){delay(10);if(key1==0)nums++;if (nums==24)nums=0;while(!key1);display(m,m1,f,f1,s,s1);}if(key2==0){delay(10);if(key2==0)numf++;if (numf==60)numf=0;while(!key2);display(m,m1,f,f1,s,s1);}if(key3==0){delay(10);if(key3==0){dingshi=~dingshi;while(!key3)display(m,m1,f,f1,s,s1);}}/*if(key4==0){delay(10);if(key4==0){flag=1;while(!key4);display(m,m1,f,f1,s,s1);}}*/}void keyscan1(){if(key1==0){delay(10);if(key1==0)numns++;if (numns==24)numns=0;while(!key1);// display(nf,nf1,ns,ns1);}if(key2==0){delay(10);if(key2==0)numnf++;if (numnf==60)numnf=0;while(!key2);// display(nf,nf1,ns,ns1);}if(key3==0){delay(10);if(key3==0){dingshi=0;while(!key3);// display(m,m1,f,f1,s,s1);}}}void alram(){if((numnf==numf)&&(numns==nums))beep=0;if(((numnf+1==numf)&&(numns==nums))&&(dingshi==0))//一分钟报时提示beep=1;}void display0(uchar nf,uchar nf1,uchar ns,uchar ns1)//闹钟显示函数{nf=numnf%10;nf1=numnf/10;ns=numns%10;ns1=numns/10;/*wela=1;P0=0xc0;//送位选数据wela=0;P0=0xff;*/dula=1;P0=table[ns1];dula=0;P0=0xff;wela=1;P0=0xfe;wela=0;delay(1);dula=1;P0=table[ns]|0x80;dula=0;wela=1;P0=0xfd;wela=0;delay(1);dula=1;P0=table[nf1];dula=0;P0=0xff;wela=1;P0=0xfb;wela=0;delay(1);dula=1;P0=table[nf];dula=0;P0=0xff;wela=1;P0=0xf7;wela=0;delay(1);}void display(uchar m,uchar m1,uchar f,ucharf1,uchars,uchars1) //时间显示{dula=1;P0=table[m1];//秒位第1位dula=0;P0=0xff;wela=1;P0=0xef;wela=0;delay(1);dula=1;P0=table[m];// 秒位第2位dula=0;P0=0xff;wela=1;wela=0;delay(1);dula=1;P0=table[s1]; //时位第一位dula=0;P0=0xff;wela=1;P0=0xfe;wela=0;delay(1);dula=1;P0=table[s]|0x80;dula=0;P0=0xff;wela=1;P0=0xfd;wela=0;delay(1);dula=1;P0=table[f1];//分位第一位dula=0;P0=0xff;wela=1;P0=0xfb;wela=0;delay(1);dula=1;P0=table[f]|0x80;dula=0;P0=0xff;wela=1;P0=0xf7;wela=0;delay(1);}void T0_timer() interrupt 1{TH0=(65536—46080)/256 ;TL0=(65536—46080)%256 ;num2++;if(num2==20){num++;num2=0;m=num%10;m1=num/10;f=numf%10;f1=numf/10;s=nums%10;s1=nums/10;if(num==59){num=0;numf++;if(numf==59){numf=0;nums++;}if (nums==24)nums=0;}}}void delay(uint z){uint x,y;for(x=110;x〉0;x—-)for(y=z;y>0;y—-);}。

单片机数字时钟实验报告

单片机数字时钟实验报告

单片机数字时钟实验报告引言:数字时钟是现代人们生活中不可或缺的物品之一。

现代数字时钟的核心是单片机,而且数字时钟的制作也是单片机初学者的必备实验之一。

本文将详细介绍单片机数字时钟的制作过程和原理。

实验原理:数字时钟的原理非常简单,它由单片机、时钟芯片、LED数码管等元件组成。

单片机通过时钟芯片来获取时间信息,并将时间信息通过端口输出给LED数码管,从而显示当前时间。

单片机的主要作用是控制时钟芯片的读取和LED数码管的显示。

实验材料:1. 单片机:STC89C522. 时钟芯片:DS13023. LED数码管:共阳极4位LED数码管4. 电路板、电阻、电容、晶体振荡器、按键、排针等元件实验步骤:1. 确定电路原理图:根据实验原理,确定单片机、时钟芯片和LED 数码管之间的电路连接方式。

2. 绘制电路布局图:将电路原理图转换为真实的电路布局图,并根据元件大小和数量选择合适的电路板。

3. 焊接电路:根据电路布局图进行电路的焊接,并进行电路的检查和修正。

4. 编写程序:根据实验原理编写单片机程序,并将程序下载到单片机中。

5. 测试程序:将电路接通电源后,通过按键和LED数码管来测试程序的正确性和稳定性。

实验结果:经过实验,我们成功制作了一款单片机数字时钟。

该数字时钟具有以下功能:1. 显示当前的小时、分钟和秒钟。

2. 可以通过按键进行时间的调整。

3. 每隔一秒钟左右,LED数码管上的数据会刷新一次,以显示最新的时间信息。

4. 当电源断开后,时钟芯片会自动保存当前时间信息,重新通电后,显示的时间信息仍然是正确的。

结论:通过本次实验,我们了解了单片机数字时钟的制作原理和步骤,并成功制作了一款数字时钟。

通过实验,我们深入了解了单片机的应用,也为我们今后的电子设计和制作提供了很好的基础。

基于单片机的电子时钟的设计与实现

基于单片机的电子时钟的设计与实现

基于单片机的电子时钟的设计与实现电子时钟是一种使用微处理器或单片机作为主控制器的数字时钟。

它不仅能够显示当前时间,还可以具备其他附加功能,如闹钟、日历、温度显示等。

一、设计目标设计一个基于单片机的电子时钟,实现以下功能:1.显示时间:小时、分钟和秒钟的显示,采用7段LED数码管来显示。

2.闹钟功能:设置闹钟时间,到达设定的时间时会发出提示音。

3.日历功能:显示日期、星期和月份。

4.温度显示:通过温度传感器获取当前环境温度,并显示在LED数码管上。

5.键盘输入和控制:通过外部键盘进行时间、日期、闹钟、温度等参数的设置和调整。

二、硬件设计1.单片机选择:选择一款适合的单片机作为主控制器,应具备足够的输入/输出引脚、中断和定时器等功能,如STC89C522.时钟电路:使用晶振为单片机提供稳定的时钟源。

3.7段LED数码管:选择合适的尺寸和颜色的数码管,用于显示小时、分钟和秒钟。

4.温度传感器:选择一款适合的温度传感器,如DS18B20,用于获取环境温度。

5.喇叭:用于发出闹钟提示音。

6.外部键盘:选择一款适合的键盘,用于设置和调整时间、日期、闹钟等参数。

三、软件设计1.初始化:设置单片机定时器、外部中断和其他必要的配置。

2.时间显示:通过定时器中断,更新时间,并将小时、分钟和秒钟分别显示在相应的LED数码管上。

3.闹钟功能:设置闹钟时间,定时器中断检测当前时间是否与闹钟时间一致,若一致则触发警报。

4.日历功能:使用定时器中断,更新日期、星期和月份,并将其显示在LED数码管上。

5.温度显示:通过定时器中断,读取温度传感器的数据,并将温度显示在LED数码管上。

6.键盘输入和控制:通过外部中断,读取键盘输入,并根据输入进行相应的操作,如设置时间、闹钟、日期等。

7.警报控制:根据设置的闹钟时间,触发警报功能,同时根据用户的设置进行控制。

四、测试与调试完成软件设计后,进行系统测试与调试,包括验证显示时间、日期、温度等功能的准确性,以及闹钟和警报功能的触发与控制。

基于单片机的智能电子时钟的设计及应用

基于单片机的智能电子时钟的设计及应用

基于单片机的智能电子时钟的设计及应用一、引言智能电子时钟是一种应用广泛的电子产品,它不仅能够准确显示时间,还具备了一系列智能化的功能,如闹钟、温湿度显示、定时开关等。

基于单片机的智能电子时钟设计是近年来电子技术领域中备受关注的研究方向。

本文将详细介绍基于单片机的智能电子时钟设计及其应用,并对其进行深入研究。

二、基于单片机的智能电子时钟设计原理1. 选取合适的单片机芯片在设计基于单片机的智能电子时钟之前,首先需要选取合适的单片机芯片。

常见选择包括51系列、AVR系列和ARM系列等。

根据具体需求和功能要求进行选择,并考虑到其性价比、易用性和扩展性。

2. 时钟模块设计在整个系统中,准确显示时间是最基本也是最关键的功能之一。

因此,需要设计一个稳定可靠且精度高的时钟模块。

常见选择包括RTC 芯片和GPS模块等。

3. 显示模块选择与驱动为了实现时间的直观显示,需要选择合适的显示模块。

常见选择包括LED数码管、LCD液晶显示屏和OLED显示屏等。

同时,还需要设计合适的驱动电路,以实现对显示模块的控制。

4. 功能模块设计除了基本的时间显示功能外,智能电子时钟还可以具备一系列智能化功能。

常见功能包括闹钟、温湿度显示、定时开关等。

这些功能需要通过相应的传感器和控制电路来实现。

三、基于单片机的智能电子时钟应用1. 家庭生活基于单片机的智能电子时钟在家庭生活中有着广泛应用。

它可以作为家庭闹钟,准确地唤醒人们起床;同时也可以作为温湿度监测器,在家中监测室内温湿度,并提供相应数据。

2. 办公场所在办公场所中,基于单片机的智能电子时钟可以作为时间提醒器,在工作时间结束时提醒人们休息;同时也可以作为定时开关,在指定时间自动打开或关闭相应设备。

3. 公共场所在公共场所中,基于单片机的智能电子时钟具备更多应用场景。

例如,在火车站、机场等候车室中,它可以作为候车时间显示器,为旅客提供准确的候车时间信息。

四、基于单片机的智能电子时钟设计案例以基于51系列单片机的智能电子时钟设计为例,具体设计方案如下:1. 硬件设计选用51系列单片机作为主控芯片,搭配RTC芯片作为时钟模块。

电子时钟实验报告电子时钟

电子时钟实验报告电子时钟

电子时钟实验报告一、实验目的学习8051定时器时间计时处理、按键扫描及LED数码管显示的设计方法。

二、设计任务及要求利用实验平台上4个LED数码管,设计带有闹铃功能的数字时钟,要求:1.在4位数码管上显示当前时间,显示格式为“时时分分”;2.由LED闪动做秒显示;3.利用按键可对时间及闹玲进行设置,并可显示闹玲时间。

当闹玲时间到蜂鸣器发出音乐,按停止键使可使闹玲声停止。

三、工作原理及设计思路利用单片机定时器完成计时功能,定时器0计时中断程序每隔5ms中断一次并当作一个计数,每中断一次计数加1,当计数200次时,则表示1s到了,秒变量加1,同理再判断是否1min钟到了,再判断是否1h到了。

为了将时间在LED数码管上显示,可采用静态显示法和动态显示法,由于静态显示法需要数据锁存器等较多硬件,可采用动态显示法实现LED显示。

闹铃声由交流蜂鸣器产生,电路如右图,当P1.7输出不同频率的方波,蜂鸣器便会发出不同的声音。

四、电路设计及描述(1) 硬件连接部分:在ZKS-03单片机综合实验仪上有四位共阳LED数码管,其标号分别为LED1~LED4。

为了节省MCU的I/O口,采用串行接口方式,它仅占用系统2个I/O口,即P1.0口和P1.1口,一个用作数据线SDA,另一个用作时钟信号线CLK,它们都通过跳线选择器JP1相连。

由于采用共阳LED数码管,它的阴极分别通过限流电阻R20~R27连接到控制KD_0~KD_Q7。

这样控制8个发光二极管,就需要8个I/O口。

但由于单片机的I/O口资源是有限的,因此常采用实验电路所示的串并转换电路来扩充系统资源。

串并转换电路其实质是一个串入并处的移位寄存器,串行数据再同步移位脉冲CLK的作用下经串行数据线SDA把数据移位到KD_0~KD_Q7端,这样仅需2根线就可以分别控制8个发光二极管的亮灭。

而P0口只能作地址/数据总线,P2口只能作地址总线高8位,P3.0、P3.1作为串行输入、输出接口,实验仪上单片机可用作I/O的口仅有:P1.0--P1.7 ,8位;P3.2、P3.3、P3.4、P3.5 ,4位。

基于单片机控制的智能定时闹钟方案设计书(含完整程序仿真图)

基于单片机控制的智能定时闹钟方案设计书(含完整程序仿真图)

本设计是定时闹钟的设计,由单片机AT89C51芯片和LED数码管为核心,辅以必要的电路,构成的一个单片机电子定时闹钟。

电子钟设计可采用数字电路实现,也可以采用单片机来完成。

数字电子钟是用数字集成电路构成的,用数码管显示“时”,“分”,“秒”的现代计时装置。

若用数字电路完成,所设计的电路相当复杂,大概需要十几片数字集成块,其功能也主要依赖于数字电路的各功能模块的组合来实现,焊接的过程比较复杂,成本也非常高。

若用单片机来设计制作完成,由于其功能的实现主要通过软件编程来完成,那么就降低了硬件电路的复杂性,而且其成本也有所降低,所以在该设计中采用单片机利用AT89C51,它是低功耗、高性能的CMOS型8位单片机。

片内带有4KB的Flash存储器,且允许在系统内改写或用编程器编程。

另外,AT89C51的指令系统和引脚与8051完全兼容,片内有128B的RAM、32条I/O口线、2个16位定时计数器、5个中断源、一个全双工串行口等。

AT89C51单片机结合七段显示器设计的简易定时闹铃时钟,可以设置现在的时间及显示闹铃设置时间,若时间到则发出一阵声响,进—步可以扩充控制电器的启停。

设计内容包括了秒信号发生器、时间显示电路、按键电路、供电电源以及闹铃指示电路等几部分的设计。

采用四个开关来控制定时闹钟的工作状态,分别为:K1、设置时间和闹钟的小时;K2、设置小时以及设置闹钟的开关;K3、设置分钟和闹钟的分钟;K4、设置完成退出。

课设准备中我根据具体的要求,查找资料,然后按要求根据已学过的时钟程序编写定时闹钟的程序,依据程序利用proteus软件进行了仿真实验,对出现的问题进行分析和反复修改源程序,最终得到正确并符合要求的结果。

设计完成的定时闹钟达到课程设计的要求,在到达定时的时间便立即发出蜂鸣声音,持续一分钟。

显示采用的六位数码管电路,如果亮度感觉不够,可以通过提升电阻来调节,控制程序中延迟时间的长短,可以获得不同的效果。

基于AT89C51单片机的数字电子时钟设计

基于AT89C51单片机的数字电子时钟设计

/安徽工程大学机电学院单片机课程设计题目:数字电子时钟设计指导老师:***制作人员:范超学号:************班级:自动化2132日期:7月13日-7月24日总评成绩:课程任务设计书设计题目:数字电子时钟的设计设计任务:1.设计一款时,分,秒可调数字电子时钟可整点报时;2.设计三个按键K1,K2和K3,用于调节时钟的时间;3.用8个、七段LED数码管作为显示设备,开机显示00-00-00;本设计采用AT89C51单片机为核心器件。

具有电子钟显示,时间调整,整点报时等功能。

此数字钟是一个将“时”、“分”、“秒”显示于人的视觉器官的计时装置。

根据60秒为一分、60分为1小时的计数周期,构成秒、分、时的计数,实现计时的功能。

而且能显示清晰、直观的数字符号。

针对数字钟会产生误差的现象,就设计有校准时间的功能。

AT89C51单片机控制的数字钟的硬件结构与软件设计,给出了汇编语言源程序。

此数字钟是一个将“时”、“分”、“秒”显示于人的视觉器官的计时装置。

它的计时周期为24小时,显示满刻度为24时00分00秒,另外应有校时功能。

电路由时钟脉冲发生器、时钟计数器、译码驱动电路和数字显示电路以及时间调整电路组成。

用晶体振荡器产生时间标准信号,这里采用石英晶体振荡器。

根据60秒为1分、60分为1小时、24小时为1天的计数周期,分别组成两个60进制(秒、分)、一个24进制(时)的计数器。

显示器件选用LED八段数码管。

在译码显示电路输出的驱动下,显示出清晰、直观的数字符号。

针对数字钟会产生走时误差的现象,在电路中就设计有有校准时间功能的电路。

关键字:Proteus,Keil uVision,AT89C51,电子钟,整点报时摘要 (3)第1章概述 (5)1.1 设计背景 (5)1.2系统方案论证与设计 (5)第2章系统硬件设计 (7)2.1 系统总电路的设计 (7)2.1.1系统的总框图 ................................................................................................2.1.2芯片的选择 (7)2.2最小系统设计 (9)2.2.1时钟电路的选择与设计 (10)2.2.2复位电路的选择与设计 .............................................. 错误!未定义书签。

单片机课程设计LED点阵显示电子时钟

单片机课程设计LED点阵显示电子时钟

(课程设计)单片机原理及接口技术课程设计题目:LED点阵显示电子时钟学院班级:学生姓名:学号:摘要电子时钟是一种利用数字电路来显示秒、时的计时装置。

用单片机控制的LED点阵电子显示时钟具有结构简单、性能可靠、成本低廉和显示灵活等优点,其应用前景广阔。

本文设计的是一个5块8*8点阵时钟显示屏,数字采用静止显示方式。

实现的功能有:时钟功能,确定显示当前时间,并可以用按键实现误差调节;计时功能,开始与停止计时;显示精度切换功能,根据不同的工作场合,切换显示精度(时:分显示或分:秒显示硬件组成:AT89C51单片机、集成块74LS373和74LS138、LED点阵、按键若干、晶振、电容、电阻、电源等。

软件组成:定时中断程序、显示程序、起停控制程序、功能切换程序。

系统实现了计时和显示精度切换等创新功能。

关键词:点阵显示电子时钟;计时;精度切换目录摘要 (2)1 概述 (4)2 系统总体方案设计 (5)2.1系统总体设计框图 (5)2.2 初步设计思路 (5)3 硬件电路设计 (6)3.1 LED数码管显示电路 (6)3.1.1 LED点阵 (6)3.1.2 74LS373锁存器 (7)3.1.3 74LS138译码器 (7)3.2 复位电路 (8)3.3 晶振电路 (9)3.4 按键电路 (9)3.5 单片机连接电路 (10)4 软件设计 (11)4.1 计时程序设计 (11)4.2 显示程序设计 (11)4.3 时:分/分:秒切换程序 (13)4.4 起、停控制程序 (14)5 系统调试 (15)6 心得体会 (16)参考文献 (16)附录 (17)附录A:源程序清单 (17)附录B:元件清单 (23)1 概述在日常生活中,大家见到的都是数码管制作的电子钟,LED点阵时钟则不多见。

用单片机控制的LED点阵显示电子钟具有结构简单、性能可靠、成本低廉、价格便宜和显示灵活等优点,其应用前景广阔。

之所以使用LED点阵电子屏显示,是与它本身所具有的优点分不开的[1]。

基于单片机的电子时钟6位LED数码管显示

基于单片机的电子时钟6位LED数码管显示

数码管显示电子时钟设计一.功能要求1.数字电子时钟最主要是LED数码管显示功能,以24小时为一个周期,显示时间时、分、秒。

2.具有校时功能,可以对时、进行单独校对,使其校正到标准时间。

二.方案论证1.数字时钟方案数字时钟是本设计的最主要的部分。

根据需要,可利用两种方案实现。

方案一:本方案采用Dallas公司的专用时钟芯片DS12887A。

该芯片内部采用石英晶体振荡器,其芯片精度不大于10ms/年,且具有完备的时钟闹钟功能,因此,可直接对其以用于显示或设置,使得软件编程相对简单。

为保证时钟在电网电压不足或突然掉电等突发情况下仍能正常工作,芯片内部包含锂电池。

当电网电压不足或突然掉电时,系统自动转换到内部锂电池供电系统。

而且即使系统不上电,程序不执行时,锂电池也能保证芯片的正常运行,以备随时提供正确的时间。

方案二:本方案完全用软件实现数字时钟。

原理为:在单片机内部存储器设三个字节分别存放时钟的时、分、秒信息。

利用定时器与软件结合实现1秒定时中断,每产生一次中断,存储器内相应的秒值加1;若秒值达到60,则将其清零,并将相应的分字节值加1;若分值达到60,则清零分字节,并将时字节值加1;若时值达到24,则将十字节清零。

该方案具有硬件电路简单的特点。

但由于每次执行程序时,定时器都要重新赋初值,所以该时钟精度不高。

而且,由于是软件实现,当单片机不上电,程序不执行时,时钟将不工作。

基于硬件电路的考虑,本设计采用方案二完成数字时钟的功能。

2.数码管显示方案方案一:静态显示。

所谓静态显示,就是当显示器显示某一字符时,相应的发光二极管恒定的导通或截止。

该方式每一位都需要一个8 位输出口控制。

静态显示时较小的电流能获得较高的亮度,且字符不闪烁。

但当所显示的位数较多时,静态显示所需的I/O口太多,造成了资源的浪费。

方案二:动态显示。

所谓动态显示就是一位一位的轮流点亮各个位,对于显示器的每一位来说,每隔一段时间点亮一次。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

单片机数码管LED 显示电子钟(C语言)转载
收藏人:shengshiguanjia
2010-11-24 | 阅:862 转:50 | 来源| 分享
单片机数码管LED 显示电子钟(C语言)转载
2010-10-22 01:32

/************************************************************ **************
∙* 标题: 数码管显示电子钟(C语言)
∙* 作者: wentao
∙* 日期: 2007.3.3
∙* 软件: Keil C51 V8.02
∙* 芯片: AT89X51
∙* 说明: 实验板实测通过,数码管为8位共阳
∙* 声明: 自用存档!另仅供需要的朋友参考,请勿用做不道德转载及商业用途!

************************************************************* *************/

∙#include <reg51.h>
∙#include <intrins.h>
∙#define uchar unsigned char

∙void delay_ms(uchar ms); // 延时毫秒@12M,ms最大值
255
∙void key_scan(); // 按键扫描
∙void key_to(); // 按键处理

∙uchar code dis_code[11] =
{0xc0,0xf9,0xa4,0xb0,0x99, //段码表
∙//
0 1 2 3 4
对应内容
∙ 0x9 2,0x82,0xf8,0x80,0x90,0xbf};
∙//
5 6 7 8 9 -

∙uchar data dis[8]; // dis[0]为秒个位
值,dis[1]为秒十位值
∙//
dis[2],dis[5]为'-'段码的偏移量
∙// dis[3]为分个位值,dis[4为分十位值
∙// dis[6]为时个位值,dis[7]为时十位值

∙uchar data sec = 0; // 秒计数器(00s-59s)
∙uchar data min = 0; // 分计数器(00m-59m)
∙uchar data hou = 0; // 时计数器)00h-23h)

∙uchar data cou = 0; // 软计数器,对10ms时基信号累加到1s

∙uchar data dis_b; // dis_b为位码选通数码管
∙uchar data dis_r; // dis_r为取段码时的偏移量

∙uchar data key_v = 0; // 存储键值
∙uchar data key_t = 0; // 按键扫描中临时存储键


∙void main()
∙ {
∙P2= 0xff; // 关所有数码

∙P1= 0xff; // p1为准双向口,作输入时先写1
∙ dis[2] = 10; // '-'在段码表中偏移量为10
∙ dis[5] = 10; // '-'在段码表中偏移量为10
∙ dis_b = 0x7f; // 初始选通P2.7口数码管
∙ dis_r = 0; // 初始化偏移量为0

∙TMOD= 0x11; // 定时/计数器0,1工作于方式1
∙TH0= 0xd8; // 预置定时常数55536(d8f0),产生10ms时基信号
∙TL0= 0xf0;
∙TH1= 0xfc; // 预置定时常数64536(fc18),产生1ms间隔用于动态显示
∙TH1= 0x18;
∙EA= 1; // 开总中

∙ET0= 1; // 定时/计数器0允许中断
∙ET1= 1; // 定时/计数器1允许中断
∙TR0= 1; // 开闭定时/计数器0
∙TR1= 1; // 启动定时/计数器1
∙while(1)
∙ {
∙ key_t = P1; // 读入键值
∙if(key_t != key_v) // 键值改

∙ {
∙ delay_ms(10); // 延时10ms消抖
∙ key_t = P1; // 再次读入键值
∙if(key_t != key_v) // 键值仍未改变则不是抖动
∙ {
∙ key_v = key_t; // 保存键值
∙ key_to(); // 键处理
∙ }
∙ }
∙ }
∙ }
∙void key_to() // 按键处理子程序
∙ {
∙if(key_v == 0xef) // P1.4口键

∙ {
∙if(min == 59) // 分计数已加到59
∙ min = 0; // 清零之
∙else
∙ min++; / / 否则加1
∙ }
∙else
∙ {
∙if(key_v == 0xdf) // P1.5口键

∙ {
∙if(hou == 23) // 时计数已加到23
∙ hou = 0; // 清零之
∙else
∙ hou++; / / 否则加1
∙ }
∙ }
∙ }
∙void tiem0(void) interrupt 1 // T/C0中断服务程序(产生10ms时基信号)
∙ {
∙ cou++; / / 软计数器加1
∙if(cou == 100) // 计数值到100(1s)
∙ {
∙ cou = 0; // 软计数器清零
∙ sec++; / / 秒计数器加1(进位10ms*100=1s)
∙if(sec == 60) // 秒计数值到60
∙ {
∙ sec = 0; // 秒计数器清零
∙ min++; /
/ 分计数器加1(进位60s=1m)
∙if(min == 60) // 分计数到60
∙ {
∙ min = 0; // 分计数器清零
∙ hou++; / / 时计数器加1(进位60m=1h)
∙if(hou == 23) // 时计数到23
∙ hou = 0; // 时计数器清零
∙ }
∙ }
∙ }
∙TH0= 0xd8; // 重置定时常数
∙TL0= 0xf0;
∙ }
∙void time1(void) interrupt 3 // T/C1中断服务程序(延时1ms数码管动态显示)
∙ {
∙ dis[0] = sec % 10; // 秒计数器个位赋绐dis[0]
∙ dis[1] = sec / 10; // 秒计数器十位赋绐dis[1]
∙ dis[3] = min % 10; // 分计数器个位赋绐dis[3]
∙ dis[4] = min / 10; // 分计数器十位赋绐dis[4]
∙ dis[6] = hou % 10; // 时计数器个位赋绐dis[6]
∙ dis[7] = hou / 10; // 时计数器十位赋绐dis[7]

∙P0= dis_code[dis[dis_r]]; // 段码送P0口
(dis[0]...dis[7])
∙P2= dis_b; // 位码送P2口

∙ dis_r++; // 偏移量加1,下次中断时显示下个数
∙ dis_r &= 0x07; // dis_r增到8时自动清0(使之在0到7间循环)。

相关文档
最新文档