ImageVerifierCode 换一换
格式:DOCX , 页数:18 ,大小:578.49KB ,
资源ID:2877720      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bingdoc.com/d-2877720.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(合肥学院proteus仿真大赛 小时钟.docx)为本站会员(b****2)主动上传,冰点文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰点文库(发送邮件至service@bingdoc.com或直接QQ联系客服),我们立即给予删除!

合肥学院proteus仿真大赛 小时钟.docx

1、合肥学院proteus仿真大赛 小时钟合肥学院proteus仿真大赛报告 设计题目: proteus仿真小时钟 系 别: 电子信息与电气工程系 成员信息:赵鹏飞 1005072024 10级电子信息工程2班朱奎 1005074037 10级电子信息工程2班 2013年 4月 10 日目录一、引言 3二、方案设计 31、方案选择 32、方案确定 3三、总体设计 41.整体电路设计 42程序设计 43单元电路设计 43.1晶振电路 43.2复位电路 43.3主芯片部分 53.4按键设置部分 53.5显示部分 6四、电路测试 7五、结论 7六、参考文献 7七、附录 81整体电路图 82程序流程图 8

2、3中断流程图 94整体测试电路图 95软件程序代码 10一、引言 本设计利用两片AT89C51单片机,进行串行通信串行口工作方式为方式1的全双工串行通信,并且利用数码管7SEG-COM-CAT-GRN显示出传送的数据。AT89C51内置一个全双工串行通信口,利用两单片机互相发送控制命令字符,并接收其发送的数字,同时在数码管上显示。二、方案设计1、方案选择方案一:AT89C51是一种带4K字节FLASH存储器的低电压、高性能CMOS 8位单片机, 能提供以下标准功能:4k 字节Flash 闪速存储器,128字节内部RAM,32 个I/O 口线,两个16位定时/计数器,一个5向量两级中断结构,一个

3、全双工串行通信口,片内振荡器及时钟电路。同时,AT89C51可降至0Hz的静态逻辑操作,并支持两种软件可选的节电工作模式。空闲方式停止CPU的工作,但允许RAM,定时/计数器,串行通信口及中断系统继续工作。方案二:80C51单片机属于MCS-51系列单片机,由Intel公司开发,其结构是8048的延伸,改进了8048的缺点,增加了如乘(MUL)、除(DIV)、减(SUBB)、比较(PUSH)、16位数据指针、布尔代数运算等指令,以及串行通信能力和5个中断源。采用40引脚双列直插式DIP(Dual In Line Package),内有128个RAM单元及4K的ROM。80C51有两个16位定时

4、计数器,两个外中断,两个定时计数中断,及一个串行中断,并有4个8位并行输入口。80C51内部有时钟电路,但需要石英晶体和微调电容外接。2、方案确定鉴于89C51是CMOS工艺、8051是NMOS工艺制造(80C51则是CMOS工艺制造),而CMOS工艺制造的功耗更加小。89C51的内部ROM是FLASH-ROM,可多次更新改写(相当于8751,不过8751是EEROM),而8051一般是掩膜ROM,不可更新改写。并且89C51提供一个全双工串行通信口,基于题目要求,我们选择方案一。三、总体设计1.整体电路设计 利用AT89C51单片机、7SEG-COM-CAT-GRN数码管、button按钮开

5、关等元器件组成整体仿真电路。整体电路图见附录。2程序设计甲单片机向乙机发送控制命令字符,同时接收乙机发送的数字,当乙单片机的开关K2按下一次时,就向甲单片机发送一次数据,甲单片机上数码管显示接收的数据。乙单片机向甲机发送控制命令字符,同时接收甲机发送的数字,当甲单片机的开关K1按下一次时,就向乙单片机发送一次数据,乙单片机上数码管显示接收的数据。 程序流程图和程序代码见附录。3单元电路设计3.1晶振电路本设计中的振荡电路如下图所示。3.2复位电路MCS-51单片机的复位是由外部的复位电路来实现的。复位引脚RST通过一个斯密特触发器与复位电路相连,斯密特触发器用来抑制噪声,在每个机器周期的S5P

6、2,斯密特触发器的输出电平由复位电路采样一次,然后才能得到内部复位操作所需要的信号。上电复位:上电复位电路是种简单的复位电路,只要在RST复位引脚接一个电容到VCC,接一个电阻到地就可以了。电路如下图所示3.3主芯片部分本设计使用AT89C51单片机作为主控芯片。电路如下图所示3.4按键设置部分本设计总的用了两个按扭开关,用于设置状态和调整输出的数据。电路如下图所示3.5显示部分本设计采用7SEG-COM-CAT-GRN数码管显示。电路如下图所示四、电路测试1当甲机开关K1按下一次时,就向乙机发送一次数据,把09十个数循环发送到乙机数码管上显示。2. 当乙机的开关K1按下一次时,就向甲机发送一

7、次数据,把09十个数循环发送到甲机数码管上显示。整体测试电路见附录。五、结论单片机技术是现代电子工业中不可缺少的一项技术,掌握单片机技术是产品开发的重要条件,Proteus 在单片机应用产品研发中有着非常重要的作用。是产品研发的高效、经济、可靠的单片机系统设计与仿真平台。基于 Proteus的单片机虚拟开发环境有利于提高产品的开发效率;利用仿真系统,不但可以节约开发时间和开发成本,而且还具有很大的灵活性和可扩展性,相信随着越来越多的人对Proteus的了解和使用,它会对我们的学习、科研和工作带来越来越多的帮助。六、参考文献 1 彭伟 单片机C语言程序设计实训100例基于8051+Proteus

8、仿真 电子工业出版社2 周润景 张丽娜 刘映群 proteus入门实用教程 北京:机械工业出版社 2007年9月 七、附录1整体电路图2程序流程图3中断流程图4整体测试电路图5软件程序代码/*数字钟程序*/#include #define uchar unsigned charsbit buzzer=P27; /定义蜂鸣器控制端口/*函数声明*/void display(uchar *p);uchar keyscan(); /扫描键盘有无键按下uchar search(); /按键识别void alarm(); /闹钟判断启动void ftion0(); /时钟修改void ftion1();

9、 /闹钟修改void cum(); /加1修改/*全局变量定义*/uchar clockbuf3=0,0,0;/存放时钟时分秒的十进制数uchar bellbuf3=0,0,0;/存放闹钟时分秒的十进制数uchar msec1; /10ms中断次数uchar msec2; /1s循环次数uchar timdata,rtimdata; /时钟和闹钟修改位置标志uchar count; /闹钟启动后10s计时单元uchar *dis_p; /显示缓冲区指针bit armbit;/闹钟标志,为0闹钟未设定,为1已设定bit rtimbit;/闹钟是否启动标志,为1已启动bit rhourbit;/闹

10、钟小时修改标志,为1正在修改闹钟小时bit rminbit;/闹钟分修改标志,为1正在修改闹钟分bit hourbit;/时钟小时修改标志,为1正在修改时钟小时bit minbit;/时钟分修改标志,为1正在修改时钟分bit secbit;/时钟秒修改标志,为1正在修改时钟秒/*主函数*/void main() uchar a; armbit=0; /清零闹钟标志位 msec1=0; /设置10ms中断次数初值 msec2=0; /设置1s中断次数初值 timdata=0; /时钟内容修改位置记忆单元清零 rtimdata=0;/闹钟内容修改位置记忆单元清零 count=0; /闹钟启动后保持

11、10s计时单元清零 TMOD=0x02; /定时器T0为工作方式2 TL0=0x06; /定时初始值为250us TH0=0x06; EA=1; /中断总允许位开启 ET0=1; /定时器1开中断 TR0=1; /启动定时器T0 dis_p=clockbuf;/将时钟值所在地址送入显示指针 P1=0x00;buzzer=0; while(1) a=keyscan(); /调用键盘扫描子程序 if(a=0x07) display(dis_p);/无键输入调用显示程序 if(armbit=1)alarm();/判断闹钟设定否,若设定则调用闹钟启动函数 else display(dis_p);/调用

12、显示子函数作为延时去抖动 a=keyscan(); if(a!=0x07) /没有抖动,表示有键按下 a=search(); /调用查键值子函数 switch(a) case 0x00:ftion0();break;/是时钟参数修改功能键,调用时钟设置子函数 case 0x01:ftion1();break;/是闹钟参数修改功能键,调用闹钟设置子函数 case 0x02:cum();break;/是加1功能键,调用加1修改功能子函数 default:break; /*6位LED显示函数*/void display(uchar *p) uchar buffer6=0,0,0,0,0,0; uch

13、ar k,i,j,m,temp; uchar led=0x3f,0x06,0x5b,0x4f,0x66, 0x6d,0x7d,0x07,0x7f,0x6f; buffer0=p0/10; buffer1=p0%10; buffer2=p1/10; buffer3=p1%10; buffer4=p2/10; buffer5=p2%10; for(k=0;k2;k+) temp=0x01; for(i=0;i6;i+) j=bufferi; P0=temp; P1=ledj; /P1送断码 temp=1; for(m=0;m100;m+);/每一位显示延时 P1=0x00; /关显示 /*键盘扫描

14、函数*/uchar keyscan() uchar c; P0=0xf0; c=P2; c=c&0x07;/按键行输入为P2.0-P2.2,屏蔽无关位 return(c);/*查键值函数*/uchar search() uchar a,b,c,d,e; /P2=0xfe; c=0xfe; /首列扫描字送变量c a=0; /首列号送a while(1) P0=c; /列扫描字送P0口 d=P2; /读入P2口的行状态 if(d&0x01)=0)b=0;break;/第0行有键按下,第0行行首号送b else if(d&0x02)=0)b=4;break;/第1行有键按下,第1行行首号送b els

15、e if(d&0x04)=0)b=8;break;/第2行有键按下,第2行行首号送b a+; /扫描列号加1 c=1; /修改列扫描字,扫描下一列 e=a+b; /将行首号与列号相加,求键号 dodisplay(dis_p); while(d=keyscan()!=0x07);/等待释放按键 return(e);/*闹钟判断启动函数*/void alarm() if(clockbuf0=bellbuf0)&(clockbuf1=bellbuf1) buzzer=1;rtimbit=1;/设置闹钟计时标志,时钟将进行10s计时标志 if(count=10) /判断闹钟保持10s时间到否 coun

16、t=0; /清除闹钟保持10s计时 buzzer=0; /清除闹钟 armbit=0; /清闹钟标志,否则闹钟设置将继续有效 rtimbit=0; /*时钟设置函数*/void ftion0() if(rhourbit=1|rtimbit=1|rtimdata=1) secbit=0;minbit=0;hourbit=0;timdata=0; else TR0=0; /关定时器 dis_p=clockbuf;/将时钟缓冲区首地址送显示指针 timdata+; /将时钟修改记录值加1 switch(timdata) case 0x01:secbit=1;break;/记录值为1,则将时钟秒修改标

17、志置1 case 0x02:secbit=0;minbit=1;break;/记录值为2,则将时钟分修改标志置1 case 0x03:minbit=0;hourbit=1;break;/记录值3,则将时钟时修改标志置1 case 0x04:timdata=0;hourbit=0;TR0=1;break;/按4次则清时钟单元修改位置 /记录,定时器重新开启 default:break; /*闹钟设置函数*/void ftion1() if(secbit=1|minbit=1|hourbit=1|timdata=1) rhourbit=0;rtimbit=0;rtimdata=0; else di

18、s_p=bellbuf; /设置闹钟显示标志 rtimdata+; /将闹钟修改记录值加1 switch(rtimdata) case 0x01:rminbit=1;break;/记录值为1,将闹钟分修改标志置1 case 0x02:rminbit=0;rhourbit=1;break; /记录值为2,将时钟分修改标志置1 case 0x03:rtimdata=0;rhourbit=0;/按3次则清闹钟单元修改位置记录 armbit=1; /设置闹钟已设置标志位 dis_p=clockbuf;/恢复时钟显示标志 break; default:break; /*加1修改功能函数*/void cu

19、m() if(secbit=1) /时钟秒修改标志为1,秒单元内容加1 if(clockbuf2=59) clockbuf2=0; else clockbuf2+; else if(minbit=1) /时钟分修改标志为1,分单元内容加1 if(clockbuf1=59) clockbuf1=0; else clockbuf1+; else if(hourbit=1) /时钟小时修改标志为1,小时单元内容加1 if(clockbuf0=23) clockbuf0=0; else clockbuf0+; else if(rminbit=1) /闹钟分修改标志为1,分单元内容加1 if(bellb

20、uf1=59) bellbuf1=0; else bellbuf1+; else if(rhourbit=1) /闹钟小时修改标志为1,小时单元内容加1 if(bellbuf0=23) bellbuf0=0; else bellbuf0+;/*定时器中断函数*/void clock() interrupt 1 EA=0; /关中断 if(msec1!=40) msec1+; else msec1=0; /到10ms否,不到则msec1加1 if(msec2!=10)msec2+;/到1s否,不到则msec2加1 else if(rtimbit=1)count+;msec2=0; if(clockbuf2!=59)clockbuf2+;/到1min否,不到则clockbuf2加1 else clockbuf2=0; if(clockbuf1!=59)clockbuf1+;/到1h否,不到则clockbuf1加1 else clockbuf1=0; if(clockbuf0!=23) clockbuf0+; /到24h否,不到则clockbuf0加1 else clockbuf0=0; EA=1; /开中断

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2