毕业设计单片机课程设计应用系统论文.docx
- 文档编号:17007143
- 上传时间:2023-07-21
- 格式:DOCX
- 页数:25
- 大小:1.99MB
毕业设计单片机课程设计应用系统论文.docx
《毕业设计单片机课程设计应用系统论文.docx》由会员分享,可在线阅读,更多相关《毕业设计单片机课程设计应用系统论文.docx(25页珍藏版)》请在冰点文库上搜索。
毕业设计单片机课程设计应用系统论文
湖南工业大学
课程设计
资料袋
电气与信息工程学院(系、部)2014~2015学年第1学期
课程名称单片机应用系统指导教师贺正芸职称讲师
学生姓名专业班级学号
题目对外部脉冲计数及温度报警系统设计
成绩起止日期2014年12月25日~2015年1月4日
目录清单
序号
材料名称
资料数量
备注
1
课程设计任务书
2
课程设计说明书
3
课程设计图纸
张
4
5
6
湖南工业大学
课程设计任务书
2014—2015学年第1学期
电气与信息工程学院(系、部)专业班级
课程名称:
单片机应用系统
设计题目:
对外部脉冲计数及温度报警系统设计
完成期限:
自2014年12月25日至2015年1月4日共2周
内
容
及
任
务
1.1外部脉冲自动计数,自动显示:
(1)设计255计数器:
0-255计数,计满后自动清0,重新计数(在数码管中显示)。
(2)设计50000计数器:
0-50000计数,计满后自动清0,重新计数(在数码管中显示)。
1.2设计一个温度报警系统:
温度显示范围为0——51度,当温度大于40度时,上限报警指示灯点亮,并驱动电机1转动;当温度小于于10度时,下限报警指示灯点亮,并驱动电机2转动。
1.3*长短按键的设计(附加题)
系统从000开始,一个按键若短按一下(0.5s以内),则个位数加1;如果长按2s不放,则个位数按步长0.2s快速进满后,十位数按步长0.5s加1;加到100则停止并长时间显示。
注:
要求首先采用PROTEUS完成单片机最小系统的硬件电路设计及仿真;程序仿真测试通过后,再下载到单片机板上进行硬件调试。
进
度
安
排
起止日期
工作内容
2014.12.25
讲述设计内容及基本原理
2014.12.262013.12.31
进行系统的设计
2013.12.31-2014.1.4
进行系统的调试
主
要
参
考
资
料
[1]刘苗生、潘宗预.单片机测控系统设计.中国物质出版社,2006年
[2]周润景,张丽娜.基于PROTEUS的电路及单片机系统设计与仿真[M].北京航天航空大学出版社,2006
指导教师(签字):
年月日
系(教研室)主任(签字):
年月日
(单片机原理与应用)
课程设计
(题目)
对外部脉冲计数及温度报警系统的设计
起止日期:
2014年12月26日至2015年1月5日
小组成员
学生姓名
班级
学号
成绩
指导教师(签字)
目录
绪论1
一、设计任务1
二、设计思路1
三、单片机硬件电路原理图2
四、设计内容3
1.255数码管计数3
1.1)系统设计总框图3
1.2)设计仪器3
1.3)proteus8仿真3
1.4)硬件实物图4
1.5)源程序5
2.50000数码管计数5
2.1)系统设计总框图5
2.2)设计仪器6
2.3)proteus8仿真6
2.4)硬件实物图6
2.5)源程序7
3.温度控制报警器9
3.1)系统设计总框图9
3.2)设计仪器9
3.3)proteus8仿真10
3.4)硬件实物图10
3.5)源程序11
五、心得与体会15
绪论
单片机(Singlechipmicrocomputer)是一种集成电路芯片,是采用超大规模集成电路技术把具有数据处理能力的中央处理器CPU、随机存储器RAM、只读存储器ROM、多种I/O口和中断系统、定时器/计数器等功能集成到一块硅片上构成的一个小而完善的微型计算机系统,在工业控制领域广泛应用。
而51系列单片机是各单片机中最为典型和最有代表性的一种。
这次课程设计的目的就是要通过对它的学习应用,从而达到学习、设计、开发单片机软硬件的能力。
一、设计任务:
1.1外部脉冲自动计数,自动显示。
1.1.1设计一个255计数器:
0-255计数,计满后自动清0,重新计数(在数码管中显示)。
1.1.2设计一个50000计数器:
0-50000计数,计满后自动清0,重新计数(在数码管中显示)。
1.2设计一个温度报警系统:
温度显示范围为0——51度,当温度大于40度时,上限报警指示灯点亮,并驱动电机1转动;当温度小于10度时,下限报警指示灯点亮,并驱动电机2转动。
二、设计思路
1.设计一个255计数器:
0-255计数,计满后自动清0,重新计数(在数码管中显示)。
原理:
255可用8位二进制数表示,故本设计可直接采用可以重装载的计数器T1模式二进行计数。
然后对TL1的内容进行相应的二进制---十进制转换:
首先TL1的内容除以64H,所的商就是十进制的百位,然后用余数除以0AH,所得的商就是十进制数的十位,余数即相应的十进制的个位。
接着将相应的十进制数进行译码,并在LED数码管上显示出来。
每来一个脉冲其显示的结果加一,直加至255然后T1重新开始计数。
2.设计一个50000计数器:
0-50000计数,计满后自动清0,重新计数(在数码管中显示)。
原理:
将TH1和TL1中的十六进制数转为BCD码,
入口:
HT1,TL1中是16位二进制数,其中TH1中是高8位;
出口:
R2R3R4中是BCD码,其中R2中是万位,R3中是千、百位,R4中是十、个位。
再转为对应的个.十.百.千.万位。
送到缓冲区。
接着调用显示子程序。
3.设计一个温度报警系统:
温度显示范围为0——51度,当温度大于40度时,上限报警指示灯点亮,并驱动电机1转动;当温度小于于10度时,下限报警指示灯点亮,并驱动电机2转动。
三、单片机硬件电路原理图
四、设计内容
1.255数码管计数
1.1)系统设计总框图
1.2)设计仪器
单片机开发实验仪
1.3)proteus8仿真
1.4)源程序
ORG0000H
AJMPSTART
ORG001BH
AJMPTINT1
ORG0030H
START:
MOVTMOD,#60H;计数方式2
MOVTH1,#00H;初值0
MOVTL1,#00H
SETBTR1
SETBET1
SETBEA
LOOP:
LCALLDISP
SJMPLOOP
TINT1:
RETI
DISP:
MOVA,TL1
MOVB,#64H
DIVAB;A为百位
MOVDPTR,#SEGTAB
MOVCA,@A+DPTR
MOVP2,#05H;位选5
MOVP0,A;送百位数据
ACALLDELAY
MOVA,B
MOVB,#0AH
DIVAB;A为十位,B为个位
MOVCA,@A+DPTR
MOVP2,#06H;位选6
MOVP0,A;送十位数据
ACALLDELAY
MOVA,B
MOVCA,@A+DPTR
MOVP2,#07H;位选7
MOVP0,A;送个位数据
ACALLDELAY
RET
DELAY:
MOVR5,#05H;延时1ms
LOOP1:
MOVR6,#0FFH
DJNZR6,$
DJNZR5,LOOP1
RET
SEGTAB:
DB3FH,06H,5BH,4FH,66H;0,1,2,3,4
DB6DH,7DH,07H,7FH,6FH;5,6,7,8,9
END
1.5)硬件电路实物
2.50000数码管计数
2.1)系统设计总框图
2.2)设计仪器
单片机开发实验仪
2.3)proteus8仿真
2.4)硬件电路实物图
2.5)源程序
ORG0000H
AJMPSTART
ORG0030H
WANWEIEQU20H
QIANWEIEQU21H
BAIWEIEQU22H
SHIWEIEQU23H
GEWEIEQU24H
START:
MOVR0,#20H;显示缓冲数据
MOVR1,#01H;位选缓冲
MOVTMOD,#50H;计数工作方式1
MOVTH1,#00H;初值0
MOVTL1,#00H
SETBTR1
SETBET1
SETBEA
LOOP:
LCALLDISP
SJMPLOOP
DISP:
LCALLREAD
DISP1:
MOVP2,R1
MOVP0,@R0
LCALLDELAY
INCR0
INCR1
CJNER1,#06H,DISP
MOVR1,#01H
MOVR0,#20H
SJMPDISP1
READ:
MOVR5,TH1
MOVR6,TL1
CJNER5,#0C3H,READ1
CJNER6,#51H,READ1
MOVTH1,#00H;初值0
MOVTL1,#00H;调用子程序把R5R6中的数字,转换成BCD码,送到R2R3R4
READ1:
LCALLTXBCD
MOVA,R4
MOVB,#16
DIVAB;除以16,目的是分离出高、低四位
MOVDPTR,#SEGTAB
MOVCA,@A+DPTR
MOVSHIWEI,A;存放十位
MOVA,B
MOVCA,@A+DPTR
MOVGEWEI,A;存放个位
MOVA,R2
MOVCA,@A+DPTR
MOVWANWEI,A;存放万位
MOVA,R3
MOVB,#16
DIVAB
MOVCA,@A+DPTR
MOVQIANWEI,A
MOVA,B
MOVCA,@A+DPTR
MOVBAIWEI,A
RET
;两个字节的二进制数转换成BCD码的程序如下:
;功能:
16位二进制数变换成为BCD码;
;入口:
R5R6中是16位二进制数,其中R5中是高8位;
;出口:
R2R3R4中是BCD码,其中R2中是万位,R3中是千、百位,R4中是十、个位。
TXBCD:
CLRA
MOVR2,A;先清零
MOVR3,A
MOVR4,A
MOVR7,#16;共转换十六位数
READ2:
CLRC
MOVA,R6
;从待转换数的高端移出一位到Cy
RLCA
MOVR6,A
MOVA,R5
RLCA
MOVR5,A
MOVA,R4;送到BCD码的低端
ADDCA,R4;带进位加。
自身相加,相当于左移一位
DAA;十进制调整,变成BCD码
MOVR4,A
MOVA,R3
ADDCA,R3
DAA
MOVR3,A
MOVA,R2
ADDCA,R2
MOVR2,A
DJNZR7,READ2;共转换十六位数
RET
DELAY:
MOVR5,#05H;延时1ms
LOOP2:
MOVR6,#0FFH
DJNZR6,$
DJNZR5,LOOP2
RET
SEGTAB:
DB3FH,06H,5BH,4FH,66H;0,1,2,3,4
DB6DH,7DH,07H,7FH,6FH;5,6,7,8,9
END
3.温度控制报警器
3.1)系统设计总框图
3.2)设计仪器
单片机开发实验仪
3.3)proteus8仿真
3.4)硬件电路
由于环境温度接近15-18摄氏度,为了显示结果,把温度报警上限调到18摄氏度,把单个数码管的一段当成LED报警灯,报警灯亮,
3.5)源程序
#include
#include
#defineucharunsignedchar
#defineuintunsignedint
sbitDQ=P3^7;
sbitBEEP=P3^6;
sbitHI_LED=P1^4;
sbitLO_LED=P1^5;
bitHI_Alarm=0,LO_Alarm=0;
bitDS18B20_IS_OK=1;
ucharcodeDSY_CODE[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x00};//数码管共阴极段码
ucharcodedf_Table[]={0,1,1,2,3,3,4,4,5,6,6,7,8,8,9,9};//温度小数位对照表
ucharCurrentT=0;//温度整数部分
ucharDisplay_Digit[]={0,0,0,0};//数码管待显示的各位温度
ucharTemp_Value[]={0x00,0x00};//DS0832读取的温度值
uintTime0_Count=0;//定时器中断计数
charAlarm_Temp_HL[2]={40,10};
/***********延时程序*************/
voidDelay(uintx)
{
while(--x);
}
/**********DS18B20初始化********/
ucharInit_DS18B20()
{
ucharstatus;
DQ=1;Delay(8);
DQ=0;Delay(90);
DQ=1;Delay(8);
status=DQ;
Delay(100);
DQ=1;
returnstatus;
}
/**********DS18B20读字节********/
ucharReadOneByte()
{
uchari,dat=0;
DQ=1;_nop_();
for(i=0;i<8;i++)
{
DQ=0;dat>>=1;DQ=1;_nop_();_nop_();
if(DQ)dat|=0x80;Delay(30);DQ=1;
}
returndat;
}
/**********DS18B20写字节********/
voidWriteOneByte(uchardat)
{
uchari;
for(i=0;i<8;i++)
{
DQ=0;DQ=dat&0x01;Delay(5);DQ=1;dat>>=1;
}
}
/**********从DS18B20读取温度********/
voidRead_Temperature()
{
if(Init_DS18B20()==1)
DS18B20_IS_OK=0;
else
{
WriteOneByte(0xCC);
WriteOneByte(0x44);
Init_DS18B20();
WriteOneByte(0xCC);
WriteOneByte(0xBE);
Temp_Value[0]=ReadOneByte();
Temp_Value[1]=ReadOneByte();
DS18B20_IS_OK=1;
}
}
/**********给DS18B20设置报警值********/
voidSet_Alarm_Temp_Value()
{
Init_DS18B20();
WriteOneByte(0xcc);//跳过序列号
WriteOneByte(0x4e);//将设定的温度报警值写入DS18B20
WriteOneByte(Alarm_Temp_HL[0]);//写TH
WriteOneByte(Alarm_Temp_HL[1]);//写TL
WriteOneByte(0x7f);//12位精度
Init_DS18B20();
WriteOneByte(0xcc);//跳过序列号
WriteOneByte(0x48);//将温度报警值存入DS18B20
}
/**********温度值显示******************/
voidDisplay_Temperature()//显示温度
{
uchari;
uchart=150;//延时值
ucharng=0,np=0;//负数标示,及负号显示位置
charSigned_Current_Temp;
if((Temp_Value[1]&0xf8)==0xf8)//如果为负数,取反加1;设置负数标示及负号显示位置
{
Temp_Value[1]=~Temp_Value[1];
Temp_Value[0]=~Temp_Value[0]+1;
if(Temp_Value[0]==0x00)Temp_Value[1]++;
ng=1;np=0xfd;
}
Display_Digit[0]=df_Table[Temp_Value[0]&0x0f];//查表显示温度小数位
CurrentT=((Temp_Value[0]&0xf0)>>4)|((Temp_Value[1]&0x07)<<4);
Signed_Current_Temp=ng?
-CurrentT:
CurrentT;
HI_Alarm=Signed_Current_Temp>=Alarm_Temp_HL[0]?
1:
0;
LO_Alarm=Signed_Current_Temp<=Alarm_Temp_HL[1]?
1:
0;
Display_Digit[3]=CurrentT/100;
Display_Digit[2]=CurrentT%100/10;
Display_Digit[1]=CurrentT%10;
if(Display_Digit[3]==0)//高位为0,不现实,负号后移
{Display_Digit[3]=10;
np=0xfb;
if(Display_Digit[2]==0)
{
Display_Digit[2]=10;
np=0xf7;
}
}
for(i=0;i<30;i++)//刷新数码管显示温度值
{
P0=0X39;P2=0X7F;Delay(t);P2=0XFF;
P0=0X63;P2=0XBF;Delay(t);P2=0XFF;
P0=DSY_CODE[Display_Digit[0]];
P2=0XDF;Delay(t);P2=0XFF;
P0=(DSY_CODE[Display_Digit[1]])|0X80;
P2=0XEF;Delay(t);P2=0XFF;
P0=DSY_CODE[Display_Digit[2]];
P2=0XF7;Delay(t);P2=0XFF;
P0=DSY_CODE[Display_Digit[3]];
P2=0XFB;Delay(t);P2=0XFF;
if(ng)
{P0=0X40;P2=np;Delay(t);P2=0XFF;}
}
}
/**********定时器0中断,控制报警声音********/
voidT0_INT()interrupt1
{
TH0=-1000/256;
TL0=-1000%256;
BEEP=!
BEEP;
if(++Time0_Count==400)
{
Time0_Count=0;
if(HI_Alarm)HI_LED=~HI_LED;
elseHI_LED=1;
if(LO_Alarm)LO_LED=~LO_LED;
elseLO_LED=1;
}
}
voidmain()
{
IE=0X82;
TMOD=0X01;//方式1计数
TH0=-1000/256;
TL0=-1000%256;
TR0=0;
HI_LED=1;
LO_LED=1;
Set_Alarm_Temp_Value();
Read_Temperature();
Delay(50000);Delay(50000);
while
(1)
{
Read_Temperature();
if(DS18B20_IS_OK)
{
if(HI_Alarm==1||LO_Alarm==1)TR0=1;
elseTR0=0;
Display_Temperature();
}
else{P0=P2=0X00;}
}
五.心得与体会
在这次单片机课程设计中,我获益匪浅。
首先,在选题后极大考验了我对芯片手册的自学能力,由于芯片手册是英文版的,所以在学习的过程中耗费了一定的时间,但是,最后我还是顺利完成了对芯片手册的阅读,而且,由于单片机设计中,用到的芯片很少,所以总体来说,不是很困难。
其次,在对整个设计有了大体的认识之后,我便开始进行程序设计以及电路仿真。
在程序设计之前,要对整个流程有一个清晰的认识,在查阅了一些资料后,参照上文中的软件设计中的流程图,并在老师及同学的帮助下完成了程序的编写。
还有,在本次设计过程中,开发板比实验箱精简了部分功能,但是使用起来更加方便,电路图更加明了,这大大减少了我们对于硬件的学习时间,使得我们能够将更多的时间用来编写程序;开发板的另一个优点就是效果特别稳定,不用担心是硬件出了问题。
总体来说,单片机设计的思路并不难,但要做到每一步都细心认真很难。
这次的设计能顺利完成要非常感谢同学的帮助以及老师的指导,让我学到了很多东西!
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 毕业设计 单片机 课程设计 应用 系统 论文