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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

本文(单片机课程设计指导书 精品.docx)为本站会员(b****3)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

单片机课程设计指导书 精品.docx

1、单片机课程设计指导书 精品选题一:具有整点报时带闹钟时间可调的数字钟1、目的及意义 掌握单片机开发流程,能够独立完成单片机小系统的开发。学会查找资料,设计硬件电路,编写相应软件,电路调试,撰写设计报告,提高分析问题、解决问题的能力,为以后就业打下坚实的专业基础。2、任务要求1. 数字时钟显示:小时(两位)分钟(两位)秒钟(两位)2. 时间可调,要求时、分、秒都可调3. 可以设定闹铃,当闹铃时间到,蜂鸣器发出闹铃声音。4. 具有整点报时功能。3、设计思路 用内部定时器中断计时,三个两位数码管分别显示秒、分、时,STC89C52芯片P2口控制数码管选通,P0口输出数值显示。P3.5口输出高低电平驱

2、动蜂鸣器做闹钟用。4、实现功能主要通过单片机的内部定时器产生秒时基信号,实现电子时钟功能。主要功能有:时钟功能,闹钟功能,整点报时,闹钟报警,调时,调闹钟等。5、硬件电路图(protel99软件绘制)和仿真图(proteus软件与keil软件联调) 硬件电路图仿真图6、软件设计#include#define tl 0xba;#define th 0x3c;sbit time=P10; /时间设置sbit timer=P11; /闹钟设置sbit add=P12; /加sbit dec=P13; /减sbit speaker=P37; /闹钟输出 bit disp_sd; /数码管闪动显示标志位

3、bit disp_ms; /数码管显示时间/闹钟标志位bit disp_sdt; /数码管闪动间隔反转标志位unsigned char code led=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f; /数字0-9的编码unsigned char time_cc,timer_cc; /调时计数器unsigned char count0,count1,second,minit,hour; /时间时分秒unsigned char second1,minit1,hour1; /闹钟时分秒void delay(void) unsigned int

4、i; for(i=0;i100;i+);void display(void) if(disp_ms=0) if(disp_sd=0) P0=ledhour/10; P2=0x7F; delay(); P2=0xFF; P0=ledhour%10; P2=0xBF; delay(); P2=0xFF; P0=0x40; P2=0xDF; delay(); P2=0xFF; P0=ledminit/10; P2=0xEF; delay(); P2=0xFF; P0=ledminit%10; P2=0xF7; delay(); P2=0xFF; P0=0x40; P2=0xFB; delay();

5、P2=0xFF; P0=ledsecond/10; P2=0xFD; delay(); P2=0xFF; P0=ledsecond%10; P2=0xFE; delay(); P2=0xFF; else if(time_cc=0x01) if(disp_sdt=1) P0=ledhour/10; else P0=0x00; P2=0x7F; delay(); P2=0xFF; if(disp_sdt=1) P0=ledhour%10; else P0=0x00; P2=0xBF; delay(); P2=0xFF; else P0=ledhour/10; P2=0x7F; delay(); P

6、2=0xFF; P0=ledhour%10; P2=0xBF; delay(); P2=0xFF; P0=0x40; P2=0xDF; delay(); P2=0xFF; if(time_cc=0x02) if(disp_sdt=1) P0=ledminit/10; else P0=0x00; P2=0xEF; delay(); P2=0xFF; if(disp_sdt=1) P0=ledminit%10; else P0=0x00; P2=0xF7; delay(); P2=0xFF; else P0=ledminit/10; P2=0xEF; delay(); P2=0xFF; P0=le

7、dminit%10; P2=0xF7; delay(); P2=0xFF; P0=0x40; P2=0xFB; delay(); P2=0xFF; if(time_cc=0x03) if(disp_sdt=1) P0=ledsecond/10; else P0=0x00; P2=0xFD; delay(); P2=0xFF; if(disp_sdt=1) P0=ledsecond%10; else P0=0x00; P2=0xFE; delay(); P2=0xFF; else P0=ledsecond/10; P2=0xFD; delay(); P2=0xFF; P0=ledsecond%1

8、0; P2=0xFE; delay(); P2=0xFF; else if(disp_sd=0) P0=ledhour1/10; P2=0x7F; delay(); P2=0xFF; P0=ledhour1%10; P2=0xBF; delay(); P2=0xFF; P0=0x40; P2=0xDF; delay(); P2=0xFF; P0=ledminit1/10; P2=0xEF; delay(); P2=0xFF; P0=ledminit1%10; P2=0xF7; delay(); P2=0xFF; P0=0x40; P2=0xFB; delay(); P2=0xFF; P0=le

9、dsecond1/10; P2=0xFD; delay(); P2=0xFF; P0=ledsecond1%10; P2=0xFE; delay(); P2=0xFF; else if(timer_cc=0x01) if(disp_sdt=1) P0=ledhour1/10; else P0=0x00; P2=0x7F; delay(); P2=0xFF; if(disp_sdt=1) P0=ledhour1%10; else P0=0x00; P2=0xBF; delay(); P2=0xFF; else P0=ledhour1/10; P2=0x7F; delay(); P2=0xFF;

10、P0=ledhour1%10; P2=0xBF; delay(); P2=0xFF; P0=0x40; P2=0xDF; delay(); P2=0xFF; if(timer_cc=0x02) if(disp_sdt=1) P0=ledminit1/10; else P0=0x00; P2=0xEF; delay(); P2=0xFF; if(disp_sdt=1) P0=ledminit1%10; else P0=0x00; P2=0xF7; delay(); P2=0xFF; else P0=ledminit1/10; P2=0xEF; delay(); P2=0xFF; P0=ledmi

11、nit1%10; P2=0xF7; delay(); P2=0xFF; P0=0x40; P2=0xFB; delay(); P2=0xFF; if(timer_cc=0x03) if(disp_sdt=1) P0=ledsecond1/10; else P0=0x00; P2=0xFD; delay(); P2=0xFF; if(disp_sdt=1) P0=ledsecond1%10; else P0=0x00; P2=0xFE; delay(); P2=0xFF; else P0=ledsecond1/10; P2=0xFD; delay(); P2=0xFF; P0=ledsecond

12、1%10; P2=0xFE; delay(); P2=0xFF; void key_scan(void) unsigned int i; if(time=0) for(i=0;i10;i+) display(); if(time=0) TR0=0; do display(); while(time=0); disp_sd=1; disp_ms=0; time_cc+; if(time_cc=4) TR0=1; time_cc=0; disp_sd=0; if(timer=0) for(i=0;i10;i+) display(); if(timer=0) do display(); while(

13、timer=0); disp_sd=1; /数码管闪动显示 disp_ms=1; /显示模式为闹钟时间 timer_cc+; if(timer_cc=4) timer_cc=0; disp_sd=0; /闪动关闭 disp_ms=0; /切换到时间模式 if(add=0) for(i=0;i23) hour=23; break; case (0x02): minit+; if(minit59) minit=59; break; case (0x03): second+;if(second59) second=59; break; default: break; else switch(time

14、r_cc) case (0x01): if(hour1=23) hour1=23; else hour1+; break; case (0x02): if(minit1=59) minit1=59; else minit1+; break; case (0x03): if(second1=59) second1=59; else second1+; break; default:break; if(dec=0) for(i=0;i10;i+) display(); if(dec=0) do display(); while(dec=0); if(disp_ms=0) switch(time_c

15、c) case (0x01): if(hour=0) hour=0; else hour-; break; case (0x02): if(minit=0) minit=0; else minit-; break; case (0x03): if(second=0) second=0; else second-; break; default: break; else switch(timer_cc) case (0x01): if(hour1=0) hour1=0; else hour1-; break; case (0x02): if(minit1=0) minit1=0; else mi

16、nit1-; break; case (0x03): if(second1=0) second1=0; else second1-; break; default: break; void timer_alam(void) if(disp_ms=0)&(disp_sd=0) /正常运行时间的状态下 if(hour1=hour)&(minit1=minit) speaker=disp_sdt; /*主函数* void main(void) second=0x00; /时间初始化为12:00:00 minit=0x00; hour=12; count0=0x00; count1=0x00; P1=

17、0xFF; TMOD=0x11; TL0=tl; TH0=th; TL1=tl; TH1=th; EA=1; ET0=1; ET1=1; TR0=1; TR1=1; while(1) key_scan(); display(); timer_alam(); /*中断服务函数*void time0_int(void) interrupt 1 TL0=tl; TH0=th; TR0=1; count0+; if(count0=20) count0=0; second+; if(second=60) second=0; minit+; if(minit=60) minit=0; hour+; if(

18、hour=24) hour=0; /*中断服务函数*void time1_int(void) interrupt 3 TL1=tl; TH1=th; TR1=1; count1+; if(count1=10) count1=0; disp_sdt=disp_sdt; 7、硬件实现选题二:温度控制器的设计1、目的及意义 掌握单片机开发流程,能够独立完成单片机小系统的开发。学会查找资料,设计硬件电路,编写相应软件,电路调试,撰写设计报告,提高分析问题、解决问题的能力,为以后就业打下坚实的专业基础。2、任务要求主要实现功能:通过温度传感器采集温度,与设定的上限和下限温度进行比较,当超出上下限时则报警

19、并对应的指示灯亮,否则不报警,灯全灭。具体要求:1.报警器显示部分:当前温度显示(1位小数),温度上限显示,温度下限显示(整数),通过按键三者切换显示2.用DS16B20采集温度3.温度上限和下限可以通过按键调整4.当温度超过上限或者下限时报警器鸣叫,对应的超上限或下限灯点亮。3、设计思路 用DS16B20采集温度,STC89C52芯片P2.0P2.3口控制数码管选通,P0口输出数值显示。P3.5口输出电平驱动蜂鸣器做报警用,P2.4口和P2.7口控制两个发光二极管,代表温度超上限和查下限。4、硬件电路图(protel99软件绘制)和仿真图(proteus软件与keil软件联调)Protues

20、图Protel图5. 软件设计#include#define uchar unsigned char#define uint unsigned int sbit s2=P11;sbit s3=P12;sbit s4=P13;sbit led1=P20; sbit led2=P21;sbit led3=P22;sbit led4=P23;sbit dot=P07;sbit bebe=P35;sbit baowen=P24;sbit jiawen=P27;#define time 0x8Euchar code dis=0x3F,0X06,0X5b,0X4f,0x66,0x6d,0x7d,0x07,

21、0x7f,0x6f,0x00,0x40, 0X63,0X39, 0X01,0X08;/共阴数码管0-9,灭,-编码uchar sav1,fav1,bai,qin,f2,tval,tge,tshi,tbai,mak,HTEMP,LTEMP,va1,mge,mshi,fge,fshi,temp_high,temp_low,set1,set2;uint final_temp;uint tvalue; uchar tflag;/温度正负标志sbit DQ=P34;void delayMs(uint a); void timeset();void setdsplay2();void delayus(uc

22、har x) while(x-);void delay_long(uint x) uint i; while(x-) for(i=0;i0;z-) for(y=80;y0;y-); /* /*ds1820程序*/ void delay_18B20(unsigned int i)/延时1微秒 while(i-);void ds1820rst()/*ds1820复位*/ unsigned char x=0; DQ = 1; /DQ复位 delay_18B20(4); /延时 DQ = 0; /DQ拉低 delay_18B20(70); /精确延时大于480us DQ = 1; /拉高 delay_18B20(40); uchar ds1820rd()/*读数据*/ unsigned char i=0; unsigned char dat = 0; for (i=8;i0;i-) DQ = 0; /给

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1