倒数计数器报告.docx
《倒数计数器报告.docx》由会员分享,可在线阅读,更多相关《倒数计数器报告.docx(23页珍藏版)》请在冰豆网上搜索。
倒数计数器报告
湖南涉外经济学院
课程设计报告
课程名称:
单片机原理及应用报告题目:
倒数计数器学生姓名:
吴俊腾所在学院:
信息科学与工程学院专业班级:
电信1102班学生学号:
11430419814072指导教师:
廖亦凡黄科
2013年12月23日
课程设计任务书
报告题目
倒数计数器
完成时间
12.23
学生姓名
吴俊腾
专业
班级
电信
1102班
指导教师
黄科
廖亦凡
职称
学生
总体设计要求和技术要点
利用AT89C51单片机设计一个简易的倒数计数器,可用来煮方便面、煮开水或小睡片刻等。
做一小段时间倒计数,当倒计数为0时,则发出声响通知倒计数终了。
(1)显示格式为“分分:
秒秒”
(2)用4个按键操作来设置当前想要倒计数的时间。
一旦按下键则开始倒计数,当计数为0时,发出一阵音乐声。
(3)程序执行后工作指示灯LED闪动,表示程序开始执行,按下操作键K1〜K4动作如下。
K1—可调整倒计数的时间1〜60分钟。
K2—设置倒计数的时间为5分钟,显示“0500”。
K3—设置倒计数的时间为10分钟,显示“1000”。
K4—设置倒计数的时间为20分钟,显示“2000”。
工作内谷及时间进度安排
第15周:
周1---周3:
立题、论证方案设计
周4---周5:
程序设计
第16周:
周1---周3:
仿真实验
周4---周5:
验收答辩
课程设计成果
1.与设计内容对应的软件程序
2•课程设计总结报告
摘要
单片机自20世纪70年代问世以来,以其极高的性能价格比,受到人们的重视和关注,应用很广、发展很快。
而51单片机是各单片机中最为典型和最有代表性的一种。
本实验是基于MCS5係列单片机所设计的,可以实现键盘按键与数字动态显示并可以用倒数的计数器。
本设计基于单片机技术原理,以单片机芯片STC89C52乍为核心控制器,通过硬件电路的制作以及软件程序的编制,设计制作出一个计数器,包括以下功能:
输出时间,按下键就开始计时,并将时间显示在LED数码管显示器上。
当倒计数为0时,蜂鸣器就发出音乐声响等等。
该计数器係统主要由计数器模块、数码管显示器模块、蜂鸣器模块、键盘模块、复位模块等部分组成。
关键词:
STC89C52键盘、LED数码管显示、蜂鸣器
课程设计任务书2
一、项目概述和要求1
1.单片机基础知识1...
2.单片机的发展趋势1...
二、系统设计2
1.框图设计2...
2.设计方案的选择及论证3..
3.电路原理图4...
4.元件清单4...
三、软件设计7
1.程序流程图7...
2.工作方式设计9...
四、系统的仿真与调试10
1.硬件调试1..0.
2.软件调试1..0.
3.软硬件调试1..0.
五、总结11
六、参考文献12
附录程序:
13
一、项目概述和要求
1.单片机基础知识
单片机又称单片微控制器,它不是完成某一个逻辑功能的芯片,而是把一个计算机系统集成到一个芯片上。
概括的讲,一块芯片就成了一台计算机。
单片机具有体积小、功能强、应用面广等优点,目前正以前所未见的速度取代着传统电子线路构成的经典系统,蚕食着传统数字电路与模拟电路固有的领地。
它的体积小、质量轻、价格便宜、为学习、应用和开发提供了便利条件。
同时,学习使用单片机了解计算机原理与结构的最佳选择。
现在,这种单片机的使用领域已十分广泛。
彩电、冰箱、空调、录像机、VCD遥控器、游戏机、电饭煲等无处不见单片机的影子,单片机早已深深地融入我们每个人的生活之中。
单片机能大大地提高这些产品的智能性,易用性及节能性等主要性能指标,给我们的生活带来舒适和方便的同时,在工农业生产上也极大地提高了生产效率和产品质量。
单片机按用途大体上可分为两类,一种是通用型单片机,另一种是专用型单片机。
MCS-51单片机是美国INTEL公司于1980年推出的产品,与MCS48单片机相比,它的结构更先进,功能更强,在原来的基础上增加了更多的电路单元和指令,指令数达111条,MCS-51单片机可以算是相当成功的产品,一直到现在,MCS-51系列或其兼容的单片机仍是应用的主流产品,各高校及专业学校的培训教材仍与MSC-51单片机作为代表进行理论基础学习。
MCS-51系列单片机主要包括8031、8051和8751等通用产品。
2•单片机的发展趋势
单片机现在可以说是百花齐放,百家争鸣的时期,世界上各大芯片制造公司都推出了自己的单片机,从8位、16位到32位,数不胜数,应有尽有,有与主流C51系列兼容的,也有不兼容的,但它们各具特色,互成互补,为单片机的应用提供了广阔的天地。
纵观单片机的发展过程,可以预示单片机的发展趋势,大致有:
一、微型单片化
现在常规的单片机普遍都是将中央处理器(CPU)、随机存取数据存储
(RAM)、只读程序存储器(ROM)、并行和串行通信接口,中断系统、定时电路、时钟电路集成在一块单一的芯片上,增强型的单片机集成了如A/D转换器、PMW(脉宽调制电路)、WDT(看门狗)、有些单片机将数码管(LED)驱动电路都集成在单一的芯片上,这样单片机包含的单元电路就更多,功能就越强大。
甚至单片机厂商还可以根据用户的要求量身定做,制造出具有自己特色的单片机
-H-UL心片。
此外,现在的产品普遍要求体积小、重量轻,这就要求单片机除了功能强和功耗低外,还要求其体积要小。
现在的许多单片机都具有多种封装形式,其中SMD(表面封装)越来越受欢迎,使得由单片机构成的系统正朝微型化方向发展。
二、低功耗CMOS化
MCS-51系列的8031推出时的功耗达630mW,而现在的单片机普遍都在100mW左右,随着对单片机功耗要求越来越低,现在的各个单片机制造商基本都采用了CMOS(互补金属氧化物半导体工艺)。
像80C51就采用了HMOS(即高密度金属氧化物半导体工艺)和CHMOS(互补高密度金属氧化物半导体工艺)CMOS虽然功耗低,但由于其物理特征决定其工作速度不够高,而CHMOS则
具备了高速和低功耗的特点,这些特征,更适合于要求低功耗像电池供电的应用场合。
所以这种工艺将是今后一段时期单片机发展的主要途径。
三、主流与多品种共存
现在虽然单片机的品种繁多,各具特色,但仍以89C51为核心的单片机占主流,兼容其结构和指令系统的有PHILIPS公司的产品,ATMEL公司的产品和中国台湾的Winbond系列单片机。
所以89C51占据了半壁江山。
而Microchip公司的PIC精简指令集合(RISC)也有着强劲的发展势头,中国台湾的HOLTEX公司近年的单片机产量与日俱增,与其底价质优的优势,占据一定的市场份额。
此外还有MOTOROLA公司的产品,日本几大公司的专用单片机。
在一定的时期内,这种情形将得以延续,将不存在某个单片机一统天下的垄断局面,走的是
依存互补、相辅相成、共同发展的道路。
九十年代以后,单片机在结构上采用双CPU或内部流水线,CPU位数有8位、16位、32位,时钟频率高达20MHZ,片内带有PWM输出、监视定时器WDT、可编程计数器阵列PCA、DMA传输、调制解调器等。
芯片向高度集成化、低功耗方向的发展,使得单片机在大量数据的实时处理、高级通信系统、数字信号处理、复杂工业过程控制、高级机器人以及局域网等方面得到大量应用。
这类单片机有NEC公司的MPD7800,MITSUBISHI公司的M337700,REVKWELL公司的R6500。
二、系统设计
1.框图设计
框图设计是为了能够从整体上把握系统的各个大的模块以及各个模块之间的联系。
同时罗列出需要主要使用到的各个器件,以方面系统开发中器件的选取。
通过框图设计,让设计者从整体上把握系统的开发
本系统设计的框图如下图1所示
图1系统结构框图
2.设计方案的选择及论证
2.1预置时间方案选择
由于设计要求倒数时间输入可调并译码显示,比较经典的方案是使用8279
芯片:
40个引脚的8279芯片是由Intel于80年代首先推出的,参考资料较多,应用比较成熟。
优点:
最为通用,输入时间使用键盘方便、易操作。
缺点:
元器件多,面积大,电路复杂,需要较好的编程能力才能灵活运用,其综合成本较高,而且本系统只用到其键盘输入单个功能,不能充分利用它的强大功能。
即本设计系统所选方案,由STC89C5伪核心芯片,由4X4矩阵键盘输入相应的信息,LED数码管作显示器件。
本方案结构简单,成本低。
修改方便。
2.2提示信号发生电路
单片机驱动能力有限,不能直接驱动蜂鸣器,本方案利用三极管作蜂鸣器的驱动器件。
2.3电路总体工作流程
开电源―复位清零—设置时间T—按输入确认键,确认输入
按开始键则进入倒计时,此时计数工作灯绿灯亮剩余时间提示(T
=10min时,倒数至5分钟提示;T<10min,倒数至1min提示)短提示音►
倒数至0时发出长4s的提示音,同时亮黄灯一>若计时未完则进入超时计数,
直到超时1min时给出长4s的较急促的提示音,同时亮红灯警告,且计时停止,
数码管显示1分钟不变直到主持人复位清零——*若计时在超时1min之刖完成按复位键清零停止计数
3.电路原理图
电路原理图如图2所示。
图2电路原理图
4.元件清单
4.1AT89C51芯片
STC89C52芯片图如下图3所示。
图3AT89C51芯片图
主要性能:
与MCS-51单片机产品兼容、8K字节在系统可编程Flash存储器、1000次擦写周期、全静态操作:
0Hz〜33Hz、三级加密程序存储器、32个可编程I/O口线、三个16位定时器/计数器八个中断源、全双工UART串行通道、低功耗空闲和掉电模式、掉电后中断可唤醒、看门狗定时器、双数据指针、掉电标识符。
功能特性描述:
STC89C52是一种低功耗、高性能CMOS位微控制器,具有8K在系统可编程Flash存储器。
使用高密度非易失性存储器技术制造,与工业80C51产品指令和引脚完全兼容。
片上Flash允许程序存储器在系统可编程,亦适于常规编程器。
在单芯片上,拥有灵巧的8位CPU和在线系统可编程Flash,使得STC89C52为众多嵌入式控制应用系统提供高灵活、超有效的解决方案。
STC89C52具有以
下标准功能:
8k字节Flash,256字节RAM32位I/O口线,看门狗定时器,2个数据指针,三个16位定时器/计数器,一个6向量2级中断结构,全双工串行口,片内晶振及时钟电路。
另外,STC89C5酣降至0Hz静态逻辑操作,支
持2种软件可选择节电模式。
空闲模式下,CPU停止工作,允许RAM定时器/
计数器、串口、中断继续工作。
掉电保护方式下,RAM内容被保存,振荡器被冻
结,单片机一切工作停止,直到下一个中断或硬件复位为止。
8位微控制器8K字节在系统可编程Flash
4.2LED数码管
LED数码管如下图4所示。
图4LED数码管图
LED数码管通常有8条引脚线或12条引脚线的LED数码管,多出来的4条线是分别控制4个数码管的现象线。
数码管A、B、C、D、E、F、G、DP接8051的P0A0~~P0A7口进行控制,数码管1、2、3、4口接驱动电路
4.3按键控制模块
按键用于控制数码显示、LED数码管显示、扬声器等模块的工作。
通过扫描按键是否按下,来设定各模块的工作情况,使各模块可以在按键的控制下,有序地进行工作。
设计中使用单个按键实现单个功能,属于较为简单的控制方式。
在多功能系统设计的试验中我们使用四个按键分别与单片机的P3A4>P3A5>
P3A6>P3A7相连。
通过按下相应的按键来处理相应的程序。
如下图5所示
图5按键控制模块图
4.4蜂鸣器
蜂鸣器的功能是对输入的不同频率的方波进行播放形成音乐,持续送出工作脉冲可以推动喇叭发出哔的声响,当工作频率越高时,声音越清脆,工作频率低时,声音则较低沉。
使用8051的P1A5口进行控制,如图6所示。
图6蜂鸣器模块图
4.5其它元件
其它元件图如下图7所示
三、软件设计
1.程序流程图
主程序开始初始化,然后扫描键盘、复位电路和计数器。
当键盘按键有按下时,调整计数器值,数码管显示新值。
当复位键有按下时,计数器复位为开机画面,当计数器值倒计为0时,蜂鸣器发出声音,计数器停止倒计,程序结束。
1.1主程序流程图如图8所示。
图8主程序流程图
1.2LED数码管显示流程图如图9所示。
是否有程序执行
是否有键按下
是
数码管显示时间
复位键是否按下
数码管显示倒计时分钟秒数
是否有按键按下
图9LED数码管显示流程图
1.3按键流程图如图10所示
图10按键流程图
2.工作方式设计
C语言比起汇编语言具有简洁紧凑、灵活方便、语法限制不太严格、程序设
计自由度大等特点,本例采用C语言进行程序编写。
用到了定时器0和1,初始
时开T0而关闭T1。
其中定时器0用来控制倒计时的实现,即当时间到达50ms
(定时器时间)*20(循环次数)时,执行中断0将显示时间减一,同时判断计时是否减为0,当扫描但定时时间为0时,则关闭定时器0,而打开定时器1,控制音乐的播放。
四、系统的仿真与调试
1.硬件调试
硬件调试分为静态调试和动态调试,对于硬件调试而言,只要认真焊接,硬件一般不会出现什么问题的。
静态调试一般采用的工具是万用表,它是在用户系统未工作时的一种硬件检测。
动态调试是在用户系统工作的情况下发现和排查错误的一种硬件检测。
调试
步骤是:
首先把电路分为若干模块,调试过程中与该模块无关的元件可以不加考虑,这样可把故障限定在一定的范围内;故障清除后,把各个模块合在一起进行联调,即可完成整个硬件调试工作。
2.软件调试
软件调试是通过对程序的汇编、连接、执行来发现程序中存在的语法错误与逻辑错误并加以排除纠正的过程。
3.软硬件调试
软硬件联调是指把调试无误的软件程序烧制进单片机芯片内部,通上电源后,
检查硬件工作是否有预期的效果,如果没有则需要检测软件是否在实现功能上有欠缺。
若有错误,通过改写软件来调试,直至达到预期效果,则设计圆满成功。
本课程设计调试结果如下图11所示。
30怙审12月卽吕23.03
图11调试结果图
五、总结
经过将近两个星期的课程设计,简单带有LED数码管显示的倒数计数器基本完成,系统基本功能基本实现,测试运行也基本正常。
该系统基本上完成了计数闹时的功能。
这次课程设计的时间虽然不算很长,但使我对很多东西有了更深刻的认识。
平时在课堂上无法掌握的集体操作都有了一定的进步。
总结如下:
1.查阅资料和阅读相关文献的重要性。
2.向同学请教的重要性,团结协作的重要性。
3.勤动手的重要性,自己动手,丰衣足食!
以前很多时候一遇到问题常常都会问同学,但是通过这次设计,我学会了自己努力解决困难,提高了自己解决问题的能力。
4.对待任何事情都要有耐心和恒心,遇到问题要冷静地思考,积极找出症结所在,逐个解决。
5.做事情要步步为营,不能一蹴而就,就像焊接电路,只有确保每一部都真确,才有可能实现整个电路正常工作。
通过本次课程设计,我更深刻的认识到了教学实践在大学课程中的重要性,同时也发觉到了自己在学习方面存在的许多不足之处,在以后的学习中我会努力改进这些不足,不断提高自己的动手实践能力。
这次设计是我第一次独自一人完成从写开题报告、到画原理图、画pcb、然后学习了C并且编写了程序的整个设计过程,虽然没有制板,这也许是个遗憾,但我还是学到了非常多的东西。
比如弄懂了数码管的原理,按键扫描的原理,熟悉了中断的应用以及初步了解了音乐的设计。
在这个设计中,遇到了非常多的问题,最后都通过自己的努力以及老师同学的帮助而获得解决。
也明白了理论要在实践中才能深刻的理解,这也是我以后要努力的方向。
六、参考文献
[1]张毅刚.《单片机原理及应用》.高等教育出版社,北京,2010年
2007年
:
2:
谭浩强,《C程序设计解题与上机指导》,清华大学出版社,北京,
附录程序:
#include
#include
#defineLED_code_portP0//段码数据口
#defineLED_segmnet_portP1//位码数据口
sbitKEYL3=P"5;
sbitKEYH1=P3A7;
sbitKEYH2=P3A6;
sbitKEYH3=P3A5;
sbitKEY1=P3A4;//四个按键数据口
unsignedintflag;
unsignedchartime_data[3]={00,10,0};
unsignedcharcodetable[]={0xC0,0xF9,0xA4,0xB0,
0x99,0x92,0x82,0xF8,
0x80,0x90,0x88,0x83,
0xC6,0xA1,0x86,0x8E
};//段码数组
unsignedcharn=0;//n为节拍常数变量
unsignedcharcodemusic_tab[]={
0x18,0x30,0x1C,0x10,//格式为频率常数,节拍常数,频率常数,节拍常数,
0x20,0x40,0x1C,0x10,
0x18,0x10,0x20,0x10,
0x1C,0x10,0x18,0x40,
0x1C,0x20,0x20,0x20,
0x1C,0x20,0x18,0x20,
0x20,0x80,0xFF,0x20,
0x30,0x1C,0x10,0x18,
0x20,0x15,0x20,0x1C,
0x20,0x20,0x20,0x26,
0x40,0x20,0x20,0x2B,
0x20,0x26,0x20,0x20,
0x20,0x30,0x80,0x00
};
sbitS=P1A5;//蜂鸣器
voiddelay(unsignedcharm)//控制频率延时
{
unsignedchari=3*m;
while(--i);
}
voiddelayms(unsignedchara)//毫秒延时子程序
{
while(--a);//采用while(--a)不要采用while(a--);
}
voidKILL()//播放音乐函数
{unsignedcharp,m;//m为频率常数变量
unsignedchari=0;
TMOD=0x10;
TH1=0xd8;TL1=0xef;
ET1=1;EA=1;ES=1;
play:
while
(1)
{
a:
p=music_tab[i];
if(p==0x00)
{i=0,delayms(1000);gotoplay;}//如果碰到结束符,延时1秒,回到开始再来一遍elseif(p==0xff)
{i=i+1;delayms(100),TR1=0;gotoa;}//若碰到休止符延时100ms,继续取下一音符
else
{m=music_tab[i++],n=music_tab[i++];}//取频率常数和节拍常数
TR1=1;//开定时器1
while(n!
=0)S=~S,delay(m);//等待节拍完成,通过P1口输出音频
TR1=0;//关定时器1
}
}
voiddelay_ms(unsignedintx)//延时毫秒级
{
unsignedinta=0,b=0,c=0;
for(a=x;a>0;a--)
for(b=5;b>0;b--)
for(c=64;c>0;c--);
voidLED_display(unsignedcharseg_code,unsignedcharshuju)
{
if(seg_code<1||seg_code>4)seg_code=1;
送入位码
if(shuju>15)shuju=15;
LED_segmnet_port=(LED_segmnet_port|0x0f)&_crol_(0xfe,seg_code-1);//
LED_code_port=table[shuju];//送入段码
delay_ms
(2);//保持显示2毫秒
LED_segmnet_port=LED_segmnet_port|0x0f;//关掉所有数码管
}
voiddisplay_time()
{
LED_display(1,time_data[0]/10);
LED_display(2,time_data[0]%10);
LED_display(3,time_data[1]/10);
LED_display(4,time_data[1]%10);
}
voidtime_initial()
{
TMOD=0x01;//定时器,方式1
TH0=0x4c;//写入初值高8位
TL0=0;//写入初值低8位
EA=1;//开总中断
ET0=1;//定时中断允许
TR0=1;//开启定时器
}
voidint0()interrupt3//采用中断1控制节拍
{TH1=0xd8;
TL1=0xef;
n--;
time_initial();TR1=0;
while
(1)
{KEYL3=0;
display_time();
if((time_data[0]==0)&(time_data[1]==0)){TR0=0;TR1=1;KILL();}
display_time();//判断计时是否为0,如为0,播放音乐
if(KEYH1==0)//键盘扫描
{delay_ms(5);//消斗
if(KEYH1==0)//按键1按下,标志位置1
{flag=1;}
}
if(flag==1)
{if(KEYH2==0)
{delay_ms(5);
if(KEYH2==0)
{time_data[0]++;display_time();}//标志位置1情况下,如果按键2按下,分钟加1}if(KEYH3==0){delay_ms(5);
if(KEYH3==0)
{time_data[0]--;display_time();}//标志位置1情况下,如果按键3按下,分钟减1}if(KEY1==0){delay_ms(5);
if(KEY1==0)
{flag=0;delay_ms(50);display_time();}
}//标志位置1情况下,如果按键4按下,标志位置0,设置完成
}
if(flag==0)
{
if(KEYH2==0){delay_ms