单片机数字时钟资料汇总

合集下载

单片机制作的6位数字钟

单片机制作的6位数字钟

单片机制作的6位数字钟常见的电子钟程序由显示部分,计算部分,时钟调整部分构成。

时钟的基本显示原理:时钟开始显示为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秒定时用初值(50MS×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 ET0 ;关T0中断允许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秒时对秒计时单元清0 MOV R0,#77H ;指向分计时单元(76H-77H)ACALL ADD1 ;分计时单元加1分钟MOV A,R3 ;分数据放入ACLR C ;清进位标志CJNE A,#60H,ADDHH ;ADDHH: JC OUTT0 ;小于60分时中断退出ACALL CLR0 ;大于或等于60分时分计时单元清0 MOV R0,#79H ;指向小时计时单(78H-79H)ACALL ADD1 ;小时计时单元加1小时MOV A,R3 ;时数据放入ACLR C ;清进位标志CJNE A,#24H,HOUR ;HOUR: JC OUTT0 ;小于24小时中断退出ACALL CLR0 ;大于或等于24小时小时计时单元清0 OUTT0: MOV 72H,76H ;中断退出时将分、时计时单元数据移MOV 73H,77H ;入对应显示单元MOV 74H,78H ;MOV 75H,79H ;POP PSW ;恢复状态字(出栈)POP ACC ;恢复累加器SETB ET0 ;开放T0中断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不显示)状态。

电子时钟单片机【完整版】

电子时钟单片机【完整版】

烟台南山学院单片机课程设计题目电子时钟姓名:所在学院所学专业:班级:学号:指导教师:完成时间:随时代的发展,生活节奏的加快,人们的时间观念愈来愈强;随自动化、智能化技术的发展,机电产品的智能度愈来愈高,用到时间提示、定时控制的地方也会愈来愈多,因此,设计开发数字时钟具有良好的应用前景。

由于单片机价格的低成本、高性能,在自动控制产品中得到了广泛的应用。

本设计利用Atmel公司的AT89S52单片机对电子时钟进行开发,设计了实现所需功能的硬件电路,应用汇编语言进行软件编程,并用实验板进行演示、验证。

在介绍本单片机的发展情况基础上,说明了本设计实现的功能,以及实验板硬件情况,并对各功能电路进行了分析。

主要工作放在软件编程上,用实验板实现时间、日期、定时及它们的设定功能,详细对软件编程流程以及调试进行了说明,并对计时误差进行了分析及校正,提出了定时音与显示相冲突问题及解决方案。

实验证明效果良好,可以投入使用。

本次仿真设计的目的就是让同学们在理论学习的基础上,通过完成一个涉及MCS—51单片机都种资源应用并具有综合功能的小系统目标板的设计与编程应用,使学生不但能够将课堂上学到的理论知识与实际应用结合起来,而且能够对电子电路、电子元器件、印制电路板等方面的知识进一步加深认识,同时在软件编程、排版调试、焊接技术、相关仪器设备的使用技能等方面得到较全面的锻炼和提高,为今后能够独立进行某些单片机应用系统的开发设计工作打下一定的基础。

在本学期的开始我们进行了计算机工程实践,在实践中我们以微机原理与接口技术课程中所学知识为基础,设计了电子时钟系统。

本系统为多功能数字钟的系统。

本设计以单片机AT89c51为控制核心,选用DS1302串行时钟芯片,RT1602液晶显示器实现液晶显示当前时间、日期、星期。

本电子时钟具有日期、时、分、秒的显示、调整功能,采用的时间制式为24小时制,时间显示格式为时(十位、个位)、分(十位、个位)、秒(十位、个位)。

单片机数字钟工作原理

单片机数字钟工作原理

单片机数字钟工作原理
单片机数字钟是一种通过单片机控制数字时钟的设备。

单片机是一种高度集成的电子芯片,具有非常强大的计算和控制能力。

在数字钟中,单片机负责控制时间数码管的显示和计时功能。

具体来说,单片机数字钟的工作原理如下:
1. 时钟电路:单片机数字钟中使用的时钟电路通常是晶体振荡器。

晶体振荡器会产生非常稳定的频率,用于单片机的计时和控制。

2. 计时功能:单片机通过时钟电路来计时。

当单片机启动时,它会从时钟电路中读取当前的时间,然后根据程序中设定的规则不停地更新时间。

单片机数字钟通常会具有秒、分、时等多个计时功能,可以显示当前的精确时间。

3. 显示功能:单片机数字钟通过数码管来显示时间。

数码管是一种常见的显示器件,可以显示数字、字母等信息。

单片机通过控制数码管的亮灭来显示当前时间。

4. 控制功能:单片机数字钟还具有控制功能。

例如,可以通过按钮来调整时间、闹钟等功能。

单片机还可以控制数码管的亮度、闪烁等效果,以及声光报警等功能。

综上所述,单片机数字钟是一种功能强大、精确可靠的电子设备,广泛应用于家庭、办公室、实验室等场合。

- 1 -。

[单片机]c51数字时钟(带年月日显示)

[单片机]c51数字时钟(带年月日显示)

【单片机】c51数字时钟(带年月日显示)显示当前时间:9点58分34秒(第一个零表示闹钟未开启)当前日期:10年4月六日摘要:本设计以单片机为核心,LED数码管动态扫描显示。

采用矩阵式键盘输入能任意修改当前时间日期和设定闹钟时间。

具有显示年月日(区分闰年和二月),闹钟报警和整点报时功能说明系统的功能选择由7个按键完成。

其中P3.0,P3.1分别对应调整当前时间的时和分,P3.2为外部中断0,控制闹钟功能的开启/关闭(开启时数码管第一位显示字母’c’)P3.3用作外部中断1,当前时间的显示与闹铃时间显示切换,闹钟显示时按P3.0,P3.1可进行闹钟时分的设定,此时,led1灯灭。

闹铃时间到切闹钟开关开启时,闹铃响一分钟。

P3.5\P3.6\P3.7对年月日进行调整(第一次按P3.5,就进入了年月日的显示,现在就可对日期进行调整)。

按P3.1回到当前时间的显示状态。

整点到时:报警对应小时的次数。

程序如下:#include<reg51.h>#include<intrins.h>#include<stdio.h>#define uchar unsigned char#define uint unsigned intuchar data keyvalue; //查到的键值uchar data keys; //转换出的数字uchar dis[8];uchar codeseg[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x67,0x40,0x00,0x 39,0xf7};// 0 1 2 3 45 6 7 8 9 - 灭灯 c nsbit led_duan=P2^6; //段选通sbit led_wei=P2^7; //位选通sbit speaker=P2^3; //蜂鸣器sbit minitek=P3^0; //分校正按键sbit hourk=P3^1; //小时校正按键sbit p3_4=P3^4; //sbit yeark=P3^5; //年sbit monthk=P3^6; //月sbit dayk=P3^7; //日uchar data wei,i;bit leap_year; //闰年标志位bit dis_nyr;bit cal_year=1;bit calculate=1; //显示年月日与当前时间切换标志uchar data c_min; //闹钟‘分寄存单元uchar data c_hou; //闹钟、小时寄存单元uchar data second; //秒uchar data minite; //分变量uchar data hour; //小时变量uchar data year,month,day; //定义年月日变量uchar data CNTA;uchar data speaker_num; //蜂鸣次数bit beep; //整点报时标志bit run; //运行标志bit flash; //灭灯标志bit clarm_switch; //闹钟开关标志bit baoshi; //报时开关标志sbit led1=P1^6; // 按键标识指示灯sbit led2=P1^7; // 运行标志指示灯sbit P3_2=P3^2;sbit P3_3=P3^3;uint n,k;/*10微秒级延时*/void delay_10us(uchar n){ do{ _nop_();_nop_();_nop_();_nop_();_nop_();}while(--n);}/***毫秒级延时 ***/void delay_ms(uint n){ do delay_10us(131);while(--n);}/****** 当前时间转换******/clk_to_dis(){dis[0]=second%10;dis[1]=second/10;if(flash)dis[2]=10;else dis[2]=11;dis[3]=minite%10;dis[4]=minite/10;dis[5]=hour%10;dis[6]=hour/10;}/*****定时闹钟显示译码(用于七段码显示)*****/clarm_to_dis(){dis[0]=c_min%10;dis[1]=c_min/10;if(flash)dis[2]=10; //亮灯else dis[2]=11; //灭灯dis[3]=c_hou%10;dis[4]=c_hou/10;dis[5]=10;dis[6]=13;}/***********年月日显示译码************/nyr_to_dis(){dis[0]=day%10;dis[1]=day/10;dis[2]=10; //显示'-'dis[3]=month%10;dis[4]=month/10;dis[5]=10; // '-'dis[6]=year%10;dis[7]=year/10;}/*主函数*/void main(){P2=0xff;P1=0XFF;p3_4=0;run=1;led2=0; //运行指示灯亮led1=1;flash=0x00;dis[2]=10; //第三位显示“-”wei=0x7f; //选通低位i=0;second=21;minite=58;hour=9;CNTA=0x00;year=10;month=4;day=5;clk_to_dis();TMOD=0x11;TH0=15560/256;TL0=15560%256;TH1=0xfc;TL1=0x18;EA=1;PT0=1;EX0=1; //开中断;EX1=1;ET0=1;ET1=1;TR0=1;TR1=1;while(1){while(run==1){ clk_to_dis();if(calculate){if(month==1|month==3|month==5|month==7|month==8|month==10|mont h==12){day++;if(day>31){day=0x01;month++;if(month==13){month=1;year++;cal_year=1;}}led1=0; //指示灯亮}if(month==4|month==6|month==9|month==11){day++;if(day>30){day=0x01;month++;}led1=0; //指示灯亮}if(month==2) { if(leap_year==1){day++;if(day==30)day=1;}else {day++;if(day==29)day=1;}}while(cal_year){if((year+2000)%400==0) leap_year=1; // 被400整除为闰年else if((year+2000)%100==0) leap_year=0; // 不能被400整除能被100整除不是闰年elseif((year+2000)%4==0) leap_year=1; // 不能被400、100整除能被4整除是闰年else leap_year=0;cal_year=0;}calculate=0;led1=1;}while(!minitek){for(n=0;n<1000;n++);if(!minitek==0)break; //延时防抖minite++;second=0x00;led1=0;for(n=0;n<20;n++){speaker=!speaker;delay_10us(50); //蜂鸣器响}if(minite==60)minite=0x00;while(!minitek); //等待键松开led1=1; //显示灯}while(!hourk){for(n=0;n<1000;n++);if(!hourk==0)break;hour++;second=0x00;led1=0;for(n=0;n<30;n++){speaker=!speaker;delay_10us(30); //蜂鸣器响}if(hour==24) hour=0x00;while(!hourk);led1=1;}while(!yeark) //yeark键复用进入年月日调整{for(n=0;n<1000;n++);if(!yeark==0)break;dis_nyr=1;while(!yeark);while(dis_nyr){ nyr_to_dis();while(!yeark){for(n=0;n<1000;n++);if(!yeark==0)break;year++;led1=0;for(n=0;n<30;n++){speaker=!speaker;delay_10us(30); //蜂鸣器响}if((year+2000)%400==0) leap_year=1; // 被400整除为闰年else if((year+2000)%100==0) leap_year=0; // 不能被400整除能被100整除不是闰年elseif((year+2000)%4==0) leap_year=1; // 不能被400、100整除能被4整除是闰年else leap_year=0;while(!yeark);led1=1;}while(!monthk){for(n=0;n<1000;n++);if(!monthk==0)break;month++;if(month==13)month=1;led1=0;for(n=0;n<30;n++){speaker=!speaker;delay_10us(30); //蜂鸣器响}while(!monthk);led1=1;}while(!dayk){for(n=0;n<1000;n++);if(!dayk==0)break;if(month==1|month==3|month==5|month==7|month==8|month== 10|month==12){day++;if(day>31)day=0x01;led1=0; //指示灯亮}if(month==4|month==6|month==9|month==11){day++;if(day>30)day=0x01;led1=0; //指示灯亮}if(month==2) { if(leap_year==1){day++;if(day==30)day=1;}else {day++;if(day==29)day=1;}}led1=0;for(n=0;n<30;n++){speaker=!speaker;delay_10us(30); //蜂鸣器响}while(!dayk);led1=1;}while(!hourk){ for(n=0;n<1000;n++);if(hourk) break;dis_nyr=0;while(!hourk);if(clarm_switch)dis[7]=12; //开启显示 Celse dis[7]=11; //关闭不显示dis[6]=11;clk_to_dis();}}}if(clarm_switch) //闹铃时间到,指示灯闪烁蜂鸣器长响{if(c_min==minite&&c_hou==hour){speaker_num=60;beep=1;while(beep&& clarm_switch){led1=!led1;delay_ms(100);clk_to_dis();}led1=1;beep=0;}}}while(run==0) //闹钟时间设定{ clarm_to_dis();/////////////////////////////////////////////////////////// while(!minitek){for(n=0;n<1000;n++);if(!minitek==0)break; //延时防抖c_min++;led1=0;for(n=0;n<20;n++){speaker=!speaker;delay_10us(50); //蜂鸣器响}if(c_min==60)c_min=0x00;while(!minitek); //等待键松开led1=1; //显示灯}while(!hourk){for(n=0;n<1000;n++);if(!hourk==0)break;c_hou++;led1=0;for(n=0;n<30;n++)speaker=!speaker;delay_10us(30); //蜂鸣器响}if(c_hou==24) c_hou=0x00;while(!hourk);led1=1;}}}}/***************定时器T0中断*****************/timer0() interrupt 1 using 2 //定时器0中断号为1号使用第2组寄存器{TR1=0;TH0=15548/256;TL0=15548%256;CNTA++;if(beep){if(speaker_num%2)speaker=!speaker;if(!speaker_num) beep=0;}if(CNTA==20){ if(speaker_num)speaker_num--; //每秒整点报时次数减一flash=!flash;CNTA=0;second++; //秒加if(second==60){second=0;minite++;if(minite==60){minite=0;hour++;if(hour>7){speaker_num=2*hour; //整点到设定报时次数蜂鸣标志置1beep=1;}if(hour==24)hour=0; calculate=1; //0点到,日期标志加一}}}}TR1=1;}/*********定时器中断T1**********/timer1() interrupt 3 using 3{TH1=0xfc;TL1=0x18;P0=0xff;led_wei=1;led_wei=0;P0=seg[dis[i]];led_duan=1;led_duan=0;P0=wei;led_wei=1;led_wei=0;if(++i==8)i=0;wei=_cror_(wei,1);}/**********************外中断0*******************/int_0() interrupt 0{clarm_switch=!clarm_switch; // 闹钟开关if(clarm_switch)dis[7]=12; // 开启显示开启第一位显示C else dis[7]=11; // 关闭不显示for(k=0;k<40;k++){speaker=!speaker;led1=!led1;delay_ms(5);}led1=1;}/********************外中断1********************/int_1() interrupt 2 //闹钟时间设置/运行转换开关{run=!run;if(run)led2=0;else led2=1;for(k=0;k<90;k++){speaker=!speaker; // 蜂鸣器响led1=!led1; // 指示灯闪烁delay_10us(100);}led1=1;}。

单片机数字时钟

单片机数字时钟

引言数字电子时钟,自从它问世起,就是人们的好朋友,是人们日常生活中必不可少的电子产品,广泛用于生活的方方面面,给人们的学习、生活、工作带来了极大的方便。

但随着时间的推移,科学技术的不断发展,生活节奏越来越快,竞争日益激烈,人们对时间计量的精度要求越来越高,应用越来越广。

通常使用的晶振芯片设计的电子时钟,在生活中使用是一个很不错的选择,然而在工业现场,环境恶劣,势必会影响走时的进度,我们试想一下,大型的工业现场的走时如果因为环境的恶劣而不精确,导致的生产损失将有多大。

而利用开关量控制的PLC来设计的时钟是不会因为环境的因素而发生走时误差,从而,在工业现场最好使用PLC设计的时钟。

本文主要介绍在工业现场应用的时钟用PLC的设计。

通过PLC我们设计的这种走时精确的的时钟,终究会变成产品走进工业现场。

1 设计的目的及意义本设计通过用对一个能实现定时,时钟显示功能的时间系统的设计学习,让我们了解到了51单片机应用中的数据转换显示,数码管显示原理,静态扫描显示原理,单片机的定时中断原理等,从而达到学习、了解单片机相关指令在各方面的应用,让我们学到更多关于单片机方面的知识。

2 芯片简介2.1 STC80C52单片机芯片引脚功能介绍单片机的40个引脚大致可分为4类:电源、时钟、控制和I/O引脚。

⒈ 电源: ⑴ VCC - 芯片电源,接+5V;⑵ VSS - 接地端;⒉ 时钟:XTAL1、XTAL2 - 晶体振荡电路反相输入端和输出端。

⒊ 控制线:控制线共有4根,⑴ ALE/PROG:地址锁存允许/片内EPROM编程脉冲① ALE功能:用来锁存P0口送出的低8位地址② PROG功能:片内有EPROM 的芯片,在EPROM编程期间,此引脚输入编程脉冲。

⑵ PSEN:外ROM读选通信号。

⑶ RST/VPD:复位/备用电源。

① RST(Reset)功能:复位信号输入端。

② VPD 功能:在Vcc掉电情况下,接备用电源。

51单片机数字钟介绍

51单片机数字钟介绍

51单片机数字钟介绍随着计算机在社会领域的渗透和大规模集成电路的发展,单片机的应用正在不断走向深入,由于它具有功能强、体积小、功耗低、价格便宜、工作可靠、使用方便等特点,因此越来越广泛地应用于自动控制、智能化仪器、仪表、数据采集、军工产品以及家用电器等各个领域。

51单片机数字钟应用单片机中断、定时技术,通过调整键、加1键、减1键、确定键四个按键,用8位数码管设计制作了一个可以调整时间的数字钟,实现了对时、分、秒进行数字显示,可广泛用于个人家庭、车站、码头、办公室等公共场所,方便人们的日常生活。

一、系统方框图51单片机数字钟以STC89C52单片机为核心,采用12MHZ晶振,以汇编语言为程序设计语言,结合相关的元器件(共阳极四位一体LED数码显示器、BCD -七段译码/驱动器74HC537等),再配以相应的软件,用8位数码管显示“时、分、秒”。

显示格式为:时-分-秒XX-XX-XX ,由时个位和时十位、分个位和分十位、秒个位和秒十位计数器组成。

秒、分计数器为60进制计数器,时计数器为24进制计数器。

通过调整、加1、减1、确定4只按键来调整时间。

按下调整键SET_KEY(P1.0),显示“时”的两位数码管以1Hz的频率闪烁。

如果再次按下调整键,则“分”两位数码管开始闪烁,“时”两位数码管恢复正常显示,依次循环,直到按下确定键OK_KEY(P1.3),恢复正常的时间显示。

在数码管闪烁的时候,按下加1键ADD_KEY(P1.1)或者减1键DEC_KEY(P1.2 ),可以调整相应的显示内容。

按一次键,则选中的“时”“分”“秒”分别加1或减1,如果长按,系统识别后以一定速率连续增加或连续减少,进行快速调时。

二、动态扫描数码管显示采用动态扫描方法。

把8位数码管的8个笔画字段(a~g和dp)同名端连在一起由一片74HC573驱动;每一位数码管的公共极COM端(位)各自独立,连接在另外一片74HC573输出上接受P2口的控制。

基于单片机的数字钟资料

基于单片机的数字钟资料

单片机课程设计题目名称:基于单片机的数字钟的设计专业班级:学生姓名:学号:指导教师:单片机系统课程设计课程设计名称:基于单片机的数字钟的设计专业班级:学生姓名学号:指导教师:课程设计地点:课程设计时间:单片机系统课程设计任务书目录一、设计课题任务 (1)1.1设计题目 (1)1.2 功能要求说明 (1)1.3 总体方案介绍及工作原理 (1)二、硬件系统的设计 (2)2.1 系统各功能模块介绍 (2)2.1.1 AT89C52控制模块 (2)2.1.2复位信号及其产生 (3)2.1.3时钟电路 (3)2.1.4MAX232 (4)2.1.5时钟电路DS1302 (5)2.1.6键盘功能模块 (7)2.1.7数码管显示模块 (7)2.1.5 二极管显示模块 (7)2.2 系统电路图 (8)2.3 系统的元器件清单 (8)三、软件系统的设计 (8)3.1使用单片机资源介绍 (8)3.2 软件系统各功能模块介绍 (9)3.2.1 独立式键盘模块 (9)3.2.2 数码管显示模块 (9)3.2.3 整点提示,半整点提示 (9)3.3 软件系统程序流程框图 (10)四、软件系统的程序 (11)六、参考文献 (21)附录: (1)基于单片机的数字钟的设计摘要:AT89C52单片机是一款应用广泛、功能强大的八位单片机。

本设计是由单片机AT89C52作为核心,通过单片机使电子钟具有调节显示时分秒的功能,电子钟是一种利用数字电路来显示秒、分、时的计时装置,与传统的机械钟相比,它具有走时准确、显示电子钟直观、无机械传动装置等优点。

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

K1用来切换时间日期;K3用来循环调节时间的小时;K5用来循环调节时间的分钟;K2调节年、增大;K4调节年、减小;K6用来循环调节月;K8用来循环调节日期,以便对时钟进行校对。

关键词:电子钟单片机时间日期可调一、设计课题任务1.1设计题目设计一个可调的电子钟。

单片机数字时钟(汇编语言)

单片机数字时钟(汇编语言)

单片机课程设计目录前言 (3)一、系统方案选择与论证 (4)1.1数字电子钟设计的要求及技术指标 (4)1.2设计方案论证 (5)1.3元器件清单 (5)1.4电路说明 (6)二、安装与调试 (9)2.1准备元件和工具 (9)2.2 安装元件 (9)2.3测试与调试 (10)三、主程序设计 (14)3.1主程序设计 (14)四、总结 (21)前言20世纪末,电子技术获得了飞速的发展,在其推动下,现代电子产品几乎渗透了社会的各个领域,有力地推动了社会生产力的发展和社会信息化程度的提高,同时也使现代电子产品性能进一步提高,产品更新换代的节奏也越来越快。

时间对人们来说总是那么宝贵,工作的忙碌性和繁杂性容易使人忘记当前的时间。

忘记了要做的事情,当事情不是很重要的时候,这种遗忘无伤大雅。

但是,一旦重要事情,一时的耽误可能酿成大祸。

例如,许多火灾都是由于人们一时忘记了关闭煤气或是忘记充电时间。

尤其在医院,每次护士都会给病人作皮试,测试病人是否对药物过敏。

注射后,一般等待5分钟,一旦超时,所作的皮试试验就会无效。

手表当然是一个好的选择,但是,随着接受皮试的人数增加,到底是哪个人的皮试到时间却难以判断。

所以,要制作一个定时系统。

随时提醒这些容易忘记时间的人。

钟表的数字化给人们生产生活带来了极大的方便,而且大大地扩展了钟表原先的报时功能。

诸如定时自动报警、按时自动打铃、时间程序自动控制、定时广播、定时启闭电路、定时开关烘箱、通断动力设备,甚至各种定时电气的自动启用等,所有这些,都是以钟表数字化为基础的。

因此,研究数字钟及扩大其应用,有着非常现实的意义。

数字集成电路的出现和飞速发展,以及石英晶体振荡器的广泛应用,使得数字钟的精度稳定度远远超过了老式的机械表,用数字电路实现对“时”、“分”、“秒”数字显示的数字钟在数字显示方面,目前已有集成的计数、译码电路,它可以直接驱动数码显示器件,也可以直接采用才COMS--LED光电组合器件,构成模块式石英晶体数字钟。

单片机数字时钟实验报告

单片机数字时钟实验报告

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

单片机原理及应用——电子时钟

单片机原理及应用——电子时钟

单片机原理及应用——电子时钟电子时钟是一种利用单片机技术实现的数字时钟,具备精确计时功能,并能显示当前时间的设备。

本文将详细介绍单片机原理及其在电子时钟中的应用。

一、单片机原理单片机(Microcontroller Unit,简称MCU)是一种集成了处理器核心、存储器、输入输出设备和定时器等功能的微型计算机系统。

它具备高度集成度、低功耗、体积小等特点,广泛应用于各种电子设备中。

单片机由中央处理器(CPU)、存储器、输入输出接口和定时器组成。

中央处理器是单片机的核心部件,负责执行各种指令和控制任务。

存储器用于存储程序和数据,包括ROM(只读存储器)和RAM(随机存储器)。

输入输出接口用于与外部设备进行数据交互,如键盘、显示器等。

定时器用于实现精确的时间控制和计时功能。

二、电子时钟的实现电子时钟利用单片机的计时功能和显示功能,实现了时间的精确计算和显示。

下面是一个简单的电子时钟实现的流程:1. 初始化:单片机启动后,需要进行一系列的初始化操作,包括设置计时器的计时方式、设置显示器的显示方式等。

2. 时间计算:通过单片机的定时器,可以实现对时间的精确计算。

定时器可以设定一个计时周期,每个周期结束后,单片机会触发一个中断,通过中断服务程序可以更新时间。

3. 时间显示:通过数码管等显示设备,将计算得到的时间显示出来。

单片机通过控制显示设备的亮灭来显示不同的数字。

4. 按键设置:电子时钟通常具备按键设置功能,可以通过按键来设置时间、闹钟等参数。

单片机通过读取按键状态,实现对时间的设置和调整。

5. 闹钟功能:电子时钟通常还具备闹钟功能,可以在设定的时间点触发蜂鸣器等报警设备。

单片机通过比较当前时间和设定的闹钟时间,实现闹钟功能。

6. 电源管理:为了确保电子时钟的正常运行,单片机需要对电源进行管理,包括低电压检测、电池切换等功能。

三、电子时钟的应用电子时钟广泛应用于各种场景,如家庭、办公室、学校等。

以下是几个常见的应用场景:1. 家庭用电子时钟:家庭用电子时钟通常具备显示时间、日期、温度等功能,可以放置在客厅、卧室等地方,方便人们随时了解时间。

基于8051单片机的数字钟[附图+源码+中英文文献]

基于8051单片机的数字钟[附图+源码+中英文文献]
摘要
用单片机做一个数字钟是单片机应用中的一个典型例子.本设计充分利用8051单片机的4个I/O口,外加两片74LS07作数码管驱动电路,12位数码管的片选信号由74LS138译码器提供,采用动态显示。为增加驱动能力,又在数码管的阴极端加9013驱动管。
我们设计出的电子钟采用24小时制计时,其中添加了整点报时,半点报时和闹铃提示功能。另外为了需要,我们还添加了秒表功能。
/PSEN:外部程序存储器的选通信号。在由外部程序存储器取指期间,每个机器周期两次/PSEN有效。但在访问外部数据存储器时,这两次有效的/PSEN信号将不出现。
/EA/VPP:当/EA保持低电平时,则在此期间外部程序存储器(0000H-FFFFH),不管是否有内部程序存储器。注意加密方式1时,/EA将内部锁定为RESET;当/EA端保持高电平时,此间内部程序存储器。在FLASH编程期间,此引脚也用于施加12V编程电源(VPP)。
ALE/PROG:当访问外部存储器时,地址锁存允许的输出电平用于锁存地址的地位字节。在FLASH编程期间,此引脚用于输入编程脉冲。在平时,ALE端以不变的频率周期输出正脉冲信号,此频率为振荡器频率的1/6。因此它可用作对外部输出的脉冲或用于定时目的。然而要注意的是:每当用作外部数据存储器时,将跳过一个ALE脉冲。如想禁止ALE的输出可在SFR8EH地址上置0。此时, ALE只有在执行MOVX,MOVC指令是ALE才起作用。另外,该引脚被略微拉高。如果微处理器在外部执行状态ALE禁止,置位无效。
⑵ 对于74LS系列,CD4000系列以及一些大规模集成电路芯片(如8155,8253,8259等),都可以和MCS-51系列单片机直接接口。具体使用时,可以查阅有关器件手册或参考典型电路
⑶ 对一些线性组件,特别是应用键盘、码盘、LED显示器等输入/输出设备时,应当尽量增加驱动部分的容量,否则,单片机将提供不出足够的驱动电流供给负载使用

【单片机】c51数字时钟(带年月日显示)

【单片机】c51数字时钟(带年月日显示)

【单片机】c51数字时钟(带年月日显示)显示当前时间:9点58分34秒(第一个零表示闹钟未开启)当前日期:10年4月六日摘要:本设计以单片机为核心,LED数码管动态扫描显示。

采用矩阵式键盘输入能任意修改当前时间日期和设定闹钟时间。

具有显示年月日(区分闰年和二月),闹钟报警和整点报时功能说明系统的功能选择由7个按键完成。

其中P3.0,P3.1分别对应调整当前时间的时和分,P3.2为外部中断0,控制闹钟功能的开启/关闭(开启时数码管第一位显示字母’c’)P3.3用作外部中断1,当前时间的显示与闹铃时间显示切换,闹钟显示时按P3.0,P3.1可进行闹钟时分的设定,此时,led1灯灭。

闹铃时间到切闹钟开关开启时,闹铃响一分钟。

P3.5\P3.6\P3.7对年月日进行调整(第一次按P3.5,就进入了年月日的显示,现在就可对日期进行调整)。

按P3.1回到当前时间的显示状态。

整点到时:报警对应小时的次数。

程序如下:#include<reg51.h>#include<intrins.h>#include<stdio.h>#define uchar unsigned char#define uint unsigned intuchar data keyvalue; //查到的键值uchar data keys; //转换出的数字uchar dis[8];uchar codeseg[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x67,0x40,0x00,0x 39,0xf7};// 0 1 2 3 45 6 7 8 9 - 灭灯 c nsbit led_duan=P2^6; //段选通sbit led_wei=P2^7; //位选通sbit speaker=P2^3; //蜂鸣器sbit minitek=P3^0; //分校正按键sbit hourk=P3^1; //小时校正按键sbit p3_4=P3^4; //sbit yeark=P3^5; //年sbit monthk=P3^6; //月sbit dayk=P3^7; //日uchar data wei,i;bit leap_year; //闰年标志位bit dis_nyr;bit cal_year=1;bit calculate=1; //显示年月日与当前时间切换标志uchar data c_min; //闹钟‘分寄存单元uchar data c_hou; //闹钟、小时寄存单元uchar data second; //秒uchar data minite; //分变量uchar data hour; //小时变量uchar data year,month,day; //定义年月日变量uchar data CNTA;uchar data speaker_num; //蜂鸣次数bit beep; //整点报时标志bit run; //运行标志bit flash; //灭灯标志bit clarm_switch; //闹钟开关标志bit baoshi; //报时开关标志sbit led1=P1^6; // 按键标识指示灯sbit led2=P1^7; // 运行标志指示灯sbit P3_2=P3^2;sbit P3_3=P3^3;uint n,k;/*10微秒级延时*/void delay_10us(uchar n){ do{ _nop_();_nop_();_nop_();_nop_();_nop_();}while(--n);}/***毫秒级延时 ***/void delay_ms(uint n){ do delay_10us(131);while(--n);}/****** 当前时间转换******/clk_to_dis(){dis[0]=second%10;dis[1]=second/10;if(flash)dis[2]=10;else dis[2]=11;dis[3]=minite%10;dis[4]=minite/10;dis[5]=hour%10;dis[6]=hour/10;}/*****定时闹钟显示译码(用于七段码显示)*****/clarm_to_dis(){dis[0]=c_min%10;dis[1]=c_min/10;if(flash)dis[2]=10; //亮灯else dis[2]=11; //灭灯dis[3]=c_hou%10;dis[4]=c_hou/10;dis[5]=10;dis[6]=13;}/***********年月日显示译码************/nyr_to_dis(){dis[0]=day%10;dis[1]=day/10;dis[2]=10; //显示'-'dis[3]=month%10;dis[4]=month/10;dis[5]=10; // '-'dis[6]=year%10;dis[7]=year/10;}/*主函数*/void main(){P2=0xff;P1=0XFF;p3_4=0;run=1;led2=0; //运行指示灯亮led1=1;flash=0x00;dis[2]=10; //第三位显示“-”wei=0x7f; //选通低位i=0;second=21;minite=58;hour=9;CNTA=0x00;year=10;month=4;day=5;clk_to_dis();TMOD=0x11;TH0=15560/256;TL0=15560%256;TH1=0xfc;TL1=0x18;EA=1;PT0=1;EX0=1; //开中断;EX1=1;ET0=1;ET1=1;TR0=1;TR1=1;while(1){while(run==1){ clk_to_dis();if(calculate){if(month==1|month==3|month==5|month==7|month==8|month==10|mont h==12){day++;if(day>31){day=0x01;month++;if(month==13){month=1;year++;cal_year=1;}}led1=0; //指示灯亮}if(month==4|month==6|month==9|month==11){day++;if(day>30){day=0x01;month++;}led1=0; //指示灯亮}if(month==2) { if(leap_year==1){day++;if(day==30)day=1;}else {day++;if(day==29)day=1;}}while(cal_year){if((year+2000)%400==0) leap_year=1; // 被400整除为闰年else if((year+2000)%100==0) leap_year=0; // 不能被400整除能被100整除不是闰年elseif((year+2000)%4==0) leap_year=1; // 不能被400、100整除能被4整除是闰年else leap_year=0;cal_year=0;}calculate=0;led1=1;}while(!minitek){for(n=0;n<1000;n++);if(!minitek==0)break; //延时防抖minite++;second=0x00;led1=0;for(n=0;n<20;n++){speaker=!speaker;delay_10us(50); //蜂鸣器响}if(minite==60)minite=0x00;while(!minitek); //等待键松开led1=1; //显示灯}while(!hourk){for(n=0;n<1000;n++);if(!hourk==0)break;hour++;second=0x00;led1=0;for(n=0;n<30;n++){speaker=!speaker;delay_10us(30); //蜂鸣器响}if(hour==24) hour=0x00;while(!hourk);led1=1;}while(!yeark) //yeark键复用进入年月日调整{for(n=0;n<1000;n++);if(!yeark==0)break;dis_nyr=1;while(!yeark);while(dis_nyr){ nyr_to_dis();while(!yeark){for(n=0;n<1000;n++);if(!yeark==0)break;year++;led1=0;for(n=0;n<30;n++){speaker=!speaker;delay_10us(30); //蜂鸣器响}if((year+2000)%400==0) leap_year=1; // 被400整除为闰年else if((year+2000)%100==0) leap_year=0; // 不能被400整除能被100整除不是闰年elseif((year+2000)%4==0) leap_year=1; // 不能被400、100整除能被4整除是闰年else leap_year=0;while(!yeark);led1=1;}while(!monthk){for(n=0;n<1000;n++);if(!monthk==0)break;month++;if(month==13)month=1;led1=0;for(n=0;n<30;n++){speaker=!speaker;delay_10us(30); //蜂鸣器响}while(!monthk);led1=1;}while(!dayk){for(n=0;n<1000;n++);if(!dayk==0)break;if(month==1|month==3|month==5|month==7|month==8|month== 10|month==12){day++;if(day>31)day=0x01;led1=0; //指示灯亮}if(month==4|month==6|month==9|month==11){day++;if(day>30)day=0x01;led1=0; //指示灯亮}if(month==2) { if(leap_year==1){day++;if(day==30)day=1;}else {day++;if(day==29)day=1;}}led1=0;for(n=0;n<30;n++){speaker=!speaker;delay_10us(30); //蜂鸣器响}while(!dayk);led1=1;}while(!hourk){ for(n=0;n<1000;n++);if(hourk) break;dis_nyr=0;while(!hourk);if(clarm_switch)dis[7]=12; //开启显示 Celse dis[7]=11; //关闭不显示dis[6]=11;clk_to_dis();}}}if(clarm_switch) //闹铃时间到,指示灯闪烁蜂鸣器长响{if(c_min==minite&&c_hou==hour){speaker_num=60;beep=1;while(beep&& clarm_switch){led1=!led1;delay_ms(100);clk_to_dis();}led1=1;beep=0;}}}while(run==0) //闹钟时间设定{ clarm_to_dis();/////////////////////////////////////////////////////////// while(!minitek){for(n=0;n<1000;n++);if(!minitek==0)break; //延时防抖c_min++;led1=0;for(n=0;n<20;n++){speaker=!speaker;delay_10us(50); //蜂鸣器响}if(c_min==60)c_min=0x00;while(!minitek); //等待键松开led1=1; //显示灯}while(!hourk){for(n=0;n<1000;n++);if(!hourk==0)break;c_hou++;led1=0;for(n=0;n<30;n++)speaker=!speaker;delay_10us(30); //蜂鸣器响}if(c_hou==24) c_hou=0x00;while(!hourk);led1=1;}}}}/***************定时器T0中断*****************/timer0() interrupt 1 using 2 //定时器0中断号为1号使用第2组寄存器{TR1=0;TH0=15548/256;TL0=15548%256;CNTA++;if(beep){if(speaker_num%2)speaker=!speaker;if(!speaker_num) beep=0;}if(CNTA==20){ if(speaker_num)speaker_num--; //每秒整点报时次数减一flash=!flash;CNTA=0;second++; //秒加if(second==60){second=0;minite++;if(minite==60){minite=0;hour++;if(hour>7){speaker_num=2*hour; //整点到设定报时次数蜂鸣标志置1beep=1;}if(hour==24)hour=0; calculate=1; //0点到,日期标志加一}}}}TR1=1;}/*********定时器中断T1**********/timer1() interrupt 3 using 3{TH1=0xfc;TL1=0x18;P0=0xff;led_wei=1;led_wei=0;P0=seg[dis[i]];led_duan=1;led_duan=0;P0=wei;led_wei=1;led_wei=0;if(++i==8)i=0;wei=_cror_(wei,1);}/**********************外中断0*******************/int_0() interrupt 0{clarm_switch=!clarm_switch; // 闹钟开关if(clarm_switch)dis[7]=12; // 开启显示开启第一位显示C else dis[7]=11; // 关闭不显示for(k=0;k<40;k++){speaker=!speaker;led1=!led1;delay_ms(5);}led1=1;}/********************外中断1********************/int_1() interrupt 2 //闹钟时间设置/运行转换开关{run=!run;if(run)led2=0;else led2=1;for(k=0;k<90;k++){speaker=!speaker; // 蜂鸣器响led1=!led1; // 指示灯闪烁delay_10us(100);}led1=1;}。

单片机汇编数字时钟

单片机汇编数字时钟

1.前言1.1设计意义近年来随着计算机在社会领域的渗透和大规模集成电路的发展,单片机的应用正在不断地走向深入,由于它具有功能强,体积小,功耗低,价格便宜,工作可靠,使用方便等特点,因此特别适合于与控制有关的系统,越来越广泛地应用于自动控制,智能化仪器,仪表,数据采集,军工产品以及家用电器等各个领域,单片机往往是作为一个核心部件来使用,在根据具体硬件结构,以及针对具体应用对象特点的软件结合,以作完善。

本系统是基于AT89C51单片机设计的一个具有六位LED 显示的数字时实时钟,该系统同时具有硬件设计简单、工作稳定性高、价格低廉等优点。

此次设计电子数字钟是为了了解电子数字钟的原理,从而学会制作电子数字钟。

而且通过电子数字钟的制作进一步的了解各种在制作中用到的中小规模集成电路的作用及实用方法。

通过它可以进一步学习与掌握单片机原理与使用方法。

1.2系统功能数字钟是一个将时分秒在数码管上显示的计时装置,计时方式为24h ,另外还有启动、暂停功能。

1.3使用方法程序运行后始终显示初始值00:00:00。

当按下开始键后开始计时,再按下暂停键后时钟暂停工作,数码管显示暂停时刻的计数数值。

2.硬件电路设计及描述2.1总体设计此次实习的的电子钟由单片机AT89C51、74LS373、8D 锁存器、8255芯片、7407缓冲器、73LS138译码器、数码管组成。

运用汇编语言来控制单片机AT89C51来实现动态数码管显示。

(见下图2-1)图2-1 电路总体设计2.2 硬件电路运行原理单片机烧入HEX 文件后开始工作,通过单片机P0口与8255数据总线相连与8255传送数据,设定8255PB 口送段选码,PC 口送位选码,PC 口接3-8译码器,不停的扫描8单片机 AT89C51 74LS373 锁存地址8255A PB 口 接口控制 PC 口7407段选 74LS138位选七段 数码 管个数码管实现数码管动态扫描功能,P1.0、P1.1接2个独立键盘实现P1.0启动时钟P1.1暂停时钟的功能。

基于单片机的数字钟设计摘要汇总

基于单片机的数字钟设计摘要汇总

基于单片机的数字钟的设计与实现摘要近年来随着计算机在社会领域的渗透和大规模集成电路的发展,单片机的应用正在不断地走向深入,因此特别适合于与控制有关的系统,越来越广泛地应用于自动控制,智能化仪器,仪表,数据采集,军工产品以及家用电器等各个领域,单片机往往是作为一个核心部件来使用,在根据具体硬件结构,以及针对具体应用对象特点的软件结合,以作完善。

本次做的数字钟是以单片机(ATMEGA16)为核心,由于它具有功能强,体积小,功耗低,价格便宜,工作可靠,使用方便等。

数字时钟采用了性能优秀的ATMEGA16,结合了共阴极LED、数码显示器、BCD-锁存/7段译码/驱动器,这些元件来控制时钟的显示、调整和校对。

通过multisim软件进行仿真制作,达到制作简易数字钟的目的。

数字时钟能够准确显示时间(显示格式为时时:分分,24小时制),而且可以显示年、月、日、时、分、秒、周。

其硬件部分难点在于元器件的选择、布局及焊接。

关键词:ATMEGA16;数码管显示;键盘输入;USB接口电源BASED ON SINGLE-CHIP DIGITAL CLOCK DESIGN ANDIMPLEMENTATIONABSTRACTIn recent years, with the field of computer penetration in the community and the development of large-scale integrated circuits, microcontroller applications are continually deepening.It is particularly suited to control systems and, more widely used in automatic control, intelligent of instruments, meters, data acquisition, military products, as well as household appliances and other fields. single-chip microcomputer often use as a core component,in accordance with the specific hardware architecture, as well as application-specific features of the software object to be perfect.This article is based on single-chip digital clock (ATMEGA16) as the core, because it has a strong functions, small size, low power consumption, cheap, reliable and easy to use and so on. Digital Clock using the excellent performance of ATMEGA16, combined with a total of cathode LED, digital displays, BCD-latch / 7 decoder / driver, these components to control the clock display, adjustment and proofing. Through the production of multisim simulation software to create simple digital clock purposes. Able to accurately show the number of clock time (display format hh: mm: seconds seconds, 24-hour system), and can display year, month, day, hour, minute, second, week. Difficult part of the hardware is the choice of components, layout and welding.Key words: ATMEGA16; digital tube display; keyboard input; USB port power supply目录1 前言 (1)2 系统设计 (2)2.1 电路组成及工作原理 (2)2.2 硬件部分 (2)2.2.1 单片机系统 (2)2.2.2 A TMEGA16的主要性能参数: (3)2.3 显示部分 (3)2.3.1 LED显示结构与原理 (3)2.3.2 LED显示器接口及显示方式 (4)2.4 键盘工作模块 (5)2.4.1 独立式按键结构 (6)2.4.2 独立式按键的软件结构 (6)2.5 USB接口电源 (6)2.6 74HC595驱动模块 (7)2.7 DS1302时钟实现模块 (7)2.7.1 DS1302简介 (7)2.7.2 DS1302与CPU的连接 (8)3 硬件实现及单元电路设计 (9)3.1主板电路的设计 (9)3.2外部电路的设计 (11)4 软件设计 (13)4.1 软件设计思路 (13)4.2 程序文件 (13)5 系统调试 (27)5.1 硬件调试 (27)5.2 软件调试 (27)6 结论 (28)参考文献 (29)致谢 (30)1 前言单片机自20世纪70年代问世以来,以其极高的性能价格比,受到人们的重视和关注,应用很广、发展很快。

(完整word版)单片机数字时钟

(完整word版)单片机数字时钟

基于单片机的数字时钟设计第一章前言 (1)第二章方案论证与比较 (2)2.1数字时钟方案 (2)2.2数码管显示方案 (2)第三章系统设计 (3)3.1总体设计 (3)3.1.1系统说明 (3)3.1.2系统框图 (3)3.2模块设计 (4)3.2.1电源部分 (4)3.2.2复位电路 (4)3.2.3程序下载接口 (5)3.2.4位选部分 (5)3.2.5数码管的连接电路 (6)3.2.6控制部分 (6)第四章原理图与PCB图 (8)第五章软件设计 (9)5.1程序流程图 (9)5.2源程序 (11)第六章总结 (18)6.1物品清单与元件特性 (18)6.2设计总结 (19)参考文献(References): (19)第一章前言时钟,自从它发明的那天起,就成为人类的朋友,但随着时间的推移,科学技术的不断发展,人们对时间计量的精度要求越来越高,应用越来越广。

怎样让时钟更好的为人民服务,怎样让我们的老朋友焕发青春呢?这就要求人们不断设计出新型时钟。

现今,高精度的计时工具大多数都使用了石英晶体振荡器,由于电子钟,石英表,石英钟都采用了石英技术,因此走时精度高,稳定性好,使用方便,不需要经常调校,数字式电子钟用集成电路计时时,译码代替机械式传动,用LED显示器代替显示器代替指针显示进而显示时间,减小了计时误差,这种表具有时,分,秒显示时间的功能,还可以进行时和分的校对,片选的灵活性好。

时钟电路在计算机系统中起着非常重要的作用,是保证系统正常工作的基础。

在一个单片机应用系统中,时钟有两方面的含义:一是指为保障系统正常工作的基准振荡定时信号,主要由晶振和外围电路组成,晶振频率的大小决定了单片机系统工作的快慢;二是指系统的标准定时时钟,即定时时间,它通常有两种实现方法:一是用软件实现,即用单片机内部的可编程定时/计数器来实现,但误差很大,主要用在对时间精度要求不高的场合;二是用专门的时钟芯片实现,在对时间精度要求很高的情况下,通常采用这种方法,典型的时钟芯片有:DS1302,DS12887,X1203等都可以满足高精度的要求。

【单片机】c51数字时钟(带年月日显示)

【单片机】c51数字时钟(带年月日显示)

【单片机】c51数字时钟(带年月日显示)集团文件发布号:(9816-UATWW-MWUB-WUNN-INNUL-DQQTY-【单片机】c51数字时钟(带年月日显示)显示当前时间:9点58分34秒(第一个零表示闹钟未开启)当前日期:10年4月六日摘要:本设计以单片机为核心,LED数码管动态扫描显示。

采用矩阵式键盘输入能任意修改当前时间日期和设定闹钟时间。

具有显示年月日(区分闰年和二月),闹钟报警和整点报时功能说明系统的功能选择由7个按键完成。

其中,分别对应调整当前时间的时和分,为外部中断0,控制闹钟功能的开启/关闭(开启时数码管第一位显示字母’c’)用作外部中断1,当前时间的显示与闹铃时间显示切换,闹钟显示时按,可进行闹钟时分的设定,此时,led1灯灭。

闹铃时间到切闹钟开关开启时,闹铃响一分钟。

\\对年月日进行调整(第一次按,就进入了年月日的显示,现在就可对日期进行调整)。

按回到当前时间的显示状态。

整点到时:报警对应小时的次数。

程序如下:#include<>#include<>#include<>#define uchar unsigned char#define uint unsigned intuchar data keyvalue; //查到的键值uchar data keys; //转换出的数字uchar dis[8];uchar codeseg[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x67,0x40,0x00,0x39,0xf7}; // 0 1 2 3 4 5 6 7 8 9 - 灭灯 cnsbit led_duan=P2^6;//段选通sbit led_wei=P2^7;//位选通sbit speaker=P2^3;//蜂鸣器sbit minitek=P3^0;//分校正按键sbit hourk=P3^1;//小时校正按键sbit p3_4=P3^4;//sbit yeark=P3^5;//年sbit monthk=P3^6;//月sbit dayk=P3^7;//日uchar data wei,i;bit leap_year;//闰年标志位bit dis_nyr;bit cal_year=1;bit calculate=1;//显示年月日与当前时间切换标志uchar data c_min;//闹钟‘分寄存单元uchar data c_hou;//闹钟、小时寄存单元uchar data second;//秒uchar data minite;//分变量uchar data hour;//小时变量uchar data year,month,day;//定义年月日变量uchar data CNTA;uchar data speaker_num; //蜂鸣次数bit beep; //整点报时标志bit run; //运行标志bit flash; //灭灯标志bit clarm_switch; //闹钟开关标志bit baoshi; //报时开关标志sbit led1=P1^6; // 按键标识指示灯sbit led2=P1^7; // 运行标志指示灯sbit P3_2=P3^2;sbit P3_3=P3^3;uint n,k;/*10微秒级延时*/void delay_10us(uchar n)?{ do{ _nop_();_nop_();_nop_();_nop_();_nop_();}while(--n);}/***毫秒级延时 ***/void delay_ms(uint n)?{ do delay_10us(131);while(--n);}/****** 当前时间转换******/clk_to_dis(){dis[0]=second%10;dis[1]=second/10;if(flash)dis[2]=10;else dis[2]=11;dis[3]=minite%10;dis[4]=minite/10;dis[5]=hour%10;dis[6]=hour/10;}/*****定时闹钟显示译码(用于七段码显示)*****/ clarm_to_dis(){dis[0]=c_min%10;dis[1]=c_min/10;if(flash)dis[2]=10;//亮灯else dis[2]=11; //灭灯dis[3]=c_hou%10;dis[4]=c_hou/10;dis[5]=10;dis[6]=13;}/***********年月日显示译码************/ nyr_to_dis(){dis[0]=day%10;dis[1]=day/10;dis[2]=10;//显示'-'dis[3]=month%10;dis[4]=month/10;dis[5]=10; // '-'dis[6]=year%10;dis[7]=year/10;}/*主函数*/void main(){P2=0xff;P1=0XFF;p3_4=0;run=1;led2=0;//运行指示灯亮led1=1;flash=0x00;dis[2]=10; //第三位显示“-”wei=0x7f;//选通低位 i=0;?second=21;minite=58;hour=9;CNTA=0x00;year=10;month=4;day=5;clk_to_dis(); TMOD=0x11;TH0=15560/256;TL0=15560%256;TH1=0xfc;TL1=0x18;EA=1;PT0=1;EX0=1; //开中断;EX1=1;?ET0=1;ET1=1;TR0=1;TR1=1;while(1){while(run==1){clk_to_dis();if(calculate){if(month==1|month==3|month==5|month==7|month==8|month==10|month==12){day++;?if(day>31){day=0x01;month++; if(month==13){month=1;year++;cal_year=1;}}led1=0; //指示灯亮}if(month==4|month==6|month==9|month==11){day++;if(day>30){day=0x01;month++;}led1=0; //指示灯亮}if(month==2) {if(leap_year==1){day++;if(day==30)day=1;}else {day++;if(day==29)day=1;}}while(cal_year){if((year+2000)%400==0) leap_year=1; // 被400整除为闰年else if((year+2000)%100==0) leap_year=0; //不能被400整除能被100整除不是闰年 else if((year+2000)%4==0) leap_year=1; //不能被400、100整除能被4整除是闰年 else leap_year=0;cal_year=0;}calculate=0;led1=1;}while(!minitek){for(n=0;n<1000;n++);if(!minitek==0)break; //延时防抖minite++;second=0x00;led1=0;for(n=0;n<20;n++){speaker=!speaker;delay_10us(50); //蜂鸣器响 }if(minite==60)minite=0x00; while(!minitek); //等待键松开led1=1;//显示灯}while(!hourk){for(n=0;n<1000;n++);if(!hourk==0)break;hour++;second=0x00;led1=0;。

单片机应用技术 时钟数值

单片机应用技术 时钟数值

单片机应用技术时钟数值
单片机应用技术中的时钟数值指的是单片机内部的时钟频率或周期。

时钟频率是指单片机每秒钟内所执行的时钟周期数量,单位为赫兹(Hz)。

时钟周期是指单片机完成一个时钟信号周期所需的时间,单位为秒。

时钟数值一般用来表示单片机的工作速度和性能。

在单片机应用中,时钟数值的选择对于系统的稳定性和性能至关重要。

较高的时钟频率可以提高单片机的运行速度,但也可能增加功耗和散热压力。

较低的时钟频率可以降低功耗和散热,但会导致系统运行速度变慢。

单片机的时钟数值通常在设计阶段进行选择,根据具体应用的需求和性能要求来确定。

常见的时钟数值有8MHz、16MHz等,在一些高性能应用中甚至可以达到几十甚至上百MHz。

需要注意的是,单片机的时钟数值不仅影响系统的运行速度和性能,还会对其他模块的正常工作产生影响。

比如,定时器、串口通信等模块的工作频率和波特率都与时钟数值相关。

因此,在单片机应用中,选择合适的时钟数值对于系统的正常运行和性能优化非常重要。

在实际应用中,需要综合考虑功耗、散热、电源噪声等因素,并根据具体需求进行合理的选择。

单片机数字时钟资料

单片机数字时钟资料

单片机数字时钟一、总体概述竞赛赛题及要求单片机音乐演奏基本要求:1、利用单片机演奏一和谐的音乐,音乐时长不少于两分钟;2、能够随时实现中断;3、能够手动调节音乐重复次数。

发挥部分:1、音乐演奏时同时有彩灯闪烁伴奏。

2、用按键实现多首音乐间的选择,且任何时间都能选择本时钟程序采用了C语言与汇编语言相结合的方案,使用C主要是考虑到本人学习单片机的时间很短,而此次竞赛又迫在眉睫,对于开发时间如此紧的竞赛,C语言有着汇编无可比拟的优势。

C语言是一种编译型程序设计语言,它兼顾了多种高级语言的特点,并具备汇编语言的功能。

C语言有功能丰富的库函数、运算速度快、编译效率高、有良好的可移植性,而且可以直接实现对系统硬件的控制。

C语言是一种结构化程序设计语言,它支持当前程序设计中广泛采用的由顶向下结构化程序设计技术。

此外,C语言程序具有完善的模块程序结构,从而为软件开发中采用模块化程序设计方法提供了有力的保障。

因此,使用C语言进行程序设计已成为软件开发的一个主流。

用C语言来编写目标系统软件,会大大缩短开发周期,且明显地增加软件的可读性,便于改进和扩充,从而研制出规模更大、性能更完备的系统。

三、方案选择与论证根据题目要求,电路总共可分为以下几个基本模块,对于各个模块的实现,有以下一些设计方案,均进行了可行性分析,最终选择了最实际可行的方案。

软件部分:1、计时控制方案方案一:使用专用时钟芯片。

使用微控制器控制专用时钟芯片实现计时控制,这种方案有着计时精度高、控制简单的优点,而且更易于实现日期/时间显示、定时烹调等计时扩展功能。

方案二:采用MCU内部定时器。

AT89S52内部含有2个定时器,可以利用一个定时器与程序计数器相结合的方式,在系统晶振的驱动下,产生标准时钟频率。

由于方案二具有较好的灵活性、较少的电路器件和较高的性价比,而且通过精确的软件补偿使精度完全可以满足控制需要,所以我们选择该方案完成设计。

2、主控制器模块主控制器的选择对电路功能的实现尤为重要方案一:单片机和数字芯片结合使用,这样的好处是能减少单片机的工作量,使电路不单纯的只依赖于单片机工作,但是如果使用数字芯片,就有点违背题目初忠,单片机的功能也不能直观的显现出来。

单片机数码电子时钟

单片机数码电子时钟

单片机数码电子时钟一.数码钟工作简介本作品采用Atmel公司的AT89C51单片机,以汇编语言为程序设计的基础,设计一个用四位数码管显示时、分的时钟。

在实物图中,左边靠近电源的绿色发光二极管(长亮)是电源指示灯,表示的是5V稳定电源工作正常;单片机左下角红色发光二极管是秒灯,每闪烁一次表示时间走动一秒钟;按键正上方绿色发光二极管是设置灯,当时间正常走动时此时不亮,当第一次按下设置键(右键)时,此绿灯亮,同时秒时熄灭,且分钟的两位数码管出现闪烁,时间停止走动,进入校时状态,表示此时可以进行分钟的调整,当按一次加一键(左键)可实现分钟的加一功能,分钟以60分为极限,超出60分则返回数值0,从0再重新算起;如果再次按下设置键时,这时秒灯和设置灯仍旧保持熄灭和点亮状态,表示分钟的数码管停止闪烁,反过来表示小时的两位数码管则开始闪烁,此时可进行小时的调整,按加1键可实现小时的加1功能,小时调整以24为上限,同样超出24小时则从新回0;当第三次按下设置键时,数码管停止闪烁,设置灯熄灭,秒灯重新闪烁,时间以设定值计时。

二.硬件工作介绍(一)电源组成部分如图所示,220V交流电通过双12V变压器变为12V的交流电,12V交流电通过四个二极管的全桥整流后变为12V直流电,然后经过电解电容(470μF)进行一级滤波,以去除直流电里面的杂波,防止干扰。

12V直流电出来后再经过三端稳压器7805稳压成为稳定的5V电源,其中7805的Vin脚是输入脚,接12V直流电源正极,GND是接地脚,接12V直流电源负极,Vout为输出脚,它和接地脚的电压就是+5V了。

5V电源出来再经过电解电容的二级滤波,使5V电源更加稳定可靠。

同时在5V稳压电源加上一个470Ω的电阻和一个绿色发光二极管,当上电后,绿色发光二极管点亮,表示电源工作正常。

此时一个稳定输出5V的电源已经设计好,对于本设计它完全能够满足单片机及集成块所需电源的要求。

注:由于7805产生的5V电源供给的器件比较多,所以用散热片防止7805过热而烧坏芯片。

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

static char LED[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; unsigned char hour,minute,second; unsigned int C100us; //100us 计数单元 unsigned int M,H,key,J=1,K=1,KK=1,MO,DA,YE,M1=61,H1=25,M2=61,H2=25; ////////////////////////////////////////////////////////////////////////// void wait(unsigned int i) {unsigned int j; for(j=0;j<i;j++); } //////////////////////////////////////////////////// anniu() {key++; wait(2000); } //////////////////////////////////////////////////// void displayled(void) {unsigned char i; for(i=0;i<8;i++) {P0=LEDXS[i]; P2=LEDWEI[i]; wait(100); } } //////////////////////////////////////////////////// void date(void) {unsigned int s; LEDXS[0]=LED[2]; LEDXS[1]=LED[0]; LEDXS[2]=LED[0]; LEDXS[3]=(LED[YE]-0x80); LEDXS[4]=LED[MO/10]; LEDXS[5]=(LED[MO%10]-0x80); LEDXS[6]=LED[DA/10]; LEDXS[7]=LED[DA%10]; s=10; while(s) {s--; displayled(); } } //////////////////////////////////////////////////// void LEDTS(void) {unsigned int q=0,a,b,c,w,s,x,y; if((a1==0)&&(key==1)){q=1;} // 调时函数 // 日期函数 // 显示函数 // 按钮函数 //延时函数
if((q==1)&&(key!=3)) {M++; if(M==60){M=0;H++;} if(H==24){H=0;} } if((a2==0)&&(key==1)){x=1;} if((x==1)&&(key!=3)) {M--; if(M==0){M=59;} } if((a1==0)&&(key==2)){w=1;} if((w==1)&&(key!=3)) {H++; if(H==24){H=0;} } if((a2==0)&&(key==2)){y=1;} if((y==1)&&(key!=3)) {H--; if(H==0){H=23;} if(a4==0){key=1;} } if(a1==1){q=0;w=0;} if(a2==1){x=0;y=0;} LEDXS[0]=LED[H/10]; LEDXS[1]=LED[H%10]; LEDXS[2]=0xbf; LEDXS[3]=LED[M/10]; LEDXS[4]=LED[M%10]; LEDXS[5]=0xbf; LEDXS[6]=LED[0]; LEDXS[7]=LED[0]; if(key==5){a=1;} while(a) {date(); if(a1==0){DA++;if(DA==32){DA=0;}} if(a2==0){DA--;if(DA==0){DA=31;}} if(key!=5){a=0;} if(a0==0){anniu();} } if(key==6){b=1;} while(b) {date(); if(a1==0){MO++;if(MO==13){MO=0;}} if(a2==0){MO--;if(MO==0){MO=12;}}
四、系统总体结构
电路图
工作原理:利用单片机 89S52 作为本系统的中控模块。电路设 有四个按键,一个为功能选择开关,能够选择调节时间、日期、第一 个闹钟、第二个闹钟;第二个为“加”按钮,能够实现数字的累加; 第三个为 “减” 按钮, 能够实现数字的递减; 第四个为确定选择开关。 电路程序取用单片机内部其中一个定时中断系统作为基准秒频, 这样 能够使 CPU 达到最大利用。功能调节时显示电路仍然能够达到同步 显示。 当调节的闹钟时间与时钟显示的时间相等时, 声光报警电路动 作,取用 LM386 能够放大单片机输出的音频信号,推动扬声器发出 乐耳的音乐;利用 80 只不同颜色的发光二极管排列成奥运五环,在 单片机的驱动下能够以不同方式闪烁发光,使人耳目一新。
单片机数字时钟
一、总体概述 摘 要
本设计采用 89S52 系列单片机作为时钟的控制核心, 电路使用了 八个数码管作为时钟显示, 用计数器中断程序作为了一秒钟的精确计 数,并用按钮实现了调闹钟时间和时钟时间的校对功能。 关键词:单片机、控制、显示、调时。
Abstract
This design's adopting a single slice of the 89 S52 serieses machine is the control core of the clock, the electric circuit used eight piece code tubes as the clock manifestations, The precision that used to count the machine interruption procedure conduct and actions for a second count, counteracting a button to carry out to adjust check of the alarm clock time and the clock time function.
方案一: 十六个数码管显示, 这样可以把时钟时间和日期分开显 示,直观性很强,但是资源比较浪费。 方案二:八个数码管显示,用按键实现对时钟和日期的显示,因 为在实际生活中我们对日期显示的需求并不在每时每刻, 所以大可在 需要时再显示。这样就减少了八个数码管的占用空间和成本。 综上理论分析,拟选择了第二种方案。 (3)数码管与单片机的接口选择 方案一:用 74138 和 7447 集成芯片连接,对输出端口进行扩展, 这样可以减少输出端口,但在时钟电路中所需控制的输出设备不多, 用这种方案会使外围电路复杂,而且一些 P 口闲置浪费。 方案二:直接与端口连接,使得外围电路直观简单,在编程序时 也会显得简单明了。 基于上述考虑,拟采用方案二。
4、调试按键模块
方案一:使用键盘控制,它的效果比较直观,能直接根据需要按 键,直接得出所需的数值,而且对程序的要求也不需很大,但使用的 按钮量较多,占的空间也较大,而且实际实用性不强。 方案二: 采用独立式按键电路, 每个键单独占有一根 I/O 接口线, 每个 I/O 口的工作状态互不影响,此类键盘采用端口直接扫描方式。 缺点是当按键较多时占用单片机的 I/O 数目较多, 优点是电路设计简 单, 且编程极其容易。 考虑到时钟控制在实际使用时的资源量并不大, 使用按钮控制可以大大减少按键的使用量。
2、主控制器模块
主控制器的选择对电路功能的实现尤为重要 方案一: 单片机和数字芯片结合使用, 这样的好处是能减少单片 机的工作量, 使电路不单纯的只依赖于单片机工作, 但是如果使用数 字芯片, 就有点违背题目初忠, 单片机的功能也不能直观的显现出来。 而且相对来说成本要高。电路也不够简略。
方案二: 单独使用单片机控制, 它的好处是外围电路比较简单直 观,所有的控制都只需用软件程序来实现,对于单片机来说,时钟程 序远不够它自身的承受量, 所以只要程序编的合理, 就能比较方便的 实现。 基于上述理论分析,拟选择方案二。
综上理论分析,由于该系统采用了常规钟表式的校对方式,用键较 少,系统资源足够用,拟选择了第二种方案作为调时电路的实现。
5、电源模块
方案一:取用单片三端稳压集成 7805,电路简单、稳定可靠, 且成本低,稳压效果好。
6、闹钟声光报警模块
方案一:取用蜂鸣器和数只发光二极管组成,电路简单,单片机 编程容易,调试简单,但电路的可观性与娱乐性不高。 方案二: 取用单片机编程音乐输出, 数十只不同颜色的发光二极 管排列成不同的图形, 利用单片机编程控制发光管作不同的闪烁, 可 观性与娱乐性都大大提高,又能突出单片机在多功能控制的特点。
三、方案选择与论证
根据题目要求, 电路总共可分为以下几个基本模块, 对于各个模 块的实现,有以下一些设计方案,均进行了可行性分析,最终选择了 最实际可行的方案。 软件部分:
1、 计时控制方案
方案一:使用专用时钟芯片。 使用微控制器控制专用时钟芯片实现计时控制, 这种方案有着计时精 度高、控制简单的优点,而且更易于实现日期/时间显示、定时烹调 等计时扩展功能。 方案二:采用 MCU 内部定时器。 AT89S52 内部含有 2 个定时器, 可以利用一个定时器与程序计数器相 结合的方式,在系统晶振的驱动下,产生标准时钟频率。 由于方案二具有较好的灵活性、 较少的电路器件和较高的性价比, 而 且通过精确的软件补偿使精度完全可以满足控制需要, 所以我们选择 该方案完成设计。
2、显示电路
图 12 电源电路设计
1
采用八只共阳数码管作为时钟电路的显示。 数码管的 a~h 分别并 联在一起,由单片机的 P0 口控制,每只数码管的共阳极分别接一只 PNP 三极管驱动,三极管具有电流放大作用。
相关文档
最新文档