单片机原理及应用课程设计.docx
- 文档编号:23916956
- 上传时间:2023-05-22
- 格式:DOCX
- 页数:34
- 大小:208.33KB
单片机原理及应用课程设计.docx
《单片机原理及应用课程设计.docx》由会员分享,可在线阅读,更多相关《单片机原理及应用课程设计.docx(34页珍藏版)》请在冰豆网上搜索。
单片机原理及应用课程设计
单片机原理及应用课程设计
智能仪器设计基础课程设计
摘要----------------------------------------------------------------3
题目----------------------------------------------------------------3
整体设计及系统原理--------------------------------------------------3
主要硬件介绍--------------------------------------------------------4
STC89C51单片机特点-----------------------------------------------4
STC89C51引脚说明-------------------------------------------------4
硬件设计------------------------------------------------------------6
单片机最小系统--------------------------------------------------6
数码管显示电路--------------------------------------------------7
键盘电路--------------------------------------------------------8
AD转换电路-----------------------------------------------------9
信号调理电路----------------------------------------------------9
24C02电路------------------------------------------------------10
报警电路-------------------------------------------------------11
加热电路-------------------------------------------------------11
电源电路-------------------------------------------------------12
软件设计-----------------------------------------------------------12
数码管显示程序-------------------------------------------------12
24C02读写程序-------------------------------------------------14
AD转换程序----------------------------------------------------18
算数平均滤波程序----------------------------------------------18
热电阻非线性校正算法------------------------------------------19
按键子程序----------------------------------------------------20
报警子程序----------------------------------------------------23
PID子程序----------------------------------------------------23
主程序--------------------------------------------------------23
课程设计总结--------------------------------------------------27
参考文献------------------------------------------------------27
附录:
系统原理图
系统PCB图
摘要:
随着电子技术的飞速发展,单片机在国民经济生产各行业发挥了重要的作用。
它因为集成度高、体积小、运行可靠、应用灵活、价格低、面向控制等特点得到了广大工程技术人员和客户的好评。
在温度控制方面,单片机能够代替常规的模拟调节器。
本文主要设计了单片机炉温控制系统硬件电路和软件程序。
系统具有工作可靠、实时性强等特点,满足控制精度的要求。
本着在满足系统性能要求的前提下,尽可能的减少硬件成本。
本文主要涉及到控制系统的硬件设计和单片机的控制软件编程。
本系统选用热电阻Cu50对炉温进行检测,在AD0804完成模数转换之后,STC89C51单片机对数据进行处理。
人机接口电路部分能实现温度设定、温度显示、超温报警等功能。
题目:
20.试设计智能仪表
实现智能数字显示仪表。
要求8位数码管显示(4位显示测量值,4位显示设定值),4输入按钮(功能选择、数码管选择、数字增加、数字减少),可设定上下限报警,蜂鸣器报警。
适配Cu50热电阻,测温范围为0℃~130℃。
采用比例控制、并用晶闸管移相驱动1000W电加热器(电源电压为AC220V)。
整体设计及系统原理:
在系统中,利用热电阻测得电阻炉实际温度并转换成毫伏级电压信号。
该电压信号经过温度检测电路转换成与炉温相对应的数字信号进入单片机,单片机进行数据处理后,通过LED数码管显示温度并判断是否报警,同时将温度与设定温度比较,根据设定的P算法计算出控制量,根据控制量通过控制双向晶闸管的导通和关闭从而控制电阻丝的导通时间,以实现对炉温的控制。
该系统中的时钟电路可以根据要求进行准确计时。
主要硬件介绍:
STC89C51是改进型的51内核单片机,它比人们常用的AT89S51单片机编程更简单。
STC89C51单片机特点:
12时钟/6时钟机器周期的8051CPU;工作电压3.4-5.5V;工作频率0-40MHz;
程序存储器容量4KB;RAM容量512B;I/O端口与AT89S51相同;通过串口(P3.0P3.1)直接下载用户程序到代码存储器中(ISP功能),可下载10万次以上;具有EEPROM;具有看门狗,冷启动后未关闭状态,一旦启动无法关闭;3个定时计数器;2个外部中断,掉电模式可由外部中断低电平触发唤醒;一个异步串行口;温度范围0-75℃(商业),-40-85℃(工业);具有PDIP-40、PLCC-44、PQFP-44封装。
STC89C51引脚说明:
VCC:
供电电压。
GND:
接地。
P0口:
P0口为一个8位漏级开路双向I/O口,每脚可吸收8TTL门电流。
当P1口的管脚第一次写1时,被定义为高阻输入。
P0能够用于外部程序数据存储器,它可以被定义为数据/地址的第八位。
在FIASH编程时,P0口作为原码输入口,当FIASH进行校验时,P0输出原码,此时P0外部必须被拉高。
P1口:
P1口是一个内部提供上拉电阻的8位双向I/O口,P1口缓冲器能接收输出4TTL门电流。
P1口管脚写入1后,被内部上拉为高,可用作输入,P1口被外部下拉为低电平时,将输出电流,这是由于内部上拉的缘故。
在FLASH编程和校验时,P1口作为第八位地址接收。
P2口:
P2口为一个内部上拉电阻的8位双向I/O口,P2口缓冲器可接收,输出4个TTL门电流,当P2口被写“1”时,其管脚被内部上拉电阻拉高,且作为输入。
并因此作为输入时,P2口的管脚被外部拉低,将输出电流。
这是由于内部上拉的缘故。
P2口当用于外部程序存储器或16位地址外部数据存储器进行存取时,P2口输出地址的高八位。
在给出地址“1”时,它利用内部上拉优势,当对外部八位地址数据存储器进行读写时,P2口输出其特殊功能寄存器的内容。
P2口在FLASH编程和校验时接收高八位地址信号和控制信号。
P3口:
P3口管脚是8个带内部上拉电阻的双向I/O口,可接收输出4个TTL门电流。
当P3口写入“1”后,它们被内部上拉为高电平,并用作输入。
作为输入,由于外部下拉为低电平,P3口将输出电流(ILL)这是由于上拉的缘故。
P3口也可作为AT89C51的一些特殊功能口,如下表所示:
口管脚备选功能
P3.0RXD(串行输入口)P3.1TXD(串行输出口)
P3.2/INT0(外部中断0)P3.3/INT1(外部中断1)
P3.4T0(记时器0外部输入)P3.5T1(记时器1外部输入)
P3.6/WR(外部数据存储器写选通)P3.7/RD(外部数据存储器读选通)
P3口同时为闪烁编程和编程校验接收一些控制信号。
RST:
复位输入。
当振荡器复位器件时,要保持RST脚两个机器周期的高电平时间。
ALE/PROG:
当访问外部存储器时,地址锁存允许的输出电平用于锁存地址的地位字节。
在FLASH编程期间,此引脚用于输入编程脉冲。
在平时,ALE端以不变的频率周期输出正脉冲信号,此频率为振荡器频率的1/6。
因此它可用作对外部输出的脉冲或用于定时目的。
然而要注意的是:
每当用作外部数据存储器时,将跳过一个ALE脉冲。
如想禁止ALE的输出可在SFR8EH地址上置0。
此时,ALE只有在执行MOVX,MOVC指令是ALE才起作用。
另外,该引脚被略微拉高。
如果微处理器在外部执行状态ALE禁止,置位无效。
/PSEN:
外部程序存储器的选通信号。
在由外部程序存储器取指期间,每个机器周期两次/PSEN有效。
但在访问外部数据存储器时,这两次有效的/PSEN信号将不出现。
/EA/VPP:
当/EA保持低电平时,则在此期间外部程序存储器(0000H-FFFFH),不管是否有内部程序存储器。
注意加密方式1时,/EA将内部锁定为RESET;当/EA端保持高电平时,此间内部程序存储器。
在FLASH编程期间,此引脚也用于施加12V编程电源(VPP)。
硬件设计:
单片机最小系统:
时钟电路采用12MHz的晶振和两个30pF的电容连接而成,是单片机的机器周期为1us左右,在使用定时器时便于计算和设置定时器的初始值。
复位电路:
由于机器周期为2us,所以RESET引脚上产生一个2us以上的高电平脉冲,即可产生复位动作。
电源接上瞬间,电容上没有电荷,相当于短路,所以复位引脚直接连到VCC,单片机复位,随时间增加,电容上电压逐渐变大,RESET引脚上电压逐渐降低至低电平时,单片机恢复正常状态,在此使用10k电阻,10uF电容,时间常数远大于2us,高电平能保持2us以上,足以使系统复位。
串口可以用来向单片机里下载程序,以及和计算机通讯等。
数码管显示电路:
此电路采用8个数码管和一个74LS245,一个74LS138和一个排阻组成。
74LS245是一个8双向总线接收器,与单片机的P0口相接,控制数码管的段选端。
由于P0口内部没有上拉电阻,所以做输出口时,必须外接上拉电阻。
74LS138是一个3-8译码器,与P2口的高三位相接,经过译码控制数码管的位选端,数码管都是共阳数码管。
键盘电路:
4个按键分别与单片机的P3.3、P2.2、P2.3、P2.4相接,功能分别为功能选择、数码管选择,加数字、减数字,都是低电平有效,都接上拉电阻是保证没有键按下时,均为高电平,其中功能键按下时会触发外部中断。
AD转换电路:
ADC0804是一个CMOS的逐步逼近式AD转换器,具有8为分辨率,转换时间为100us,而最大误差为1个LSB值,差动式模拟电压输入、三态数字输出,模拟输入电压为0-5V。
信号调理电路:
Cu50在0℃~130℃时电阻变化为50.000Ω——77.833Ω,左上方电路为提供1mA电流的恒流源,因此Cu50输出的电压为0.005---0.077833V的电压,通过信号调理电路将其转化为0—4.2V的电压送入AD。
可列方程组0.005m+b=0与0.077833m+b=4.2
解得m=151b=-7.55由电路图可得
可令R23=150K,R24=1K
右下方为参考电压电路Vref=(1+R22/R21)*V,可令V=0.03VR22=2KR21=3K.0.03V可由稳压管TL431经分压可得。
此电路中,放大器选择满摆幅运放TLV2472。
24C02电路:
24C02是一种由I2C接口的EEPROM存储芯片,存储容量为256B,100万次的编程/擦除周期,数据保存可达100年。
在此电路中使用此芯片是要保存仪表中某些已设定好的数据,当掉电后,数据不会丢失。
由于I2C总线是开漏结构,因此时钟线SCL和数据线SDA用10kΩ电阻上拉到高电平。
报警电路:
该报警电路由蜂鸣器和发光二极管、PNP三极管组成,当单片机的P2.0口输出低电平时三极管基极为低电平,三极管导通,蜂鸣器工作发出响声,同时发光二极管也导通,发光。
三极管在此处是为了驱动蜂鸣器和发光二极管工作。
在软件设计中可设置当温度超过上限或下限时,报警电路工作。
加热电路:
单片机驱动移相型驱动器、具有点阻性负载的电路如上图所示。
移相型驱动器可以在单片机控制驱动器的瞬间使驱动器MOC3022触发双向晶闸管BTA12,因此可以按照单片机发出的控制信号控制双向晶闸管导通角。
其中R9=(5V-VOL-VF)/IFT=2V/10mA=200Ω,电阻R11用于限制MOC3022的输出电流ITSM,计算公式如下:
R11=Vpeak/ITSM=(220
)V/1A=311Ω.
第二个电路为电压过零检测电路,当电压过零时,向单片机发一个中断,单片机可以按照此信号控制双向晶闸管的导通角。
电源电路:
这是仪表的供电电路可以通过外接直流电源,然后通过该电源电路给仪表供电。
电路图中的二极管桥式电路是滤波电路。
接入电源后通过稳压模块7805稳压最终获得+5V的电压。
最左面的发光二极管是检测电源是否接通。
通电时,二极管亮。
软件设计:
数码管显示程序:
#defineucharunsignedchar
#defineuintunsignedint
voiddelay(uintx)//延时函数大约延时5ms
{
ucharm,n;
for(m=x;m--;m>0)
for(n=60;n--;n>0);
}
voiddisplay1(uchara,ucharb,ucharc,uchard)//设定值显示
{
P2=0x8f&P2;//送第一个数码管的位码
P0=a;//送第一个数码管的段码
delay(10);//短暂延时
P2=0x9f&P2;//送第二个数码管的位码
P0=b;//送第二个数码管的段码delay(10);
P2=0xaf&P2;//送第三个数码管的位码
P0=c;//送第三个数码管的段码
delay(10);
P2=0xbf&P2;//送第四个数码管的位码
P0=d;//送第四个数码管的段码
delay(10);
}
voiddisplay2(uchara,ucharb,ucharc,uchard)//测量值显示
{
P2=0xcf&P2;//送第一个数码管的位码
P0=a;//送第一个数码管的段码
delay(10);
P2=0xdf&P2;//送第二个数码管的位码
P0=b;//送第二个数码管的段码
delay(10);
P2=0xef&P2;//送第三个数码管的位码
P0=c;//送第三个数码管的段码
delay(10);
P2=0xff&P2;//送第四个数码管的位码
P0=d;//送第四个数码管的段码
delay(10);
}
24C02读写程序:
#defineucharunsignedchar
#defineuintunsignedint
uchara;
sbitsda=P3^4;
sbitscl=P3^5;
voiddelay()
{;;}
voidstart()//启用总线
{
sda=1;
delay();
scl=1;
delay();
sda=0;
delay();
}
voidstop()//停用总线
{
sda=0;
delay();
scl=1;
delay();
sda=1;
delay();
}
voidreply()//应答信号
{
uchari;
scl=1;
delay();
while((sda==1)&&(i<250))
i++;
scl=0;
delay();
}
voidfirst()//24C02初始化程序
{
sda=1;
delay();
scl=1;
delay();
}
voidwrite(uchardate)//写一个字节的程序
{
uchark,temp;
temp=date;
for(k=0;k<8;k++)
{
temp=temp<<1;
scl=0;
delay();
sda=CY;
delay();
scl=1;
delay();
}
scl=0;
delay();
sda=1;
delay();
}
ucharread()//读一个字节的程序
{
uchari,m;
scl=0;
delay();
sda=1;
delay();
for(i=0;i<8;i++)
{
scl=1;
delay();
m=(m<<1)|sda;
scl=0;
delay();
}
returnm;
}
voiddelay1(intx)//延时程序
{
uchara,b;
for(x=a;a>0;a--)
for(b=100;b>0;b--);
}
voidwrite_add(ucharaddress,uchardate)//写程序
{
start();
write(0xa0);
reply();
write(address);
reply();
write(date);
reply();
stop();
}
ucharread_add(ucharaddress)//读程序
{
uchardat;
start();
write(0xa0);
reply();
write(address);
reply();
start();
write(0xa1);
reply();
dat=read();
stop();
returndat;
}
AD转换程序:
sbitwr=P3^6;
sbitrd=P3^7;
#defineuintunsignedint
#defineucharunsignedchar
uintAD()//AD转换函数
{
ucharAD;
wr=0;
delay
(2);
wr=1;
delay(20);
rd=0;
delay
(2);
P1=0xff;
AD=P1;
rd=1;
returnAD;
}
算数平均滤波子程序:
#defineN8//定义采样次数
ucharvalue_buf[N];
ucharlvbo()//滤波函数
{
uchari;
ucharcount;
intsum=0;
value_buf[i++]=AD;//获取AD转换结果,并计算累加和
if(i==N)
i=0;
for(count=0;count sum+=value_buf[count]; return(uchar)(sum/N); } 热电阻的非线性校正算法: 热电阻Cu50的阻值与温度的关系,并非是绝对的线性关系,因此为了使仪表误差较小应该对热电阻进行非线性校正。 在1mA的恒定电流下, 热电阻的电压与温度变化的关系如下表所示: T/℃ 0 10 20 30 40 50 60 U/mA 50.000 52.144 54.285 56.426 58.565 60.704 64.842 T/℃ 70 80 90 100 110 120 130 U/mA 64.981 67.119 69.259 71.400 73.542 75.687 77.833 程序: uintvar; uintcodeRtable[]={5000052144542855642658565607046484264981671196925971400735427568777833}//热电阻的电压值,每隔10度对应一个电压 //值 voidtab()//查表子函数 { uintv1=0,max,min,min,mid,j; v1=AD*1000;//AD采样值扩大1000倍,因为表中电压值扩大//了1000倍 min=0;max=13;//给出表格的初始元素序号与最后元素的序号 while (1)//开始查表 { mid=(max+min)/2;//中心元素位置 if(Rtable[mid]=v1)var=mid*10;break;//中心元素等于查表得元素 //计算相应温度 if(Rtable[mid]>v1)max=mid; elsemin=mid; if((max-min)<=1)//多次循环后,获得v1值对应的下限值元素序//号与上限元素序号 { j=(Rtable[max]-Rtable[min])/10;//表中相邻两值对应温度相差//10度 j=(v1-Rtable[min])/j;//得到max-min之间的电压/度 var=10*min+j;//获得总温度 break; } } } 按键子程序: ucharba,sh,ge,sf,m; sbitset=P3^3; sbitxuan=P2^2; sbitjia=P2^3; sbitjian=P2^4; voidkey()//按键函数 { uchari; if(xuan==0)//按下数码管选择键 { delay(10);//延时消抖 if(xuan==0)//再次确认是否按下 { i=i+0x10;//位选值加1 if(i==0xcf) i=0x8f; P2=P2&i;//送入位选 while(! xuan);//等待松手 while((jia! =0)&&(jian! =0)&&(set! =0)&&(xuan! =0))//数码管闪烁 { P0=0xff; delay(20); P0=0x00; delay(20); } } } if(jia==0)//加数子程序 { delay(10); if(jia==0) { switch(i)//选择要加数的数码管 { case
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 单片机 原理 应用 课程设计