欢迎来到三一办公! | 帮助中心 三一办公31ppt.com(应用文档模板下载平台)
三一办公
全部分类
  • 办公文档>
  • PPT模板>
  • 建筑/施工/环境>
  • 毕业设计>
  • 工程图纸>
  • 教育教学>
  • 素材源码>
  • 生活休闲>
  • 临时分类>
  • ImageVerifierCode 换一换
    首页 三一办公 > 资源分类 > DOC文档下载  

    单片机课程设计指导书.doc

    • 资源ID:4193872       资源大小:387KB        全文页数:28页
    • 资源格式: DOC        下载积分:8金币
    快捷下载 游客一键下载
    会员登录下载
    三方登录下载: 微信开放平台登录 QQ登录  
    下载资源需要8金币
    邮箱/手机:
    温馨提示:
    用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP免费专享
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    单片机课程设计指导书.doc

    选题一:具有整点报时带闹钟时间可调的数字钟1、目的及意义 掌握单片机开发流程,能够独立完成单片机小系统的开发。学会查找资料,设计硬件电路,编写相应软件,电路调试,撰写设计报告,提高分析问题、解决问题的能力,为以后就业打下坚实的专业基础。2、任务要求1. 数字时钟显示:小时(两位)分钟(两位)秒钟(两位)2. 时间可调,要求时、分、秒都可调3. 可以设定闹铃,当闹铃时间到,蜂鸣器发出闹铃声音。4. 具有整点报时功能。3、设计思路 用内部定时器中断计时,三个两位数码管分别显示秒、分、时,STC89C52芯片P2口控制数码管选通,P0口输出数值显示。P3.5口输出高低电平驱动蜂鸣器做闹钟用。4、实现功能主要通过单片机的内部定时器产生秒时基信号,实现电子时钟功能。主要功能有:时钟功能,闹钟功能,整点报时,闹钟报警,调时,调闹钟等。5、硬件电路图(protel99软件绘制)和仿真图(proteus软件与keil软件联调) 硬件电路图仿真图6、软件设计#include<reg51.h>#define tl 0xba;#define th 0x3c;sbit time=P10;/时间设置sbit timer=P11;/闹钟设置sbit add=P12;/加sbit dec=P13;/减sbit speaker=P37;/闹钟输出bit disp_sd;/数码管闪动显示标志位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 i;for(i=0;i<100;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();P2=0xFF;P0=ledsecond/10;P2=0xFD;delay();P2=0xFF;P0=ledsecond%10;P2=0xFE;delay();P2=0xFF;elseif(time_cc=0x01)if(disp_sdt=1)P0=ledhour/10;elseP0=0x00;P2=0x7F;delay();P2=0xFF;if(disp_sdt=1)P0=ledhour%10;elseP0=0x00;P2=0xBF;delay();P2=0xFF;elseP0=ledhour/10;P2=0x7F;delay();P2=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;elseP0=0x00;P2=0xEF;delay();P2=0xFF;if(disp_sdt=1)P0=ledminit%10;elseP0=0x00;P2=0xF7;delay();P2=0xFF;elseP0=ledminit/10;P2=0xEF;delay();P2=0xFF;P0=ledminit%10;P2=0xF7;delay();P2=0xFF;P0=0x40;P2=0xFB;delay();P2=0xFF;if(time_cc=0x03)if(disp_sdt=1)P0=ledsecond/10;elseP0=0x00;P2=0xFD;delay();P2=0xFF;if(disp_sdt=1)P0=ledsecond%10;elseP0=0x00;P2=0xFE;delay();P2=0xFF;elseP0=ledsecond/10;P2=0xFD;delay();P2=0xFF;P0=ledsecond%10;P2=0xFE;delay();P2=0xFF;elseif(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=ledsecond1/10;P2=0xFD;delay();P2=0xFF;P0=ledsecond1%10;P2=0xFE;delay();P2=0xFF;elseif(timer_cc=0x01)if(disp_sdt=1)P0=ledhour1/10;elseP0=0x00;P2=0x7F;delay();P2=0xFF;if(disp_sdt=1)P0=ledhour1%10;elseP0=0x00;P2=0xBF;delay();P2=0xFF;elseP0=ledhour1/10;P2=0x7F;delay();P2=0xFF;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;elseP0=0x00;P2=0xEF;delay();P2=0xFF;if(disp_sdt=1)P0=ledminit1%10;elseP0=0x00;P2=0xF7;delay();P2=0xFF;elseP0=ledminit1/10;P2=0xEF;delay();P2=0xFF;P0=ledminit1%10;P2=0xF7;delay();P2=0xFF;P0=0x40;P2=0xFB;delay();P2=0xFF;if(timer_cc=0x03)if(disp_sdt=1)P0=ledsecond1/10;elseP0=0x00;P2=0xFD;delay();P2=0xFF;if(disp_sdt=1)P0=ledsecond1%10;elseP0=0x00;P2=0xFE;delay();P2=0xFF;elseP0=ledsecond1/10;P2=0xFD;delay();P2=0xFF;P0=ledsecond1%10;P2=0xFE;delay();P2=0xFF; void key_scan(void)unsigned int i;if(time=0)for(i=0;i<10;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;i<10;i+)display();if(timer=0)do display();while(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;i<10;i+)display();if(add=0) do display(); while(add=0);if(disp_ms=0)switch(time_cc)case (0x01): hour+; if(hour>23) hour=23; break;case (0x02): minit+; if(minit>59) minit=59; break;case (0x03): second+;if(second>59) second=59; break; default: break;elseswitch(timer_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;i<10;i+)display();if(dec=0)do display(); while(dec=0);if(disp_ms=0)switch(time_cc)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;elseswitch(timer_cc)case (0x01): if(hour1=0) hour1=0; else hour1-; break;case (0x02): if(minit1=0) minit1=0; else minit1-; 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=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(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、任务要求主要实现功能:通过温度传感器采集温度,与设定的上限和下限温度进行比较,当超出上下限时则报警并对应的指示灯亮,否则不报警,灯全灭。具体要求:1.报警器显示部分:当前温度显示(1位小数),温度上限显示,温度下限显示(整数),通过按键三者切换显示2.用DS16B20采集温度3.温度上限和下限可以通过按键调整4.当温度超过上限或者下限时报警器鸣叫,对应的超上限或下限灯点亮。3、设计思路 用DS16B20采集温度,STC89C52芯片P2.0P2.3口控制数码管选通,P0口输出数值显示。P3.5口输出电平驱动蜂鸣器做报警用,P2.4口和P2.7口控制两个发光二极管,代表温度超上限和查下限。4、硬件电路图(protel99软件绘制)和仿真图(proteus软件与keil软件联调)Protues图Protel图5. 软件设计#include<reg52.h>#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,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(uchar x)while(x-);void delay_long(uint x)uint i;while(x-)for(i=0;i<125;i+)/延时1ms子程序void delay(uint z)uint x,y;for(x=z;z>0;z-)for(y=80;y>0;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;i>0;i-) DQ = 0; /给脉冲信号 dat>>=1; DQ = 1; /给脉冲信号 if(DQ) dat|=0x80; delay_18B20(10); return(dat); void ds1820wr(uchar wdata)/*写数据*/ unsigned char i=0; for (i=8; i>0; i-) DQ = 0; DQ = wdata&0x01; delay_18B20(10); DQ = 1; wdata>>=1; read_temp()/*读取温度值并转换*/ uchar a,b; ds1820rst(); ds1820wr(0xcc);/*跳过读序列号*/ ds1820wr(0x44);/*启动温度转换*/ ds1820rst(); ds1820wr(0xcc);/*跳过读序列号*/ ds1820wr(0xbe);/*读取温度*/ a=ds1820rd(); b=ds1820rd(); tvalue=b; tvalue<<=8; tvalue=tvalue|a; if(tvalue<0x0fff) tflag=0; else tvalue=tvalue+1; tflag=1; tvalue=tvalue*(0.625);/温度值扩大10倍,精确到1位小数return(tvalue); *void display2(uint x)fge=x%10; /显示ge位 fshi=x%100/10; /显示shi位bai=x%1000/100;/显示百位qin=x%10000/1000;/显示百位 led4=0;P0=disfge;delay_long(2);led4=1;delay_long(2);led3=0;P0=disfshi;dot=1;delay_long(2);led3=1;dot=1;led2=0;P0=disbai;delay_long(2);led2=1;led1=0;P0=disqin;delay_long(2);led1=1;void main()f2=0;mak=1;while(1) delay(1);read_temp();/读取温度final_temp=tvalue;if(mak=1)display2(final_temp);timeset();/HTEMP=10;if(final_temp/10>HTEMP)jiawen=1;baowen=0;bebe=0;elseif(final_temp/10<LTEMP)jiawen=0;baowen=1;bebe=1;/*温度设置*void timeset()if(s4=0)while(!s4);待添加的隐藏文字内容3f2+;if(f2=1) mak=0;led4=0;P0=dis14;delay_long(2);led4=1;tval=set1;setdsplay2();if(s2=0)while(!s2);set1+;if(tval=120)set1=0;if(s3=0)while(!s3);set1-;if(set1=0)set1=120;if(f2=2) HTEMP=set1;mak=0;led4=0;P0=dis15;delay_long(5);led4=1;tval=set2;setdsplay2();if(s2=0)while(!s2);set2+;if(set2=120)set2=0;if(s3=0)while(!s3);set2-;if(set2=0)set2=120;if(f2=3)LTEMP=set2;f2=0;mak=1;void setdsplay2()tge=tval%10; /显示ge位 tshi=tval%100/10; /显示shi位tbai=tval%1000/100;/显示百位led3=0;P0=distge;delay(2);led3=1;delay(2);led2=0;P0=distshi;delay(2);led2=1;delay(2);led1=0;P0=distbai;delay(2);led1=1;delay(2);5、硬件实现选题三:步进电机控制1、目的及意义 掌握单片机开发流程,能够独立完成单片机小系统的开发。学会查找资料,设计硬件电路,编写相应软件,电路调试,撰写设计报告,提高分析问题、解决问题的能力,为以后就业打下坚实的专业基础。2、任务要求主要实现功能及任务要求:单片机的P0口通过驱动器件ULN2003驱动五线四相制微型步进电机,当接在P3口的按键s1按下时,步进电机正转;按键s2按下时,步进电机反转;s3按下时,加速;s4按下时,减速;s5按下时,步进电机停止工作。3、设计思路 用五线四相制微型步进电机,通过驱动芯片ULN2003与STC89C52单片机的P0.0P0.3相连,P0口要有上拉电阻,单片机P3.0P3.4分别接独立式按键s1s5,用于控制步进电机的运行状态。4、硬件电路图(protel99软件绘制)和仿真图(proteus软件与keil软件联调)5、软件设计#include<reg51.h>#define uchar unsigned char#define uint unsigned int uchar code CCW8=0x08,0x0c,0x04,0x06,0x02,0x03,0x01,0x09; /逆时钟旋转相序表uchar code CW8= 0x09,0x01,0x03,0x02,0x06,0x04,0x0c,0x08; /正时钟旋转相序表uchar steptime=7;/初值为15msuchar r; sbit zheng=P30; /正转按键sbit fan=P31; /反转按键sbit stop=P34; /停止按键 sbit add=P32;/中断方式,外部中断0sbit dec=P33; /中断方式,外部中断1 uchar z_f=0;void delaynms(uchar z) /nms延时 uchar x,y; for(x=z;x>0;x-) for(y=0;y<115;y+); /1ms基准延时 void motor_ccw(void)uchar i,j;for(j=0;j<8;j+) /电机旋转一周,不是外面所看到的一周,是里面的传动轮转了一周 if(stop=0) break; /如果stop按下,退出此循环for(i=0;i<8;i+) /旋转45度 P0=CCWi;delaynms(steptime); /延时,用于调节转速 void motor_cw(void) uchar i,j; for(j=0;j<8;j+) if(stop=0) break; /如果stop按下,退出此循环for(i=0;i<8;i+) /旋转45度 P0=CWi;delaynms(steptime); /延时,用于调节转速 void main(void) /uchar N=64; /因为步进电机是减速步进电机,减速比的1/64 , /所以N=64时,步进电机主轴转一圈 EA=1; /IT0=1;/脉冲方式EX0=1;/开外部中断0:加速/IT1=1;/脉冲方式EX1=1;/开外部中断1:减速 while(1)if(zheng=0) z_f=1; while(1) motor_ccw(); /电机逆转 if(stop=0) break; if(fan=0) z_f=2; while(1) motor_cw(); /电机反转 if(stop=0)

    注意事项

    本文(单片机课程设计指导书.doc)为本站会员(仙人指路1688)主动上传,三一办公仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知三一办公(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    备案号:宁ICP备20000045号-2

    经营许可证:宁B2-20210002

    宁公网安备 64010402000987号

    三一办公
    收起
    展开