30秒定时器_非常详细_论文__课程设计
- 格式:doc
- 大小:152.50 KB
- 文档页数:16
《电子技术》课程设计报告专业:电子信息工程班级题目:姓名指导教师:摘要此实验为三十秒定时器。
定时器是生活中比较常见的电子仪器的功能之一。
在10多个课题中,算是比较常见,但又比较实用,恰巧作者正在自学单片机,如果用单片机做的话,不失为一个学习的好机会。
这个实验的难点和优点都是程序控制。
因为单片机应用比较灵活,很有学习价值;而又因为它应用很灵活,所以必须学习大量的硬件知识和程序设计。
最小系统,就是最简单的输出/输入构成,并且能实现最基本的运行条件,如应有供电、时钟附属电路等。
单片机的最小系统包括晶振电路复位电路和电源,这时最小系统基本组成当然还可以添加矩阵键盘数码管等。
此实验的原理是,利用单片机的最小系统,通过锁存器74HC573控制数码管,来实现30秒定时器的功能。
本实验过程包括:①前期设计:原理图、PCB图的设计(DXP制作)C语言程序设计及HEX等相关的文件的生成(Keil软件编写)烧录程序至单片机(STC,单片机实验板)元器件的收集②实验制作:电源的设计电路板焊接③后期的整理:电路检测,测算误差思路整理,记录得与失【关键词】单片机;STC89C52 ; LED数码管显示器;计时器;三极管C1008前言现在电子仪器发展迅速,而且功能越来越齐全化,体积微型化,仪器智能化;电压,电流要求越来越简单,功耗越来越低。
而单片机就是其中的佼佼者。
单片机有这体积小,功耗低(89C52功耗在100MW左右),功能强,性能价格比高,易于推广应用等显著特点,所以在现代社会中已经占统治地位。
事实上单片机是世界上数量最多的计算机。
现代人类生活中所用的几乎每件电子和机械产品中都会集成有单片机。
手机、电话、计算器、家用电器、电子玩具、掌上电脑以及鼠标等电脑配件中都配有1-2部单片机。
而个人电脑中也会有为数不少的单片机在工作。
汽车上一般配备40多部单片机,复杂的工业控制系统上甚至可能有数百台单片机在同时工作!单片机的数量不仅远超过PC机和其他计算的综合,甚至比人类的数量还要多。
我们学习了单片机,在条件的允许下,就能制作生活中几乎全部的看起来比较复杂的电子作品。
本实验设计要求:记录实验过程中的主要步骤及细节,实现30秒定功能,其误差不超过1%。
大学过程是一个理论过程,实践的机会比较少,往往会造成理论与实践相脱节,这是国内大学教育系统的通病,不过对于学生来说切不可好高骛远。
一般从大三会开始接触到一些专业课程,电子相关专业会开设相关的单片机应用课程并且会有简单的实验项目,那么要充分把握实验课的机会,多多地实际上机操作练习。
平时可以多看看相关的电子技术杂志网站,看看别人的开发经验,硬件设计方案以及他人的软件设计经验。
有可能的话,还可以参加一些电子设计大赛,借此机会2--3个人合作做一个完整系统,会更有帮助。
到了大四毕业设计阶段,也可以选择相关的课题作些实际案例增长经验。
做什么事情都有个经验的积累过程,循序渐进。
在此实验设计中,制造者可以借此学到很多东西,也知道更多的知识要学。
光学知识不动手是不行的,纸上谈兵,把问题退到以后,很可能永远解决不了问题。
三十秒定时器设计报告--------单片机的初步学习与应用㈠.ⅰ.设计目的:实现30秒定时器;训练动手能力,学习单片机的控制与制作。
ⅱ.设计任务:1.30秒计时器功能,两位数字显示,计时时间间隔为1秒;2.从1到30增计时,每次计时结束时,发光二极管闪动,蜂鸣器响,显示器显示0;3.设置外部开关,可使计时器直接清零。
设计要求:使用常用芯片和其他元器件等,在一块电路板上实现30秒定时器。
尽量使用所学知识。
㈡.最小系统:最小系统,就是最简单的输出/输入构成,并且能实现最基本的运行条件,如应有供电、时钟附属电路等。
单片机的最小系统包括晶振电路复位电路和电源,本实验最小系统只控制数码管、发光二极管、蜂鸣器。
㈢.原理图㈣.参考程序:/********************************************************************文件名:实现30秒定时器* 描述:该程序实现数码管从1~30跳动,每秒跳动一次。
到30然后清零,LED的闪烁,在使用某款新单片机时,经常就用类似的闪烁灯程序来判断单片机是否正常* 创建人:王少阳,2009年12月15日* 版本号: 1.0********************************************************************/#include<reg52.h>#include<intrins.h>#define uint unsigned int //"uint"用来定义无符号整型数。
#define uchar unsigned char //这里用"uchar"代替"unsigned char","uchar"用来定义无符号字uchar temp,aa,bai,shi,ge;sbit dula=P2^6;sbit wela=P2^7;sbit beep=P2^3; //定义蜂鸣器控制端口/*下一行code去掉后 table[] 会被存到 RAM 中,因为单片机的 RAM 比 ROM 小的多*//*所以,对于不会改变的值应该用 code 或者 #define 去定义,让这些固定值存到 ROM 中去*/uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71}; //编码表:0到F的段控制void display(uchar shi,uchar ge);void delay(uint z);void init();/******************************************************************** * 名称 : Main()* 功能 : 主函数* 输入 : 无* 输出 : 无********************************************************************/ void main(){init();//初始化子程序while(1){if(aa==20) //当aa为 20 时,i 自加一次,20 * 50MS = 1S {aa=0;emp++;if(temp==31){temp=0;}bai=temp/100;shi=temp%100/10;ge=temp%10;}display(shi,ge);if(temp==30){beep=1; //蜂鸣器响delay(150);uchar i;while(1){P1 = 0x7f; //P1.7亮亮for(i=0; i<7; i++) //移位7次{P1 = _cror_(P1, 1); /*_crol_()这个数在intrins.h中定义了,用于循环右移*/delay(15);}P0 = 0xfe;for(i=0; i<7; i++){P1= _crol_(P1, 1); //循环左移delay(15);}}}}}/********************************************************************* 名称 : Delay_1ms()* 功能 : 延时子程序,延时时间为 1ms * z* 输入 : z (延时一毫秒的个数)* 输出 : 无********************************************************************/void delay(uint z){uint x,y;for(x=z;x>0;x--)for(y=110;y>0;y--); //这个是通过软件仿真得出的数}/******************************************************************** * 名称 : void display(uchar shi,uchar ge)* 功能 : 实现动态扫描* 输入 : shi,ge* 输出 : 无********************************************************************/ void display(uchar shi,uchar ge){/* dula=1;P0=table[bai];dula=0;P0=0xff;wela=1;P0=0xfe;wela=0;delay(1); */dula=1;P0=table[shi]; //数码管段值dula=0;P0=0xff; //灯都熄灭,防止人眼的视觉停留wela=1;P0=0xfe;//1111 1110Bwela=0;delay(2); /*延时,实现软件消抖,去掉的话会出现该暗的米有暗下去,这时人眼能分辨动态显示。
*/dula=1;P0=table[ge];dula=0;P0=0xff;wela=1;P0=0xfd;//1111 1101Bwela=0;delay(2);}/********************************************************************* 名称 void init()* 功能 : 定时器的初始化,12MHz晶振,50ms* 输入 : 无* 输出 : 无********************************************************************/void init(){wela=0;dula=0;temp=0;TMOD=0x01; //设置定时器0工作方式1。
STC89C52是16位定时器。
2的16次方=65536。
TH0=(65536-50000)/256;TL0=(65536-50000)%256;EA=1; //开总中断,IE^7ET0=1; //开定时器中断TR0=1; //启动定时器0}/********************************************************************* 名称 :void timer0()* 功能 : 定时器中断,中断一次,aa 加一* 输入 : 无* 输出 : 无********************************************************************/void timer0() interrupt 1{ //中断优先级别为1;中断方式:定时/计数器0(T0)TH0=(65536-50000)/256;TL0=(65536-50000)%256;aa++;}程序的中的重点技巧:1.两位以上的数码管,是不能在静态时同时显示不同的符号的,所以就需要用到动态显示,具体方法是每位数码管一次都显示几毫秒,实现动态扫描,使人在肉眼难以分辨(人眼的分辨能力是0.1秒左右),例如:dula=1;P0=table[ge];dula=0;P0=0xff;wela=1;P0=0xfd;//1111 1101Bwela=0;delay(2);2.常用程序驱动几个发光二极管来判断单片机是否工作正常,具体是用循环移动P1扣来实现。