![单片机课程设计实验报告_第1页](http://file4.renrendoc.com/view/5fe4f2c831444cdaaa1ee993ed81427a/5fe4f2c831444cdaaa1ee993ed81427a1.gif)
![单片机课程设计实验报告_第2页](http://file4.renrendoc.com/view/5fe4f2c831444cdaaa1ee993ed81427a/5fe4f2c831444cdaaa1ee993ed81427a2.gif)
![单片机课程设计实验报告_第3页](http://file4.renrendoc.com/view/5fe4f2c831444cdaaa1ee993ed81427a/5fe4f2c831444cdaaa1ee993ed81427a3.gif)
![单片机课程设计实验报告_第4页](http://file4.renrendoc.com/view/5fe4f2c831444cdaaa1ee993ed81427a/5fe4f2c831444cdaaa1ee993ed81427a4.gif)
![单片机课程设计实验报告_第5页](http://file4.renrendoc.com/view/5fe4f2c831444cdaaa1ee993ed81427a/5fe4f2c831444cdaaa1ee993ed81427a5.gif)
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
成都理工大学学院:核技术与自动化工程学院专业:电气工程及其自动化班级:2011级电气二班学号:201106050228姓名:薛成成指导教师:任家富目录引言—本课程设计的目的………..……………1Led流水灯.....................................................................22.1上机程序..…….………….3三、数码管循环显示实验…..………….....................43.1上机程序..…………..……5四、键盘的操作实验………………64.1上机程序…………………7五、实验总结...………….9六、参考文献…………..………………10摘要:由于单片机体积小、成本低、使用方便,所以被广泛地应用于仪器仪表、现场数据的采集和控制。通过本次课程设计掌握单片机硬件和软件方面的知识,更深入的了解单片机的实际应用。关键词:单片机,程序,流水灯,数码管,温度计,键盘扫描,定时器等。一、引言—本课程设计的目的以本学期对单片机的学习和认识,并通过本次课程设计加以应用,从而达到一个对所学知识的巩固、更深一步的理解,面对一个电子设计,应对出系统的方案,分析出各个板块来,再对各个板块进一步的具体的设计,先进行硬件电路设计,此时一定要考虑好要用什么元件、各个元件的具体参数、是否能实现应有功能,从而得到一个完整的硬件电路。在根据该电路设计出软件的功能模块、从而完成程序流程图,在根据流程图完成程序的设计,并通过反复的调试、运行、更正,直至完成既定功能为止,最后将软件、硬件结合进行调试、运行,对其功能进行最终测试,并反复思考其测试中遇到相应问题的原因,并将其一一处理,从而完成本次设计的实验要求,以及本次课程设计的最终目的。实验一实验要求:本次实验实现的是小灯的闪烁,流水灯可以按照程序规定的要求进行闪烁。实验程序设计#include<reg52.h>//52单片机头文件#include<intrins.h>//包含有左右循环移位子函数的库#defineuintunsignedint//宏定义#defineucharunsignedchar//宏定义uintflag=0;voiddelay(uintz)//延时函数,z的取值为这个函数的延时ms数,如delay(200);大约延时200ms.{//delay(500);大约延时500ms.uintx,y;for(x=z;x>0;x--)for(y=110;y>0;y--);}voidinit(){TMOD=0X01;TH0=(65536-50000)/256;TL0=(65536-50000)%256;TR0=1;ET0=1;EA=1;}voidmain()//主函数{init();while(1){uchara,i,j;if(flag==1){for(j=0;j<3;j++)//寄偶交替{P1=0x55;//点亮小灯delay(300);//延时300毫秒P1=0xaa;delay(300);//延时300毫秒}for(j=0;j<3;j++)//流水灯{a=0xfe;for(i=0;i<8;i++){P1=a;//点亮小灯delay(300);//延时300毫秒a=_crol_(a,1);}}P1=0xff;for(j=0;j<3;j++)//从两边往中间流{P1=0x7e;//点亮小灯delay(300);//延时300毫秒P1=0xbd;delay(300);//延时300毫秒P1=0xdb;//点亮小灯delay(300);//延时300毫秒P1=0xe7;delay(300);//延时300毫秒}P1=0xff;for(j=0;j<3;j++)//从中间往两边流{P1=0xe7;//点亮小灯delay(300);//延时300毫秒P1=0xdb;delay(300);//延时300毫秒P1=0xbd;//点亮小灯delay(300);//延时300毫秒P1=0x7e;delay(300);//延时300毫秒}P1=0xff;for(j=0;j<6;j++)//全部闪烁{P1=~P1;//点亮小灯delay(300);//延时300毫秒}P1=0xff;flag=0;}}}voidtimer()interrupt1{flag=1;}实验心得体会:通过本次实验一步一步的进行实验,设计程序,写入中断来实现流水灯的全部实验要求。实验二实验要求:通过上一次流水灯的实验本次进行了数码管的实验,通过原理图了解数码管的性质。设计程序#include<reg52.h>#include<intrins.h>#include<absacc.h>#include<stdio.h>#defineWR273XBYTE[0XC000]#defineRD244XBYTE[0XC000]#defineucharunsignedchar#defineuintunsignedintsbitDQ=P1^0;uintcount=0,x,buf[20],tim,flag;ucharfen,shi;ucharcodetable_16_1[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e};ucharcodetable_16_2[]={0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10,0x08,0x03,0x46,0x21,0x06,0x0e};voidled_clc(void){ XBYTE[0X8000]=0XFF; XBYTE[0X9000]=0XFF; XBYTE[0XA000]=0XFF; XBYTE[0XB000]=0XFF;}voiddelay(unsignedinti){ while(i--);}voiddelay_1ms(uintz){ uinti,j; for(i=z;i>0;i--) for(j=110;j>0;j--);}ucharkey_test(){ WR273=0XF0; if((RD244&0X0F)!=0X0F)return1; elsereturn0;}voidserial_init(){ TMOD=0x20; TH1=0xfd; TL1=0xfd; TR1=1; REN=1; SM0=0; SM1=1; EA=1; ES=1; }voidput_char(uchars){ SBUF=s; while(TI==0); TI=0;}voidput_string(uchar*s){ while(*s) { put_char(*s); s++; }利用汇编实现数码管显示:ORG0000HLJMPMAINORG0030HEXTRNDATA(BUFFER);DBBUFFER,30H;DBBUFFER+2,32H;DBBUFFER+3,33HMAIN:LCALLCLS;LCALLDISP;MOVBUFFER,#30H;MOVBUFFER+1,#31H;MOVBUFFER+2,#33H;MOVBUFFER+3,#35HLCALLPRINTST:LJMPSTCLS:MOVA,#0FFHMOVDPTR,#8000HMOVX@DPTR,AMOVDPTR,#9000HMOVX@DPTR,AMOVDPTR,#0A000HMOVX@DPTR,AMOVDPTR,#0B000HMOVX@DPTR,ARET;DISP:;MOVA,BUFFER;MOVDPTR,#8000H;MOVX@DPTR,A;MOVA,BUFFER+1;MOVDPTR,#9000H;MOVA,BUFFER+2;MOVDPTR,#0A000H;MOVX@DPTR,A;MOVA,BUFFER+3;MOVDPTR,#0B000H;MOVX@DPTR,A;RETPRINT:PUSHPSWCLRCMOVBUFFER,#30HMOVA,BUFFERSUBBA,#30HMOVDPTR,#TABLEDMOVCA,@A+DPTRMOVDPTR,#0B000HMOVX@DPTR,AMOVBUFFER+1,#31HMOVA,BUFFER+1SUBBA,#30HMOVDPTR,#TABLEDMOVCA,@A+DPTRMOVDPTR,#0A000HMOVX@DPTR,AMOVBUFFER+2,#33HMOVA,BUFFER+2SUBBA,#30HMOVDPTR,#TABLEDMOVCA,@A+DPTRMOVDPTR,#09000HMOVX@DPTR,AMOVBUFFER+3,#34HMOVA,BUFFER+3SUBBA,#30HMOVDPTR,#TABLEDMOVCA,@A+DPTRMOVDPTR,#08000HMOVX@DPTR,APOPPSWRETTABLED:DB0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80HDB90H,88H,83H,0C6H,0A1H,86H,84H,0FFH,8CHDB0BFHTABLED1:DB0C0H,0F9H,64H,70H,59H,52H,42H,0F8H,40HDB50H,48H,43H,0C6H,61H,46H,4EH,0FFH,4CHDB7FHend实验心得体会:本次实验利用了c语言与汇编的对比,进行的简单的实验过程。更好的为以后程序设计奠定了基础。实验三实验要求:通过本次实验实现对键盘的控制,操作数码管的显示数字。实验程序:#include<reg52.h>#include<intrins.h>#include<absacc.h>#include<stdio.h>#defineWR273XBYTE[0XC000]#defineRD244XBYTE[0XC000]#defineucharunsignedchar#defineuintunsignedintsbitDQ=P1^0;uintcount=0,x,buf[20],tim,flag;ucharfen,shi;ucharcodetable_16_1[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e};ucharcodetable_16_2[]={0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10,0x08,0x03,0x46,0x21,0x06,0x0e};voidled_clc(void){XBYTE[0X8000]=0XFF;XBYTE[0X9000]=0XFF;XBYTE[0XA000]=0XFF;XBYTE[0XB000]=0XFF;}voiddelay(unsignedinti){while(i--);}voiddelay_1ms(uintz){uinti,j;for(i=z;i>0;i--)for(j=110;j>0;j--);}ucharkey_test(){WR273=0XF0;if((RD244&0X0F)!=0X0F)return1;elsereturn0;}voidtime_init(){TMOD=0X01;TH0=(65536-46080)/256;TL0=(65536-46080)%256;TR0=1;ET0=1;EA=1;}voidtime_display(){if(count==10000)count=0;XBYTE[0X8000]=table_16_1[count%10];XBYTE[0X9000]=table_16_1[count%100/10];XBYTE[0XA000]=table_16_1[count%1000/100];XBYTE[0XB000]=table_16_1[count/1000];}voidTIME_SET(){uchara,b,c,d,key;while(flag==1){led_clc();while(!key_test());a=keyscan();XBYTE[0XB000]=table_16_1[a];while(!key_test());b=keyscan();XBYTE[0XA000]=table_16_2[b];while(!key_test());c=keyscan();XBYTE[0X9000]=table_16_1[c];while(!key_test());d=keyscan();XBYTE[0X8000]=table_16_1[d];while(!key_test());key=keyscan();if(key==11){shi=a*10+b;fen=c*10+d;flag=0;}}}voidTIME_DIS(){if(tim==60){fen++;tim=0;if(fen==60){shi++;fen=0;if(shi==24)shi=0;}}XBYTE[0X8000]=table_16_1[fen%10];XBYTE[0X9000]=table_16_1[fen/10];XBYTE[0XA000]=table_16_2[shi%10];XBYTE[0XB000]=table_16_1[shi/10];}voidmain(){uinttemp;led_clc();//serial_init();time_init();while(1){temp=keyscan();if(temp==10)flag=1;TIME_SET();//XBYTE[0X8000]=table_16_1[temp];//time_display();TIME_DIS();}}voidtime()interrupt2{ucharm;TH0=(65536-46080)/256;TL0=(65536-46080)%256;m++;if(m==20){m=0;count++;tim++;}}voidserial()interrupt4{if(RI==1){x=SBUF;RI=0;}put_char(x);delay_1ms(5);}实验心得体会:通过本次实验,让我对单片机实验有了更深的了解,初次使用GAL器件觉得有点难,所以本次对于地址的定义用了很多的时间,但是最后还是解决了这个难题。实验四实验要求:实现对DS18B20的对室内温度的测量,实现了单片机的温度测量设计实验。实验程序:#include<reg52.h>#include<intrins.h>#include<absacc.h>#defineuintunsignedint#defineucharunsignedchar#define_Nop()_nop_()Ucharcodedis_16_1[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e};ucharcodedis_16_2[]={0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10,0x08,0x03,0x46,0x21,0x06,0x0e};sbitDQ=P1^0;//定义DS18B20通信端口//////////////////以下是DS18B20驱动程序//////////////////延时函数voiddelay_us(unsignedinti){while(i--);}//初始化函数Init_DS18B20(void){unsignedcharx=0;DQ=1;//DQ复位delay_us(8);//稍做延时DQ=0;//单片机将DQ拉低delay_us(80);//精确延时大于480usDQ=1;//拉高总线delay_us(14);x=DQ;//稍做延时后如果x=0则初始化成功x=1则初始化失败delay_us(20);}//读一个字节ReadOneChar(void){unsignedchari=0;unsignedchardat=0;for(i=8;i>0;i--){DQ=0;//给脉冲信号dat>>=1;DQ=1;//给脉冲信号if(DQ)dat|=0x80;delay_us(4);}return(dat);}//写一个字节WriteOneChar(unsignedchardat){unsignedchari=0;for(i=8;i>0;i--){DQ=0;DQ=dat&0x01;delay_us(5);DQ=1;dat>>=1;}}//读取温度ReadTemperature(void){unsignedchara=0;unsignedcharb=0;unsignedintt=0;floattt=0;Init_DS18B20();WriteOneChar(0xCC);//跳过读序号列号的操作WriteOneChar(0x44);//启动温度转换Init_DS18B20();WriteOneChar(0xCC);//跳过读序号列号的操作WriteOneChar(0xBE);//读取温度寄存器等(共可读9个寄存器)前两个就是温度a=ReadOneChar();b=ReadOneChar();t=b;t<<=8;t=t|a;tt=t*0.0625;//将温度的高位与低位合并t=tt*10+0.5;//对结果进行4舍5入return(t);}//////////////////以上是DS18B20驱动程序/////////////////*定义数字ascii编码*//*1MS为单位的延时程序*/voiddelay_1ms(ucharx){ucharj;while(x--){for(j=0;j<125;j++){;}}}main(){unsignedinti=0;ReadTemperature();/*读取当前温度*/delay_us(500);i=ReadTemperature();/*读取当前温度*/init();while(1){i=ReadTemperature();//读取当前温度XBYTE[0Xb000]=0xff;XBYTE[0Xa000]=dis_16_1[i/100];/*把温度显示出来*/XBYTE[0X9000]=dis_16_2[i%100/10];XBYTE[0X8000]=dis_16_1[i%10];delay_1ms(100);}}实验心得体会:本次实验虽然遇到了很多难题,但是还是慢慢克服了,并且通过和实验室同学的交流的得到了解决的方案。从中学会了很多技巧与知识。实验五实验要求:实现定时器50ms定时。实验程序:#include<reg52.h>#include<intrins.h>#include<absacc.h>#include<stdio.h>#defineWR273XBYTE[0XC000]#defineRD244XBYTE[0XC000]#defineucharunsignedchar#defineuintunsignedintsbitDQ=P1^0;uintcount=0,x,buf[20],tim,flag;ucharfen,shi;ucharcodetable_16_1[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e};ucharcodetable_16_2[]={0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10,0x08,0x03,0x46,0x21,0x06,0x0e};voidled_clc(void){ XBYTE[0X8000]=0XFF; XBYTE[0X9000]=0XFF; XBYTE[0XA000]=0XFF; XBYTE[0XB000]=0XFF;}voiddelay(unsignedinti){ while(i--);}voiddelay_1ms(uintz){ uinti,j; for(i=z;i>0;i--) for(j=110;j>0;j--);}ucharkey_test(){ WR273=0XF0; if((RD244&0X0F)!=0X0F)return1; elsereturn0;voidtime_init(){ TMOD=0X01; TH0=(65536-46080)/256; TL0=(65536-46080)%256; TR0=1;ET0=1;EA=1;}voidtime_display(){if(count==10000)count=0; XBYTE[0X8000]=table_16_1[count%10]; XBYTE[0X9000]=table_16_1[count%100/10]; XBYTE[0XA000]=table_16_1[count%1000/100]; XBYTE[0XB000]=table_16_1[count/1000];}voidTIME_SET(){uchara,b,c,d,key; while(flag==1) { led_clc(); while(!key_test()); a=keyscan(); XBYTE[0XB000]=table_16_1[a]; while(!key_test()); b=keyscan(); XBYTE[0XA000]=table_16_2[b]; while(!key_test()); c=keyscan(); XBYTE[0X9000]=table_16_1[c]; while(!key_test()); d=keyscan(); XBYTE[0X8000]=table_16_1[d]; while(!key_test()); key=keyscan(); if(key==11)
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 学习成果分享的策略计划
- 仓库个人工作计划的调整与补充
- 各类专科协作总结与整合计划
- 2025年剧装道具相关工艺美术品项目合作计划书
- 2025年电子工程安装服务项目建议书
- 2025年速释制剂材料项目发展计划
- 跨部门协调合作流程管理规定
- 月度业务讨论
- 新项目合作投资协议
- 提升办公效率的策略与实践研究
- 《智能物联网导论》AIoT导论-第3章课件
- 《农业产业发展规划》课件
- 幼儿园园长的法律意识与法律风险防控
- 破伤风的预防和紧急处理
- 人教版小学数学三年级下册教材分析课件
- 商务ktv项目计划书
- 中小学校岗位安全工作指南
- 数据中心运维方案
- 《愿望的实现》全文
- 轨道机车制动系统智能产业化基地项目可行性研究报告
- 【携程公司的战略环境PEST探析和SWOT探析7500字】
评论
0/150
提交评论