单片机原理与应用课程设计pdfWord格式.docx
《单片机原理与应用课程设计pdfWord格式.docx》由会员分享,可在线阅读,更多相关《单片机原理与应用课程设计pdfWord格式.docx(12页珍藏版)》请在冰豆网上搜索。
主控器、测温电路、显示电路。
系统以STC12C5404AD为主芯片,对热敏电阻传入的温度值进行处理,由单片机程序控制,将处理后的温度用四位一体的数码管显示出来。
2.2各功能模块
2.2.1温度检测
由热敏电阻感知环境温度,改变自身阻值,通过分压法来测出电压值,从而测出温度大
小。
2.2.2温度显示
将数据用四位一体数码管显示,处理过程主要由单片机程序控制
3.硬件系统设计
3.1总体电路设计
总电路原理图和PCB图如下
-1-
-2-
3.2主控制器STC12C5404AD
STC12C5410系列单片机是单时钟/机器周期的兼容8051核单片机,是高速/低功耗的新一代8051单片机,全新的流水线/精简指令集结构,部集成MAX810专用复位电路。
3.3测温电路工作原理
3.3.1测温电路的选择
①恒流源法
-3-
②电桥法:
精度高但电路较为复杂
③分压法:
电路简单但精度差综合考虑,本设计选择分压法下图为本实验测温电路原理图
分压电路ADC7
热敏电阻R14,R16不能太大,否则会分流
-4-
3.4显示电路工作原理
数码管驱动电路如图所示
4个三极管所在电路为数码管位选端驱动电路,端口分别为W1,W2,W3,W4。
其余A-H为数码管段选段
3.5下载电路
电脑USB接口供电,约5V。
TXD、RXD接口用于下载程序。
-5-
4.程序设计
#include"
reg51.h"
#include"
intrins.h"
math.h"
typedefunsignedcharBYTE;
typedefunsignedintWORD;
/*DeclareSFRassociatedwiththeADC*/sfrAUXR=0x8e;
sfrADC_CONTR=0xC5;
//ADCcontrolregister
sfrADC_DATA=0xC6;
//ADChigh8-bitresultregistersfrADC_LOW2=0xBE;
//ADClow2-bitresultregistersfrP1M0=0x91;
//P1modecontrolregister0
sfrP1M1=0x92;
//P1modecontrolregister1
#defineADC_POWER0x80//ADCpowercontrolbit#defineADC_FLAG0x10//ADCcompleteflag#defineADC_START0x08//ADCstartcontrolbit#defineADC_SPEEDLL0x00//1080clocks#defineADC_SPEEDL0x20//810clocks
sbitpoint=P3^7;
//小数点
sbitW1
=P3^2;
//数码管位选
sbitW2
=P3^3;
sbitW3
=P3^4;
sbitW4
=P3^5;
#defineADC_SPEEDH0x40//540clocks#defineADC_SPEEDHH0x60//270clocks
voidDelay(WORDn);
voidInitADC();
voiddelay_s(unsignedintN);
voiddisplay(unsignedcharnum,unsignedx);
voiddisplay_num(unsignedintnum);
voidget_data();
unsignedchartab[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
//0x84,0xf5,0x89,0xc1,0xf0,0xc2,0x82,0xe5,0x80,0xe00xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90
floatwendu;
unsignedinttemp=0;
floatR=0;
unsignedcharflag=0;
BYTEch=7;
//ADCchannelNO.
-6-
voidmain()
{
InitADC();
//InitADCsfrAUXR|=0x10;
//setEADCI
IE=0xa0;
//EnableADCinterruptandOpenmasterinterruptswitch
while
(1)
display_num(wendu);
}
/*----------------------------
ADCinterruptserviceroutine
----------------------------*/voidadc_isr()interrupt5using1
flag++;
ADC_CONTR&
=!
ADC_FLAG;
//ClearADCinterruptflag
temp=ADC_DATA;
temp=temp<
<
2;
temp=temp|ADC_LOW2;
if(flag==10)
flag=0;
if(temp<
451)//TEMP=10240/(R+10)
wendu=(42.16-11059.2/temp)*100;
//-720c;
38.3988K12.69K,
TEMP(211,451)T=31.36-1.08*R
elseif(451<
=temp<
=518)
wendu=(61.91-18944.0/temp)*100;
//2025c;
12.65k,10k
TEMP(451,512)T=43.41-1.85*R
elseif(512<
=655)
wendu=(96.87-37478.4/temp)*100;
//2640c;
9.5762k,5.734k
TEMP(523,651)T=60.269-3.66576*R
elseif(655<
=800)
wendu=(149.53-72089.6/temp)*100;
//4160c;
5.54.5k,2.825k
TEMP(659,798)T=79.134-7.04*R
else
wendu=(291.23-185856.0/temp)*100;
//6190c;
2.7762k1.236k
TEMP(801,911)T=109.731-18.147*R
-7-
ADC_CONTR=ADC_POWER|ADC_SPEEDHH|ADC_START|ch;
voidInitADC()
P1=P1M0=P1M1=0xff;
//SetallP1asOpen-DrainmodeADC_DATA=0;
//Clearpreviousresult
ADC_CONTR=ADC_POWER|ADC_SPEEDL|ADC_START|ch;
Delay
(2);
//ADCpower-ondelayandStartA/Dconversion
voidSendData(BYTEdat)
while(!
TI);
//WaitforthepreviousdataissentTI=0;
//ClearTIflag
SBUF=dat;
//Sendcurrentdata
voidget_data()
floatval=0.0;
floatr=0.0;
temp=ADC_DATA;
temp<
temp=temp|ADC_LOW2;
wendu=(35.28-1.1*r)*10;
//35.28-1.1*10240/TEMP+11
46.28-11264/TEMP
voidDelay(WORDn)
WORDx;
while(n--)
x=5000;
while(x--);
voiddelay_s(unsignedintN)
while(N--);
voiddisplay(unsignedcharnum,unsignedx)
-8-
switch(x)
case1:
W1=0;
W2=1;
W3=1;
W4=1;
point=1;
P1=tab[num];
break;
case2:
W1=1;
W2=0;
point=0;
case3:
W3=0;
case4:
W4=0;
//default:
P1=0x00;
P3=0x00;
delay_s(300);
voiddisplay_num(intnum)
unsignedcharg,s,b,q;
if(num>
=0)
q=num/1000;
b=num/100%10;
s=num/10%10;
g=num%10;
display(q,1);
P1=0xff;
display(b,2);
display(s,3);
display(g,4);
num=0-num;
//q=num/1000;
display(10,1);
-9-
display(g,4);
P1=0xff;
5.制作过程
5.1选择测温度电路——分压法
5.2选择及购买实验器材
5.3设计实验原理图
5.4PCB工程制图
5.5制作电路板:
打印打孔,泡溶液,焊接元器件,下载程序,检测调试,成品
5.6制作后续材料
5,7相关图片:
-10-
6.心得体会
通过此次课程设计,使我更加扎实的掌握了单片机制作方面的知识,“纸上得来终觉浅,绝知此事要躬行”在设计过程中虽然遇到了一些问题,但经过一次又一次的思考,一遍又一遍的检查终于找出了问题所在,也暴露出了我这方面的知识欠缺和经验不足。
通过亲自动手制作,使我们掌握的知识更佳灵活的运用。
在这次的课程设计中不仅检验了我所学习的知识,也培养了我如何去把握一件事情。
在设计过程中,相互探讨,相互学习,相互监督。
学会了合作,学会了相互学习。
课程设计是我们专业课程知识综合应用的实践训练。
在这次设计过程中,体现出自己单独设计能力以及综合运知识的能力,体会了学以致用、收获自己劳动成果的喜悦心情,从中发现自己平时学习的不足和薄弱环节,加以弥补。
在这次设计制作过程中,我也发现了作为一个实验人员应当具备眼镜细心耐心的工作和学习的态度,比如焊接电路时需要耐心和细心,注意不能焊成短路和断路。
而且在调试电路接通电源前一定要反复检查焊接是否有误。
在做pcb板时也没有注意到焊盘问题,导致最后焊接十分麻烦。
总而言之,这次课程设计受益匪浅,收获很多,感谢老师和同学的帮助,同时感谢自己的努力,坚持到底,不放弃的精神。
6.参考资料
《单片机原理及应用》(第二版)毅刚等著
-11-