文档详情

LED数字倒计时器实验报告资料

大米
实名认证
店铺
DOC
611KB
约20页
文档ID:515535373
LED数字倒计时器实验报告资料_第1页
1/20

淮阴师范学院物理与电子电气工程学院课程设计报告学生姓名 靖洋学 号171206011班 级12级4班专 业电子信息科学与技术题 目LED数字倒计时器指导教师 魏东旭 、陈勇 2014年12月一、设计任务与要求 LED倒计时器设计以AT89S52单片机为核心,系统包括6位数码管显示电按键电路、电源电路、复位电路、晶振电路及蜂鸣器电路几部分要求:1)LED数码管显示倒计时时间;2)倒计时过程中能设置多个闹钟,当倒计时值倒计到定值时会发出约2s的报警声音;3)通过按键可以对倒计时设定初值,倒计时初始值范围在24:00:00---00:00:60之间,用户可根据需要对其进行设置,设置成功后复位初始值为成功设定值二、框图设计2.1 LED数字倒计时器主要由AT89C51单片机、晶振电路、复位电路、按键电路、数码管电路、蜂鸣电路组成(如图2.1)数码管电路晶振电路AT89C51复位电路蜂鸣电路按键电路 图2.1 LED数字倒计时器系统设计框图2.2 晶振电路分析 1)晶振电路原理: 晶振是通过电激励来产生固定频率的机械振动,而振动又会产生电流反馈给电路,电路接到反馈 后进行信号放大,再次用放大的电信号来激励晶振机械振动,晶振再将振动产生的电流反馈给电路,如此这般。

当电路中的激励电信号和晶振的标称频率相同时,电 路就能输出信号强大,频率稳定的正弦波整形电路再将正弦波变成方波送到数字电路中供其使用 2)晶振电路的特点: 晶振是石英振荡器的简称,英文名为Crystal,晶振分为有源晶振和无源晶振两种,其作用是在电路产生震荡电流,发出时钟信号它是时钟电路中最重要的部件,它的作用是向IC等部件提供基准频率,它就像个标尺,工作频率不稳定会造成相关设备工作频率不稳定,自然容易出现问题由于制造工艺不断提高,现在晶振的频率偏差、温度稳定性、老化率、密封性等重要技术指标都很好,已不容易出现故障,但在选用时仍可留意一下晶振的质量图2.2 晶振电路原理图2.3 复位电路的分析 1)复位电路的原理: 系统上电时提供复位信号,直至系统电源稳定后,撤销复位信号为可靠起见,电源稳定后还要经一定的延时才撤销复位信号,以防电源开关或电源插头分-合过程中引起的抖动而影响复位RC复位电路可以实现上述基本功能,但解决不了电源毛刺和电源缓慢下降(电池电压不足)等问题,而且调整 RC 常数改变延时会令驱动能力变差左边的电路为高电平复位有效,右边为低电平有效, 复位按键为手动复位开关,电容可避免高频谐波对电路的干扰。

2)复位电路的作用:复位电路是为确保微机系统中电路稳定可靠工作必不可少的一部分,复位电路的第一功能是上电复位一般微机电路正常工作需要供电电源为5V±5%,即4.75~5.25V由于微机电路是时序数字电路,它需要稳定的时钟信号,因此在电源上电时,只有当VCC超过4.75V低于5.25V以及晶体振荡器稳定工作时,复位信号才被撤除,微机电路开始正常工作图2.3 复位电路原理图2.4 按键电路的分析 1)按键电路的原理: 按键B1/B2/B3/B4断开时,P1.0/P1.1/P1.2/P1.3输入为高电平;按键B1/B2/B3/B4闭合后,P1.0/P1.1/P1.2/P1.3输入为低电平每按一次按键,就会有一次低电平,单片机就会对低电平计数,从而来调节定时时间由于按钮是机械触点,当机械触点断开、闭合时,会有抖动动,这种抖动对于计算机来说,是完全能感应到的,因为计算机处理的速度是在微秒级,而机械抖动的时间至少是毫秒级你只按了一次按钮,可是计算机却已执行了多次中断的过程,如果执行的次数正好是奇数次,那么结果正如你所料,如果执行的次数是偶数次,那就不对了,所以必须运用延时程序消除按键的抖动。

2)按键电路的作用: 每次复位之后,三个两位数码管全部都会显示为0,而与P1.0相接的按钮B1,每次按下一次,就会产生一次低电平,单片机就会计数一次,从而调节倒计时的小时时间,B2则调节分钟,B3则调节秒钟,与这三个按键分别控制数码管的显示倒计时的小时、分钟、秒与这三个按键不同的是,按键B3的作用是开始倒计时这些按键的功能都是通过编程来控制的 图2.4按键电路原理图2.5 数码管电路的分析 1)数码管电路的组成:a) 六位数码管:分别显示小时,分钟和秒钟b) 含有八个电阻带电源的排阻:分别与三个数字显示的数码管并联,电源给数码管提供电压,电阻的作用是保护数码管不被烧坏c)将PO口的八位与数码管和排阻连载一起的导线,将P2口的六位分别与六位数码管的六个位选引脚接在一起 2)数码管电路的原理: 7段数码管一般由8个发光二极管组成,其中由7个细长的发光二极管组成数字显示,另外一个圆形的发光二极管显示小数点当发光二极管导通时,相应的一个点或一个笔画发光控制相应的二极管导通,就能显示出各种字符,尽管显示的字符形状有些失真,能显示的数符数量也有限,但其控制简单,使有也方便发光二极管的阳极连在一起的称为共阳极数码管,阴极连在一起的称为共阴极数码管。

共阴极 共阳极7段数码管内部字段LED和引脚分布2.6 蜂鸣电路的分析 1)蜂鸣电路的组成:两个阻值为一千欧姆的电阻,一个阻值为100欧姆的电阻,一个蜂鸣器,一个三极管,一个接地,以及导线 2)蜂鸣电路的原理:蜂鸣电路是利用I/O 定时翻转电平产生驱动波形对蜂鸣器进行驱动在程序上,可以使用TIMER0 来定时,将TIMER0 的预分频设置为/1,选择TIMER0 的始终为系统时钟(主振荡器时钟/4),通过按键可以在TIMER0 的载入/计数寄存器内调节设置时间,就能将TIMER0 的中断设置设置为倒计时时间,当需要I/O 口驱动的蜂鸣器鸣叫时,只需要在进入TIMER0 中断的时候对该 I/O 口的电平进行翻转一次,直到蜂鸣器不需要鸣叫的时候,将I/O 口的电平设置为低电平即可不鸣叫时将I/O 口的输出电平设置为低电平是为了防止漏电图2.6 蜂鸣电路原理图三、 LED数字倒计时器软件设计3.1 LED数字倒计时器的程序流程图开始CPU系统初始化定时器0初始化中断初始化设置时间?设置闹铃时间显示刷新启动走时有关变量初始化时分变化?刷新显示1秒到秒指示闹铃时间?蜂鸣器结束YNYNYNYN3.1 LED数字倒计时器的C语言程序编码#includesbit kh=P1^0;//定义kh为与P1.0相连接的按键B1sbit km=P1^1;//定义km为与P1.1相连接的按键B2sbit ks=P1^2;//定义ks为与P1.2相连接的按键B3sbit st=P1^3;//定义st为与P1.3相连接的按键B4sbit b=P3^7;//定义b为P3.7unsigned char table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71}; // LED数码管从0到F的显示unsigned char i=0,hour=0,minute=0,second=0;//定义无符号的变量并赋初值void delayms(unsigned int x){ unsigned char a=160;//定义无符号变量a的值为160,指延时时间为160个及其周期乘以x,160可以为180、200等,自己设置 while(x--) { while(a--); a=160; }}//定义延时程序的延时时间为160个及其周期乘以x,避免按键抖动的影响main(){ TH0=(65536-50000)/256;//设置定时时间对高八位赋值,50000是50000个机器周期,0.05秒 TL0=(65536-50000)%256;//设置定时时间对低八位赋值,50000是50000个机器周期,0.05秒 TMOD=1;//定时器模式 TR0=0;//停止计时 ET0=1;//开定时器中断 EA=1;//开总中断 while(1) { P0=table[hour/10];//显示小时的十位 P2=~32;//对数码管进行位选和段选,选中显示小时的十位 delayms(1);//延时以便于显示 P2=0xff;//重新给P2口一个高电平,避免误操作 P0=table[hour%10];//显示小时的个位 P2=~16;//对数码管位选和片选,选中显示小时的个位 delayms(1);//延时以便于显示 P2=0xff;//重新给P2口一个高电平,避免误操作 P0=table[minute/10];//显示分钟的十位 P2=~8;//对数码管进行位选和段选,选中显示分钟的十位 delayms(1);//延时以便于显示 P2=0xff;//重新给P2口一个高电平,避免误操作 P0=table[minute%10];//显示分钟的个位 P2=~4;//对数码管进行位选和段选,选中显示分钟的个位 delayms(1);//延时以便于显示 P2=0xff;//重新给P2口一个高电平,避免误操作 P0=table[second/10];//显示秒钟的十位 P2=~2;//对数码管进行位选和段选,选中显示秒钟的十位 delayms(1);//延时以便于显示 P2=0xff;//重新给P2口一个高电平,避免误操作 P0=table[second%10];//对数码管进行位选和段选,选中显示秒钟的个位 P2=~1;//对数码管进行位选和段选,选中显示秒钟的个位 delayms(1);//延时以便于显示 P2=0xff;//重新给P2口一个高电平,避免误操作 if(!kh)//如果小时按键B1按下 { delayms(200);//延时200乘以160个机器周期,避免按键抖动的影响 hour++;//定时时间的小时加一 if(hour>23)//因为是无符号的变量,减到0之后,再减就会变成ff,大于23 hour=23; } else if(!km)//如果分钟按键B2按下 { delayms(200);//延时200乘以160个机器周期,避免按键抖动的影响 minute++;定时时间的分钟加一 if(minute>59)//因为是无符号的变量,减到0之后,再减就会变成ff,大于2359 minute=59; } else if(!ks)//如果秒按键B3按下 { delayms(200);//延时200乘以160个机器周期,避。

下载提示
相似文档
正为您匹配相似的精品文档