单片机课程设计报告_单片机课程设计报告书

2020-02-27 其他范文 下载本文

单片机课程设计报告由刀豆文库小编整理,希望给你工作、学习、生活带来方便,猜你可能喜欢“单片机课程设计报告书”。

《单片机课程设计报告》

学校:

专业:

班级:

姓名:

学号:

指导教师:

摘要

由于单片机体积小、成本低、使用方便,所以被广泛地应用于仪器仪表、现场数据的采集和控制。通过本次课程设计掌握单片机硬件和软件方面的知识,更深入的了解单片机的实际应用。

关键词

单片机,程序,流水灯,数码管,温度计,键盘扫描,定时器等。

实验内容

一、课程设计的目的 以本学期对单片机的学习和认识,并通过本次课程设计加以应用,从而达到一个对所学知识的巩固、更深一步的理解,面对一个电子设计,应对出系统的方案,分析出各个板块来,再对各个板块进一步的具体的设计,先进行硬件电路设计,此时一定要考虑好要用什么元件、各个元件的具体参数、是否能实现应有功能,从而得到一个完整的硬件电路。在根据该电路设计出软件的功能模块、从而完成程序流程图,在根据流程图完成程序的设计,并通过反复的调试、运行、更正,直至完成既定功能为止,最后将软件、硬件结合进行调试、运行,对其功能进行最终测试,并反复思考其测试中遇到相应问题的原因,并将其一一处理,从而完成本次设计的实验要求,以及本次课程设计的最终目的。

实验一:键盘操作实验 实验要求:

通过本次实验实现对键盘的控制,操作数码管的显示数字。

实验程序:

#include #include #include #include #define WR273 XBYTE[0XC000] #define RD244 XBYTE[0XC000] #define uchar unsigned char #define uint unsigned int sbit DQ =P1^0;uint count=0,x,buf[20],tim,flag;uchar fen,shi;uchar code

table_16_1[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e};uchar code

table_16_2[]={0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10,0x08,0x03,0x46,0x21,0x06,0x0e};void led_clc(void){ XBYTE[0X8000]=0XFF;XBYTE[0X9000]=0XFF;XBYTE[0XA000]=0XFF;XBYTE[0XB000]=0XFF;}

void delay(unsigned int i){ while(i--);} void delay_1ms(uint z){ uint i,j;for(i=z;i>0;i--)for(j=110;j>0;j--);} uchar key_test(){ WR273=0XF0;if((RD244&0X0F)!=0X0F)return 1;else return 0;}

void time_init(){ TMOD=0X01;TH0=(65536-46080)/256;TL0=(65536-46080)%256;TR0=1;ET0=1;EA=1;} void time_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];

} void TIME_SET(){ uchar a,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;

} } } void TIME_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];} void main(){ uint temp;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();} } void time()interrupt 2 { uchar m;TH0=(65536-46080)/256;TL0=(65536-46080)%256;m++;if(m==20){ m=0;count++;tim++;} } void serial()interrupt 4 { if(RI==1){ x=SBUF;RI=0;} put_char(x);delay_1ms(5);}

实验心得体会:

通过本次实验,让我对单片机实验有了更深的了解,认为这个实验还是比较容易的,没有花太多的时间。

实验二:流水灯实验 实验要求:

本次实验实现的是小灯的闪烁,流水灯可以按照程序规定的要求进行闪烁。

实验程序设计

#include //52单片机头文件

#include //包含有左右循环移位子函数的库 #define uint unsigned int //宏定义 #define uchar unsigned char //宏定义 uint flag=0;void delay(uint z)//延时函数,z的取值为这个函数的延时ms数,如delay(200);大约延时200ms.{ //delay(500);大约延时500ms.uint x,y;for(x=z;x>0;x--)for(y=110;y>0;y--);} void init(){ TMOD=0X01;TH0=(65536-50000)/256;TL0=(65536-50000)%256;TR0=1;ET0=1;EA=1;} void main()//主函数 { init();

while(1){ uchar a,i,j;

if(flag==1){ for(j=0;j

delay(300);//延时300毫秒 a=_crol_(a,1);} } P1=0xff;for(j=0;j

实验心得体会:

通过本次实验一步一步的进行实验,设计程序,写入中断来实现流水灯的全部实验要求。

实验三:数码管性质 实验要求:

通过上一次流水灯的实验本次进行了数码管的实验,通过原理图了解数码管的性质。

设计程序

#include #include #include #include #define WR273 XBYTE[0XC000] #define RD244 XBYTE[0XC000] #define uchar unsigned char #define uint unsigned int sbit DQ =P1^0;uint count=0,x,buf[20],tim,flag;uchar fen,shi;uchar code

table_16_1[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e};uchar code

table_16_2[]={0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10,0x08,0x03,0x46,0x21,0x06,0x0e};void led_clc(void){ XBYTE[0X8000]=0XFF;XBYTE[0X9000]=0XFF;XBYTE[0XA000]=0XFF;XBYTE[0XB000]=0XFF;} void delay(unsigned int i){ while(i--);} void delay_1ms(uint z){ uint i,j;for(i=z;i>0;i--)for(j=110;j>0;j--);} uchar key_test(){ WR273=0XF0;if((RD244&0X0F)!=0X0F)return 1;else return 0;} void serial_init(){ TMOD=0x20;TH1=0xfd;TL1=0xfd;TR1=1;REN=1;SM0=0;SM1=1;EA=1;ES=1;}

void put_char(uchar s){ SBUF=s;while(TI==0);TI=0;}

void put_string(uchar *s){

while(*s){

put_char(*s);

s++;}

利用汇编实现数码管显示:

ORG 0000H LJMP MAIN ORG 0030H EXTRN DATA(BUFFER);DB BUFFER,30H;DB BUFFER+2,32H;DB BUFFER+3,33H MAIN: LCALL CLS

;LCALL DISP;MOV BUFFER,#30H;MOV BUFFER+1,#31H;MOV BUFFER+2,#33H;MOV BUFFER+3,#35H LCALL PRINT ST: LJMP ST

CLS: MOV A,#0FFH MOV DPTR,#8000H MOVX @DPTR,A MOV DPTR,#9000H MOVX @DPTR,A MOV DPTR,#0A000H MOVX @DPTR,A MOV DPTR,#0B000H MOVX @DPTR,A RET;DISP:

;MOV A,BUFFER;MOV DPTR,#8000H;MOVX @DPTR,A;MOV A,BUFFER+1;MOV DPTR,#9000H;MOV A,BUFFER+2;MOV DPTR,#0A000H;MOVX @DPTR,A;MOV A,BUFFER+3;MOV DPTR,#0B000H;MOVX @DPTR,A;RET PRINT: PUSH PSW CLR C MOV BUFFER,#30H MOV A,BUFFER SUBB A,#30H MOV DPTR,#TABLED MOVC A,@A+DPTR MOV DPTR,#0B000H MOVX @DPTR,A

MOV BUFFER+1,#31H

MOV A,BUFFER+1 SUBB A,#30H MOV DPTR,#TABLED MOVC A,@A+DPTR MOV DPTR,#0A000H MOVX @DPTR,A

MOV BUFFER+2,#33H

MOV A,BUFFER+2 SUBB A,#30H MOV DPTR,#TABLED MOVC A,@A+DPTR MOV DPTR,#09000H MOVX @DPTR,A

MOV BUFFER+3,#34H MOV A,BUFFER+3 SUBB A,#30H MOV DPTR,#TABLED MOVC A,@A+DPTR MOV DPTR,#08000H MOVX @DPTR,A

POP PSW

RET TABLED:DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H DB 90H,88H,83H,0C6H,0A1H,86H,84H,0FFH,8CH DB 0BFH TABLED1:DB 0C0H,0F9H,64H,70H,59H,52H,42H,0F8H,40H DB 50H,48H,43H,0C6H,61H,46H,4EH,0FFH,4CH DB 7FH End

实验心得体会:

本次实验利用了c语言与汇编的对比,进行的简单的实验过程。更好的为以后程序设计奠定了基础。

实验四:温度测量实验 实验要求

实现对DS18B20的对室内温度的测量,实现了单片机的温度测量设计实验。

实验程序

#include #include #include #define uint unsigned int #define uchar unsigned char #define _Nop()_nop_()Uchar code

dis_16_1[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e};uchar code

dis_16_2[]={0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10,0x08,0x03,0x46,0x21,0x06,0x0e};

sbit DQ =P1^0;//定义DS18B20通信端口

//////////////////以下是DS18B20驱动程序//////////////// //延时函数

void delay_us(unsigned int i){

while(i--);}

//初始化函数

Init_DS18B20(void){

unsigned char x=0;

DQ = 1;//DQ复位

delay_us(8);//稍做延时

DQ = 0;//单片机将DQ拉低

delay_us(80);//精确延时 大于 480us

DQ = 1;//拉高总线

delay_us(14);

x=DQ;//稍做延时后 如果x=0则初始化成功 x=1则初始化失败

delay_us(20);}

//读一个字节

Read One Char(void){

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_us(4);

}

return(dat);}

//写一个字节

Write One Char(unsigned char dat){

unsigned char i=0;for(i=8;i>0;i--){

DQ = 0;

DQ = dat&0x01;

delay_us(5);

DQ = 1;

dat>>=1;

} }

//读取温度

Read Temperature(void){

unsigned char a=0;

unsigned char b=0;

unsigned int t=0;

float tt=0;

Init_DS18B20();

Write One Char(0xCC);

/ / 跳过读序号列号的操作

Write One Char(0x44);

// 启动温度转换

Init_DS18B20();

Write One Char(0xCC);

//跳过读序号列号的操作

Write One Char(0xBE);//读取温度寄存器等(共可读9个寄存器)

a=Read One Char();

b=Read One Char();

t=b;

t

t=t|a;

tt=t*0.0625;

//将温度的高位与低位合并

t= tt*10+0.5;

//对结果进行4舍5入

return(t);} //////////////////以上是DS18B20驱动程序////////////////

前两个就是温度

/*定义数字ascii 编码*/

/*1MS为单位的延时程序*/ void delay_1ms(uchar x){

uchar j;

while(x--){

for(j=0;j

{;}

} }

main(){

unsigned int i=0;

Read Temperature();/*读取当前温度*/

delay_us(500);

i=Read Temperature();/*读取当前温度*/

init();while(1){

i=Read Temperature();//读取当前温度

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 #include #include #include #define WR273 XBYTE[0XC000] #define RD244 XBYTE[0XC000] #define uchar unsigned char #define uint unsigned int sbit DQ =P1^0;uint count=0,x,buf[20],tim,flag;uchar fen,shi;uchar code

table_16_1[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e};uchar code

table_16_2[]={0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10,0x08,0x03,0x46,0x21,0x06,0x0e};

void led_clc(void){ XBYTE[0X8000]=0XFF;XBYTE[0X9000]=0XFF;XBYTE[0XA000]=0XFF;XBYTE[0XB000]=0XFF;} void delay(unsigned int i){ while(i--);} void delay_1ms(uint z){ uint i,j;for(i=z;i>0;i--)for(j=110;j>0;j--);} uchar key_test(){ WR273=0XF0;if((RD244&0X0F)!=0X0F)

return 1;else return 0;void time_init(){ TMOD=0X01;TH0=(65536-46080)/256;TL0=(65536-46080)%256;TR0=1;

ET0=1;

EA=1;} void time_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];

}

void TIME_SET(){

uchar a,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;}

} }

void TIME_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];} void main(){ uint temp;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();} } void time()interrupt 2 { uchar m;TH0=(65536-46080)/256;TL0=(65536-46080)%256;m++;if(m==20){

m=0;

count++;

tim++;} } void serial()interrupt 4 {

if(RI==1){

x=SBUF;

RI=0;

}

put_char(x);delay_1ms(5);}

实验心得体会:

本次实验主要是定时器的设计实验,通过本次实验更好的了解GAL器件的应用。实现了对此单片机的应用。

实验总结

通过本次课程设计我们获益良多。既巩固了单片机的一些相关基本知识,又熟悉了PROTRL的相关操作。对一个整体的电子设计项目,有了一定的认识,初步学会了一定的设计方法,明白了如何用这种方法去实现一个系统的设计。

在电子技术应用领域中,单片机的应用愈来愈多地应用到各行各业。如:工业控制、仪器仪表、电讯技术、办公自动化和计算机外部设备、汽车与节能、商用产品、家用电器等。目前,单片机正朝着大容量片上存储器、多功能i/o接口、宽范围工作电源和低功耗方向发展。要开发单片机的应用,不但要掌握单片机硬件和软件方面的知识,而且还要深入了解各应用系统的专业知识,只有将这两方面的知识融会贯通和有机结合,才能设计出优良的应用系统。一个好的工程设计师不仅要掌握单片机的工作原理,而且还要不断了解各公司最新芯片的结构和应用,在实际应用中找到最好的性能价格比。所以以后还要注意培养接受新知识的自学能力,掌握芯片发展动态。

同时也让我们找到了自己在某些知识上的欠缺,并通过这次机会得到弥补,取得进步!

《单片机课程设计报告.docx》
将本文的Word文档下载,方便收藏和打印
推荐度:
单片机课程设计报告
点击下载文档
相关专题 单片机课程设计报告书 报告 单片机 课程设计 单片机课程设计报告书 报告 单片机 课程设计
[其他范文]相关推荐
    [其他范文]热门文章
      下载全文