单片机课程设计--- 设计并实现可编倒计时装置.doc_第1页
单片机课程设计--- 设计并实现可编倒计时装置.doc_第2页
单片机课程设计--- 设计并实现可编倒计时装置.doc_第3页
单片机课程设计--- 设计并实现可编倒计时装置.doc_第4页
单片机课程设计--- 设计并实现可编倒计时装置.doc_第5页
已阅读5页,还剩12页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

课程设计任务书题 目: 设计并实现可编倒计时装置初始条件:1. protues软件或xl1000实验箱;2. 课程设计辅导资料:“xl1000说明书以及实验指导”“、单片微型计算机”等;3. 先修课程:模拟电子技术、数字电子技术、protues电路设计教程及单片机原理及应用等课程要求完成的主要任务:(包括课程设计工作量及其技术要求,以及说明书撰写等具体要求)1. 课程设计时间:1周;2. 课程设计内容:设计并实现可编倒计时装置;要求:按秒倒计时,键盘预置分、秒各两位数,键控启动计时,数码管显示倒计时。计时器归零时输出一音频信号。3. 本课程设计统一技术要求:研读辅导资料对应章节,对选定的设计题目进行理论分析,针对具体设计部分的原理分析、建模、必要的推导和可行性分析,画出程序设计框图,编写程序代码(含注释),上机调试运行程序,记录实验结果(含计算结果和图表),并对实验结果进行分析和总结;4. 课程设计说明书按学校“课程设计工作规范”中的“统一书写格式”撰写,具体包括: 目录; 设计原理; 系统硬件线路设计图; 程序框图; 资源分配表; 源程序 性能分析 课程设计的心得体会(至少500字);时间安排:指导教师签名: 年 月 日系主任(或责任教师)签名: 年 月 日目录1.设计原理.21.1倒计时原理21.2数码管显示原理.21.3矩阵键盘工作原理.21.4小喇叭工作原理31.5led灯显示原理.32.系统硬件线路设计图42.1单片机部分.42.2数码管部分.42.3矩阵键盘部分52.4小喇叭及led部分.52.5x1000实验箱连线63.程序框图74.资源分配表95.源程序.96.性能分析.147.总结与心得158.本科生课程设计成绩评定表.161.设计原理1.1倒计时原理利用定时器t0工作于方式1下,为16位定时计数方式,由th提供高8位,tl提供低8位的计数初值,最大计数为65536个脉冲,当时,工作于定时方式,以振荡源的12分频信号作为计数脉冲;当时,工作于计数方式,对外部脉冲输入端输入的脉冲计数。计数脉冲能否加到计数器上,受启动信号的控制,当gate=0时只要tr=1则定时/计数器启动工作。当gate=1时,tr=1和同时满足才能启动,此时启动受到双重控制。每启动定时、计数前,需预置计数初值。启动后计数器立即加1计数,tl低8位的计数满回零后向th进位,当16位计数满回零后,中断溢出标志tf置1,产生中断请求,表示定时时间到或计数次数到。若允许中断et=1且cpu开中断(ea=1),则cpu响应中断,转向中断服务程序,同时tf自动清零。tmod=0x01设置定时器t0工作与方式1且为定时方式,由于每个计数脉冲的周期为1us,故若将定时器设置为10ms需接受10000次脉冲,所以要从初值55536处开始计数,为定时器赋初值为th=0xd8,tl=0xf0。在此基础上以count-作为倒计时程序,设置count从100开始减1即可实现时间间隔为1s的倒计时。1.2数码管显示原理数码管实际上是由7个发光二极管组成8字形构成的,加上小数点就是8个,我们分别把他命名为a,b,c,d,e,f,g,h。在xl1000实验箱接法为共阳极接法,我们获得0123456789字符所对应的hex代码即为0x28,0x7e,0xa2,0x62,0x74,0x61,0x21,0x7a,0x20,0x60 。由于所有数码管显示端和控制端都接在一起,为了显示出时钟倒计时的效果,我们需要采用动态扫描以实现静态显示。在单片机里,首先显示一个数,然后关掉,显示第二数数,再关掉,那么将看到连续的数字显示,轮流点亮扫描过程中,每位显示器的点亮时间是极为短暂的(约1ms),由于人的视觉暂留现象及发光二极管的余辉作用,尽管实际上各位显示器并非同时点亮,但只要扫描的速度足够快,给人的印象就是一组稳定的显示数据。1.3矩阵键盘工作原理矩阵按键部分由16个轻触按键按照4x4的方式排列将行线所接的单片机i/o口作为输出端,将列线所接的i/o口作为输入。这样,当按键没有按下时,所有的输出端都是高电平,代表无键按下。行线输出的是低电平,一旦有键按下,则输入线就会被拉低,这样通过读入输入线的状态就可得知是否有按键按下了。确定矩阵式键盘上何键被按下有许多方法,在此次设计中采用了一种行列反转扫描法。相较于行扫描法跟为简单。利用行列的变化,确定出其交点出的按键的按下与否。1.4小喇叭工作原理声音是由震动所产生的,一定频率的震动就产生了一定频率的声音。在倒计时结束时,根据计时结束后每一位都是0,启动设置好的一定频率的脉冲,将脉冲传送到实验箱上的小喇叭,即可实现小喇叭的报警。1.5led灯显示原理在实验要求的基础之上引入了几个led灯作为现象灯,对应于倒计时秒高位为5,4,3,2,时依次点亮,且有一个灯在计时结束后伴随着小喇叭报警声不停闪烁。显示原理,即是在相应的时间点给led低电平可实现点亮,给予方波脉冲实现闪烁。2.系统硬件线路设计图2.1单片机部分 2.2数码管部分2.3矩阵键盘部分2.4小喇叭及led部分2.5x1000实验箱连线3.程序框图分高位显示开始键盘扫描flag1=1键盘扫描flag2=1分低位显示键盘扫描flag3=1秒高位显示键盘扫描flag4=1秒低位显示键盘扫描flag5=1ynnnnyynnnnnyy启动倒计时分秒公式计算单片机赋初值动态扫描实现静态显示单片机重新赋初值秒信号进行减计数检测minute=0&second=0分秒显示值处理检测second=0flag6=1second=60minute-关闭数码管音频输出检测秒高位为5,4,3,2,1对应led=0对应led=1结束ynynny4.资源分配表单片机p0口:连接8段数码管的显示端,即jp51连接jp5,p0.0连接b,p0.1连接f,p0.2连接a,p0.3连接g,p0.4连接d,p0.5连接h,p0.6连接e,p0.7连接c。单片机的p2口:连接8段数码管的控制端,即jp52连接jp8,p2.0到p2.7依次连接控制端的0到7。单片机的p1口:连接矩阵键盘,即jp44连接jp50。单片机的p3口:p3.2连接小喇叭,p3.2连接jp16。p3.3到p3.7连接8路指示灯中的任意5路。5.源程序#include /包含头文件#define uchar unsigned char#define uint unsigned int/定义speaker端口sbit speaker=p32;/依次定义闪烁灯端口sbit led1=p33;sbit led2=p34;sbit led3=p35;sbit led4=p36;sbit led5=p37;/共阳数码管 0-9编码表 code unsigned char tab=0x28,0x7e,0xa2,0x62,0x74,0x61,0x21,0x7a,0x20,0x60; /定义秒和分显示的高低位uchar show_mh,show_ml,show_sh,show_sl;/定义相关变量uchar minute,second,key1,key2,key3,key4,key5,mh,ml,sh,sl;/设置标志位uchar flag1=1,flag2=1,flag3=1,flag4=1,flag5=1,flag6=0;/键盘扫描程序(行列翻转法)uchar keyscan(void);/比较简单的自减延时函数void delay(uint cnt)while(-cnt);/*主函数*/main() /*输入分的高位*/while(flag1)key1=keyscan();/调用键盘扫描,p2=0xfe;/第1个数码管显示 switch(key1)/按下相应的键显示相对应的码值case 0x7e:p0=tab0;mh=0;flag1=0;break;/0 case 0x7d:p0=tab1;mh=1;flag1=0;break;/1case 0x7b:p0=tab2;mh=2;flag1=0;break;/2case 0x77:p0=tab3;mh=3;flag1=0;break;/3case 0xbe:p0=tab4;mh=4;flag1=0;break;/4case 0xbd:p0=tab5;mh=5;flag1=0;break;/5delay(30000); /*输入分的低位*/while(flag2) key2=keyscan();/调用键盘扫描,p2=0xfd;/第2个数码管显示 switch(key2)/按下相应的键显示相对应的码值 case 0x7e:p0=tab0;ml=0;flag2=0;break;/0 case 0x7d:p0=tab1;ml=1;flag2=0;break;/1 case 0x7b:p0=tab2;ml=2;flag2=0;break;/2 case 0x77:p0=tab3;ml=3;flag2=0;break;/3 case 0xbe:p0=tab4;ml=4;flag2=0;break;/4 case 0xbd:p0=tab5;ml=5;flag2=0;break;/5 case 0xbb:p0=tab6;ml=6;flag2=0;break;/6 case 0xb7:p0=tab7;ml=7;flag2=0;break;/7 case 0xde:p0=tab8;ml=8;flag2=0;break;/8 case 0xdd:p0=tab9;ml=9;flag2=0;break;/9 delay(30000); /*输入秒的高位*/while(flag3) key3=keyscan();/调用键盘扫描,p2=0xf7;/第3个数码管显示switch(key3)/按下相应的键显示相对应的码值case 0x7e:p0=tab0;sh=0;flag3=0;break;/0 case 0x7d:p0=tab1;sh=1;flag3=0;break;/1case 0x7b:p0=tab2;sh=2;flag3=0;break;/2case 0x77:p0=tab3;sh=3;flag3=0;break;/3case 0xbe:p0=tab4;sh=4;flag3=0;break;/4case 0xbd:p0=tab5;sh=5;flag3=0;break;/5 delay(30000); /*输入秒的低位*/while(flag4) key4=keyscan();/调用键盘扫描,p2=0xef;/第4个数码管显示switch(key4)/按下相应的键显示相对应的码值case 0x7e:p0=tab0;sl=0;flag4=0;break;/0 case 0x7d:p0=tab1;sl=1;flag4=0;break;/1case 0x7b:p0=tab2;sl=2;flag4=0;break;/2case 0x77:p0=tab3;sl=3;flag4=0;break;/3case 0xbe:p0=tab4;sl=4;flag4=0;break;/4case 0xbd:p0=tab5;sl=5;flag4=0;break;/5case 0xbb:p0=tab6;sl=6;flag4=0;break;/6case 0xb7:p0=tab7;sl=7;flag4=0;break;/7case 0xde:p0=tab8;sl=8;flag4=0;break;/8case 0xdd:p0=tab9;sl=9;flag4=0;break;/9delay(30000);/延时 /*按键启动倒计时*8*/ while(flag5)key5=keyscan();/调用键盘扫描switch(key5)/检测键控信号 case 0xe7:flag5=0;delay(30000);/*分秒计算式*/minute=mh*10+ml;second=sh*10+sl;/*单片机赋初值*/tmod=0x01;/定时器0设置 10ms in 12m crystalth0=0xd8;tl0=0xf0;ie= 0x82;/打开中断t0tr0=1;/*数码管动态扫描实现静态显示*/ while(1)/ p0=show_mh;/显示分十位 p2=0xfe; delay(300); p0=show_ml; /显示分个位 p2=0xfd; delay(300); p0=0xf7; /显示分隔符 p2=0xfb; delay(300); p0=show_sh;/显示秒十位 p2=0xf7; delay(300); p0=show_sl; /显示秒个位 p2=0xef; delay(300); /*/void tim(void) interrupt 1 using 1/定时器t0中断服务程序static uchar count;uchar g,control2,control3,control4,control5;/*单片机赋初值*/th0=0xd8;/赋初值55536tl0=0xf0;count+;/*100x10ms=1s,实现秒信号减计数*/if (count=100)count=0;second-;/秒减1/*检测是否计时结束并对显示值处理*/ if(minute=0 & second=0)show_mh=tabminute/10;/十位显示值处理 show_ml=tabminute%10; /个位显示处理show_sh=tabsecond/10;/十位显示值处理 show_sl=tabsecond%10; /个位显示处理delay(30000);flag6=1;/转向音频输出/*检测秒位是否计时结束并对显示值处理*/else if(second=0 )show_mh=tabminute/10;/十位显示值处理 show_ml=tabminute%10; /个位显示处理show_sh=tabsecond/10;/十位显示值处理 show_sl=tabsecond%10; /个位显示处理second=60;minute-; /*显示值处理*/else show_mh=tabminute/10;/十位显示值处理 show_ml=tabminute%10; /个位显示处理show_sh=tabsecond/10;/十位显示值处理 show_sl=tabsecond%10; /个位显示处理 /*计时结束数码管关闭,喇叭响起,指示灯闪烁*/while(flag6) flag6=1; p0=0;/关闭数码管for(g=0;g200;g+)/音频输出delay(80);speaker=!speaker;led1=!led1;speaker=1;led1=1;delay(20000);/当秒高位变化时5个led轮流闪烁control2=second/10;control3=second/10;con

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论