at89s51单片机简介(7篇)
1.at89s51单片机简介 篇一
C51单片机电子计算器课程设计
一.课程设计背景
当今时代,是一个新技术层出不穷的时代。在电子领域,尤其是自动化智能控制领域,传统的分立元件或数字逻辑电路构成的控制系统正以前所未见的速度被单片机智能控制系统所取代。单片机具有体积小、功能强、成本低、应用面广等优点,可以说,智能控制与自动控制的核心就是单片机。目前,一个学习与应用单片机的高潮正在工厂、学校及企事业单位大规模地兴起。过去习惯于传统电子领域的工程师、技术员正面临着全新的挑战,如不能在较短时间内学会单片机,势必会被时代所遗弃,只有勇敢地面对现实,挑战自我,加强学习,争取在较短的时间内将单片机技术融会贯通,才能跟上时代的步伐。
它所给人带来的方便也是不可否定的,它在一块芯片内集成了计算机的各种功能部件,构成一种单片式的微型计算机。20世纪80年代以来,国际上单片机的发展迅速,其产品之多令人目不暇接,单片机应用不断深入,新技术层出不穷。20世纪末,电子技术获得了飞速的发展,在其推动下,现代电子产品几乎渗透了社会的各个领域,有力地推动了社会生产力的发展和社会信息化程度的提高,同时也使现代电子产品性能进一步提高,产品更新换代的节奏也越来越快。本设计是由单片机实现的模拟计算器,它不仅能实现数据的加减乘除运算,而且还能使数据及其计算结果在数码管上显示出来,能够实现0-256的数字四则运算。本设计是用单片机AT89C51来控制,采用共阳极数码显示,软件部分是由C语言来编写的。设计任务
二、元器件清单及简介
89c51型芯片 一片
排阻 两个
晶振12MHZ 一个
电容22uf 两个
面包板 三个
导线 若干
三、设计原理及分析
根据功能和指标要求,本系统选用MCS 51 单片机为主控机。通过扩展必要的外围接口电路,实现对计算器的设计。具体设计考虑如下: ①由于要设计的是简单的计算器,可以进行四则运算,对数字的大小范围要求不高,故我们采用可以进行四位数字的运算,选用8 个LED 数码管显示数据和结果。
②另外键盘包括数字键(0~9)、符号键(+、-、×、÷)、清除键和等号键,故只需要16 个按键即可。系统模块图:
2.1 输入模块:
键盘扫描计算器输入数字和其他功能按键要用到很多按键,如果采用独立按键的方式,在这种情况下,编程会很简单,但是会占用大量的I/O 口资源,因此在很多情况下都不采用这种方式。为此,我们引入了矩阵键盘的应用,采用四条I/O 线作为行线,四条I/O 线作为列线组成键盘。在行线和列线的每个交叉点上设置一个按键。这样键盘上按键的个数就为4×4个。这种行列式键盘结构能有效地提高单片机系统中I/O 口的利用率。矩阵键盘的工作原理:计算器的键盘布局如图所示:一般有16 个键组成,在单片机中正好可以用一个P 口实现16 个按键功能,这种形式在单片机系统中也最常用。
以上键盘从上到下依次编号为1,2,3,4,D,C,B,A 1
由图 3 矩阵键盘内部电路图可以知道,当无按键闭合时,P10~P13 与P14~P17 之间开路。当有键闭合时,与闭合键相连的两条I/O 口线之间短路。判断有无按键按下的方法是:第一步,置列线P14~P17 为输入状态,从行线P10~P13 输出低电平,读入列线数据,若某一列线为低电平,则该列线上有键闭合。第二步,行线轮流输出低电平,从列线P14~P17 读入数据,若有某一列为低电平,则对应行线上有键按下。综合一二两步的结果,可确定按键编号。但是键闭合一次只能进行一次键功能操作,因此须等到按键释放后,再进行键功能操作,否则按一次键,有可能会连续多次进行同样的键操作。2.2 运算模块:(单片机控制)AT89C51 单片机是在一块芯片中集成了CPU、RAM、ROM、定时器/计数器和多功能I/O等一台计算机所需要的基本功能部件。如果按功能划分,它由如下功能部件组成,即微处理器(CPU)、数据存储器(RAM)、程序存储器(ROM/EPROM)、并行I/O 口、串行口、定时器/计数器、中断系统及特殊功能寄存器(SFR)。[3][5]单片机是靠程序运行的,并且可以修改。通过不同的程序实现不同的功能,尤其是特殊的独特的一些功能,通过使用单片机编写的程序可以实现高智能,高效率,以及高可靠性!因此我们采用单片机作为计算器的主要功能部件,可以进行很快地实现运算功能。2.3 显示模块:
LED 显示发光二极管LED 是单片机应用系统中的一宗简单而常用的输出设备,其在系统中的主要作用是显示单片机的输出数据、状态等。因而作为典型的外围器件,LED 显示单元是反映系统输出和操作输入的有效器件。LED 具备数字接口可以方便的和大年纪系统连接;它的优点是价格低,寿命长,对电压电流的要求低及容易实现多路等,因而在单片机应用系统中获得了广泛的应用。[2][4]通常的数码显示器是由7 段条形的LED 组成(如图4 所示),点亮适当的字段,就可显示出不同的数字。我们采用8 段数码管,其中位于显示器右下角的LED 作小数点用。LED 显示器有两种不同的形式:共阴极和共阳极。本次设计采用共阴极接法(如图5所示)。
3、软件设计
在程序设计方法上,模块化程序设计是单片机应用中最常用的程序设计方法。设计的中心思想是把一个复杂应用程序按整体功能划分成若干相对独立的程序模块,各模块可以单独设计、编程和调试,然后组合起来。这种方法便于设计和调试,容易实现多个程序共存,但各个模块之间的连接有一定的难度。根据需要我们可以采用自上而下的程序设计方法,此方法先从主程序开始设计,然后再编制各从属程序和子程序,层层细化逐步求精,最终完成一个复杂程序的设计。这种方法比较符合人们的日常思维,缺点是一级的程序错误会对整个程序产生影响。功能流程图如下:
4、硬件原理 以下为简易计算器的总体电路图
加运算:
减运算:
乘运算:
除运算:
清零: 四.总结
通过此次单片机实训设计,我们学到了很多东西,在器件的了解和器件选择上有个明确的认识,并在程序的设计,及理论在实践反面的运用能力有巨大的提高。
这次单片机课程设计由我们六位同学经过一周努力设计得到。软件的编程要我们不断的调试,最终我们终于完成了单片机实训课程设计,很高兴它能按着设计思想与要求运动起来。
当然,这其中也有很多的问题。第一、不够细心,由于对课本理论的不熟悉导致的编程错误,对于器件的实际情况的不了解,理论与实践的差距导致我们在设计实际电路时出现了很多错误,使得实验不能一次通过。第二、是在学习态度上,这次课程设计是对我们的学习态度的一次体验。对于这次单片机综合课程实习,我们的第一大心得体会就是作为一名工程技术人员,要求具备的首要素质绝对应该是严谨,这次的课程设计我们所遇到的问题多半是由于我们不够严谨。第三、在做人上,我们认识到,无论做什么事情,只要你足够坚强,有足够的毅力和决心,有足够的挑战困难的勇气,就没什么办不到的。还有就是团队的合作精神。
在这次难得的课程设计过程中我们锻炼了自己的思考能力和动手能力,加强了我们思考问题的完整性和实际生活联系的可行性。在方案设计选择和芯片的选择上,培养了我们综合应用单片机的能力,对单片机的各个管脚的功能也有了进一步的认识。还锻炼我们个人的查阅技术资料的能力,动手能力,发现问题、解决问题的能力。
五.参考文献
《单片机原理及应用》 张毅刚 高等教育出版社
《MCS—51单片机应用设计》 张毅刚 哈尔滨工业大学出版社 《MCS—51系列单片机实用接口技术》 李华 北京航空航天大学出版社 《单片机应用技术选集》 何立民 北京航空航天大学出版社 《单片机原理及其接口技术》 胡汉才 《数码管显示驱动和键盘扫描控制器CH451及其应用》
清华大学出版社 施隆照 /*********************************************** **实现说明:
1:变量flag_fuhao为键入+、-、*、/运算符标志
(即当前一个键值为+、-、*、/运算符时,flag_fuhao为1,其他键值则flag_fuhao置零,其用在显示时)
2:变量flag_shu数输入情况,flag_shu为0时,输入的符号无效(flag_shu为2时,变量fuhao更新为新键值)
*********************************************/ #include
sbit OFF = P1^0;//关机键定义
float shu1,shu2;//进行运算的两个变量数 uchar num;////键盘扫描返回值
char flag1,flag_shu,flag_fuhao,fuhao,newkey,update;
//flag1开机标志newkey新按键标志,fuhao运算符,update表示等于号 //之后紧接着输入的是数的话则清零shu1
char key_shu;//按键值 char ge=0xdf;//char code Wela[]={0xdf,0xef,0xf7,0xfb,0xfd,0xfe};//六位数码管的位选
unsigned char code Duan[]={0x3f,0x06,0x5b, //
0 1 2 0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x00};// 3 4 5 6 7 8 9 无显示
共阴极数码管
// 函数声明
uchar keyscan();//键盘扫描函数
void display(float);//数码管显示函数
void delay(uint i)//延时函数 {
while(i--);}
/***********************************************
主函数
************************************************/ void main(){
flag1=0;//标志关机
while(1){
if(keyscan()==15)//开机检测
{
flag1=1;//标志开机
shu1=shu2=fuhao=flag_shu=newkey=0;//初始化变量
while(flag1)//判断是否已开机
{
if(!flag_fuhao)
display(shu1);//如果输入的不是
else
display(shu2);
key_shu=keyscan();
if(newkey==1)//有新键值
{
if(key_shu==15)//按下ON/C键,清零
{
flag_fuhao=update=0;
shu1=shu2=fuhao=flag_shu=newkey=0;
}
else if(key_shu==14&&flag_shu==1&&fuhao)//按下“=”
{
switch(fuhao)
{
case 10:shu1=shu2+shu1;break;
case 11:shu1=shu2-shu1;break;
case 12:shu1=shu2*shu1;break;
case 13:shu1=shu2/shu1;break;
}
flag_fuhao=0;
fuhao=0;
update=1;
} 10
else if((key_shu>=0)&&(key_shu<=9))//按下数字键
{
if(update)
shu1=0;
if(shu1<100000)
{
shu1=key_shu+shu1*10;
flag_shu=1;
}
update=0;
flag_fuhao=0;
}
else if((key_shu>=10)&&(key_shu<=13))//按下运算符
{
flag_fuhao=1;//表示按下了运算符号键
update=0;
if(flag_shu==1)//表示之前有数字键按下
{
if(fuhao==0)//表示计算时只有一次按下运算符,如1*8=8,第二个数字后面是=,而不是其他运算符
{
shu2=shu1;
shu1=0;
fuhao=key_shu;//将按下的运算符号的键的值赋值给fuhao,记录前一个运算符,以便按=后实现相应的计算。
flag_shu=2;
}
else
//表示计算时按了多次运算符,如1*8*9=72,第二个数字后面并没有=,而是*
{
switch(fuhao)
{
case 10:shu2=shu2+shu1;break;
case 11:shu2=shu2-shu1;break;
case 12:shu2=shu2*shu1;break;
case 13:shu2=shu2/shu1;break;
}
shu1=0;
fuhao=key_shu;//将按下的运算符号的键的值赋值给fuhao,记录前一个运算符,以便按=后实现相应的计算。
}
}
else if(flag_shu==2)
fuhao=key_shu;//将按下的运算符号的键的值赋值给fuhao,记录前一个运算符,以便按=后实现相应的计算。
}
newkey=0;
}
}
} } }
/***********************************************
数码管显示函数
************************************************/ void display(float dis_shu){
long zhengshu=(long)dis_shu;char dis_flag,dis_aa,dis_zero=0;uchar dis_data[6]={0,0,0,0,0,0},xiaoshu[6]={0,0,0,0,0,0};
ge=0xdf;//11 01 111 if(zhengshu>99999)dis_flag=6;else if(zhengshu>9999)dis_flag=5;else if(zhengshu>999)dis_flag=4;else if(zhengshu>99)dis_flag=3;else if(zhengshu>9)dis_flag=2;else dis_flag=1;
dis_shu=dis_shu-zhengshu;
for(dis_aa=0;(dis_aa<6-dis_flag)&&(dis_shu=(dis_shu-(char)dis_shu)*10);dis_aa++){
xiaoshu[dis_aa]=(long)dis_shu;}
for(dis_aa=0;(dis_aa<6-dis_flag);dis_aa++){
if(dis_zero||xiaoshu[5-dis_flag-dis_aa])12
{
duan=Duan[xiaoshu[5-dis_flag-dis_aa]];
wei=ge;
ge>>=1;
delay(100);
wei=0xff;
dis_zero=1;
} }
// for(dis_aa=0;dis_aa
dis_data[dis_aa]=zhengshu%10;
zhengshu=zhengshu/10;} //数码管段选
for(dis_aa=0;dis_aa
if(0xdf!=ge&&dis_aa==0)
{
duan=Duan[dis_data[dis_aa]]|0x80;
wei=ge;
ge>>=1;
delay(100);
wei=0xff;
}
else
{
duan=Duan[dis_data[dis_aa]];
wei=ge;
ge>>=1;
delay(100);
wei=0xff;
}
} //数码管位选 }
/***********************************************
键盘扫描函数
************************************************/ uchar keyscan()// 函数返回按键的值
{
//将第一行线置低电平,其余行线全部为高电平,即扫描第一行
key=0xfe;
if(key!=0xfe){
delay(500);//延时消抖操作
if(key!=0xfe)
{
switch(key)
{
case 0xee:num=7;break;//7
case 0xde:num=8;break;//8
case 0xbe:num=9;break;//9
case 0x7e:num=13;break;//除号 ”/”
}
newkey=1;
delay(500);
while(key!=0xfe)
{
if(flag1)//如果已开机
if(!shu1&&num>=0&&num<=9)//如果输入的第一个数不为0且第二个数为数字,则显示第二个数字,否则显示第一个数字
display(num);
else
display(shu1);
}
return num;
} }
//将第二行线置低电平,其余行线全部为高电平,即扫描第二行
key=0xfd;if(key!=0xfd){
delay(500);//延时消抖操作
if(key!=0xfd)
{
switch(key)
{
case 0xed:num=4;break;//4
case 0xdd:num=5;break;//5
case 0xbd:num=6;break;//6
case 0x7d:num=12;break;//*
}
newkey=1;
delay(500);
while(key!=0xfd)
{
if(flag1)
if(!shu1&&num>=0&&num<=9)//如果输入的第一个数不为0且第二个数为数字,则显示第二个数字,否则显示第一个数字
display(num);
else
display(shu1);
}
return num;
} }
//将第三行线置低电平,其余行线全部为高电平,即扫描第三行
key=0xfb;if(key!=0xfb){
delay(500);
if(key!=0xfb)
{
switch(key)
{
case 0xeb:num=1;break;//1
case 0xdb:num=2;break;//2
case 0xbb:num=3;break;//3 15
case 0x7b:num=11;break;//-
}
newkey=1;
delay(500);
while(key!=0xfb)
{
if(flag1)
if(!shu1&&num>=0&&num<=9)//如果输入的第一个数不为0且第二个数为数字,则显示第二个数字,否则显示第一个数字
display(num);
else
display(shu1);
}
return num;
} }
//将第四行线置低电平,其余行线全部为高电平,即扫描第四行
key=0xf7;if(key!=0xf7){
delay(500);
if(key!=0xf7)
{
switch(key)
{
case 0xe7:num=15;break;// ON/C:开关机按键
case 0xd7:num=0;break;// 0
case 0xb7:num=14;break;// =
case 0x77:num=10;break;// +
}
newkey=1;
delay(500);
while(key!=0xf7)
{
if(flag1)
if(!shu1&&num>=0&&num<=9)//如果输入的第一个数不为0且第二个数为数字,则显示第二个数字,否则显示第一个数字
display(num);
else
display(shu1);
} 16
return num;
} }
//判断关机按键是否被按下 if(!OFF){
delay(500);//延时消抖操作
if(!OFF)
{
flag1=0;//
}
} return 100;
}
若关机按键被按下,则将关机标志位flag1置1 17
2.at89s51单片机简介 篇二
1 系统设计
本电子琴系统主要包括MCS-51单片机,键盘模块,发声模块以及显示模块,电路设计框图如图1所示。
2 硬件系统设计
2.1 MCS-51单片机
本系统的单片机选用AT89S51单片机[1],AT89S51是一个低功耗,高性能CMOS 8位单片机,片内含4k Bytes ISP(In-system programmable)的可反复擦写1000次的Flash只读程序存储器,器件采用ATMEL公司的高密度、非易失性存储技术制造,兼容标准MCS-51指令系统及80C51引脚结构,芯片内集成了通用8位中央处理器和ISP Flash存储单元,功能强大的微型计算机的AT89S51可为许多嵌入式控制应用系统提供高性价比的解决方案。[1,4,5]
AT89S51具有如下特点:40个引脚,4k Bytes Flash片内程序存储器,128bytes的随机存取数据存储器(RAM),32个外部双向输入/输出(I/O)口,5个中断优先级2层中断嵌套中断,2个16位可编程定时计数器,2个全双工串行通信口,看门狗(WDT)电路,片内时钟振荡器。此外,AT89S51设计和配置了振荡频率可为0Hz并可通过软件设置省电模式。AT89S51在空闲模式下,CPU暂停工作,而RAM定时计数器,串行口,外中断系统可继续工作,掉电模式冻结振荡器而保存RAM的数据,停止芯片其它功能直至外中断激活或硬件复位。同时该芯片还具有PDIP、TQFP和PLCC等三种封装形式,以适应不同产品的需求。AT89S51单片机管脚图如图2所示。
2.2 键盘模块
本设计键盘模块采用4*4矩阵键盘,原理图如图3所示。
在键盘中按键数量较多时,为了减少I/O口的占用,通常将按键排列成矩阵形式,如图1所示。在矩阵式键盘中,每条水平线和垂直线在交叉处不直接连通,而是通过一个按键加以连接。这样,一个端口(如P1口)就可以构成4*4=16个按键,比之直接将端口线用于键盘多出了一倍,而且线数越多,区别越明显,比如再多加一条线就可以构成20键的键盘,而直接用端口线则只能多出一键(9键)。由此可见,在在键盘中按键数量较多时,为了减少I/O口的占用,通常将按键排列成矩阵形式,如图1所示。在矩阵式键盘中,每条水平线和垂直线在交叉处不直接连通,而是通过一个按键加以连接。这样,一个端口(如P1口)就可以构成4*4=16个按键,比之直接将端口线用于键盘多出了一倍,而且线数越多,区别越明显,比如再多加一条线就可以构成20键的键盘,而直接用端口线则只能多出一键(9键)。由此可见,在需要的键数比较多时,采用矩阵法来做键盘是合理的。采用矩阵法来连接键盘是非常合理的矩阵式结构的键盘显然比独立式键盘复杂一些识别也要复杂一些在上图中列线通过电阻接电源并将行线所接的单片机4个I/O口作为输出端而列线所接的I/O口则作为输入端这样当按键没有被按下时所有的输出端都是高电平,代表无键按下。行线输出是低电平一旦有键按下,则输入线就会被拉低,这样通过读入输入线的状态就可得知是否有键按下了。[5,6]
2.3 发声模块
本设计发声模块主要采用LM386,LM386是一种音频集成功放,具有自身功耗低、电压增益可调整、电源电压范围大、外接元件少和总谐波失真小等优点,广泛应用于录音机和收音机之中。
LM386内部电路原理图如图4所示。与通用型集成运放相类似,它是一个三级放大电路。
第一级为差分放大电路,T1和T3、T2和T4分别构成复合管,作为差分放大电路的放大管;T5和T6组成镜像电流源作为T1和T2的有源负载;T3和T4信号从管的基极输入,从T2管的集电极输出,为双端输入单端输出差分电路。使用镜像电流源作为差分放大电路有源负载,可使单端输出电路的增益近似等于双端输出电容的增益。
第二级为共射放大电路,T7为放大管,恒流源作有源负载,以增大放大倍数。
第三级中的T8和T9管复合成PNP型管,与NPN型管T10构成准互补输出级。二极管D1和D2为输出级提供合适的偏置电压,可以消除交越失真。
引脚2为反相输入端,引脚3为同相输入端。电路由单电源供电,故为OTL电路。输出端(引脚5)应外接输出电容后再接负载。
电阻R7从输出端连接到T2的发射极,形成反馈通路,并与R5和R6构成反馈网络,从而引入了深度电压串联负反馈,使整个电路具有稳定的电压增益。
2.4 显示模块
LED显示模块是利用AT89S51单片机的P0端口的P0.0-P0.7连接到一个共阴数码管的a-h的笔段上,数码管的公共端接地。在数码管上循环显示0-9数字,时间间隔0.2秒。
3 发声原理及程序流程图
3.1 音乐发声原理
用电子琴可以演奏出各种美妙的音乐,而音乐是由音符组成。不同的音符是由相应频率的振动产生。由8051单片机模拟产生音符,只需算出音频周期T=1/f,利用音频的变化产生不同电平驱动发声模块,来达到产生音乐的目的,因此我们只要把一首歌曲的音阶对应频率关系弄正确即可。
利用AT89C51的内部定时器使其工作计数器模式(MODE1)下,改变计数值TH0及TL0以产生不同频率的方法产生不同音阶,例如,频率为523Hz,其周期T=1/523=1912μs,因此只要令计数器计时956μs/1μs=956,每计数956次时将I/O反相,就可得到中音DO(523Hz)。
计数脉冲值与频率的关系式是:
式中,N是计数值;fi是机器频率(晶体振荡器为12MHz时,其频率为1MHz);fr是想要产生的频率。
其计数初值T的求法如下:
例如:设K=65536,fi=1MHz,求低音DO(261Hz)、中音DO(523Hz)、高音DO(1046Hz)的计数值。
低音DO的T=65536-500000/262=63627
中音DO的T=65536-500000/523=64580
高音DO的T=65536-500000/1046=65059
单片机12MHZ晶振,高中低音符与计数T0相关的计数值如表1所示。
3.2 音乐发声程序流程图
图5为发声程序流程图。
4 结束语
本系统是利用AT89S51单片机设计的电子琴,硬件电路简单,如果设计对象是更为复杂的电子琴系统,其实际原理与方法与本设计基本相同。另外,实例所设计的计算器是用LED数码管显示的,当然也可以用其他的器件显示,如LCD液晶显示屏,这样就可以显示出更加丰富的字符,在此基础上,还可以编写更加完善的程序来实现更多的功能。
摘要:单片机的应用已经越来越贴近生活,用单片机来实现一些电子设计也变得容易起来。该文阐述的主要内容是一种基于51单片机的电子琴的设计,其核心芯片是AT89S51单片机,内部电路包括键盘模块、发声模块和显示模块,本系统运行稳定,功能较为完善,控制系统可靠,性价比较高等,具有一定的实用价值。
关键词:AT89S51单片机,电子琴,LM386,LED
参考文献
[1]龙威林,杨冠声,胡山.单片机应用入门:AT89S51和AVR[M].北京:化学工业出版社,2008.
[2]黄鑫,马善农,赵永科.基于CPLD的电子琴研究与设计[J].科技广场,2007(5).
[3]赵亮,侯国锐.单片机C语言编程与实例[M].北京:人民邮电出版社,2003.
[4]杨恢先,黄辉先.单片机原理及应用[M].北京:人民邮电出版社,2006.
[5]张虹.单片机原理及应用[M].北京:中国电力出版社,2009.
3.at89s51单片机简介 篇三
关键词: AT89S52单片机 脉搏测量
1、引言
随着生活水平的提高,人们对各种测量仪器的要求越来越高,脉搏的测量是评价人体生理状况很好的方法。本文设计的脉搏测量器可以通过手指准确测量出脉搏跳动的次数,通过发光二极管显示脉搏的跳动,并通过数码管显示出1分钟内脉搏跳动的次数。它解决了传统测量方法的不确定性和随机性,是一款性价比较高的脉搏测量器。
2、方案设计
基于AT89S52单片机的脉搏测量器由电源模块、复位电路、晶振电路、AT89S52单片机、脉搏感应电路、脉搏处理电路、脉搏次数显示电路以及脉搏显示发光二极管等组成。系统设计框图如图1所示。
3、硬件设计
电源电路为单片机以及其他模块提供标准5V电源;晶振模块为单片机提供时钟标准,使系统各部分能协调工作;复位电路模块为单片机系统提供复位功能;单片机作为主控制器,根据输入信号对系统进行相应的控制;红外发射和接收模块用来检测脉搏信号;信号变换模块用来把红外接收头接收的脉搏信号进行放大和滤波,以便单片机进行处理;显示模块用来显示具体的脉搏测量结果,它会记录脉搏一分钟跳动的次数;发光二极管可以通过发光的形式显示脉搏的跳动。设计出基于AT89S52脉搏测量器电路原理图如2所示。
4、软件设计
4.1 程序流程图
基于AT89S52单片机脉搏测量器的程序流程图如图4所示。其中初始化包含了定时器的设定、优先级的设定和初始值的设置。
4.2 程序清单
基于AT89S52单片机脉搏测量器的程序清单如下所示。
#include
unsigned char i,j,t,m,YSHSHJIAN,YSHHCHONG[3];
unsigned int n,MBO;
unsigned char code
WXUAN[3]={0xf7,0xef,0xdf}; //位选
unsigned char code
XSHB[10]={0x81,0xcf,0x92,0x86,0xcc,0xa4,0xa0,0x8f,0x80,0x84}; //字形码
sbit SHRU= P3^0;
void YSHI(YSHSHJIAN);
main() //主程序
{
TMOD=0X01; //定时器 T0 工作于方式 1
TH0=0xec;
TL0=0X78; //T0 定时时间为 5ms
IE=0X83; //开中断
IT0=1; //外部中断 0 为边沿触发方式
TR0=1; //开定时器 T0
for (;;) //脉搏指示灯控制
{
if(SHRU==0)
{
YSHI(200);
SHRU=1;
}
}
}
externa10()interrupt 0 //外部中断服务程序
{
SHRU=0; //点亮指示灯
if(n==0)
MBO=0;
else
MBO=12000/n; //计算每分钟脉搏数
YSHHCHONG[2]=MBO%10; //取个位数
MBO=MBO/10;
YSHHCHONG[1]=MBO/10; //取十位數
YSHHCHONG[0]=MBO/10; //取百位数
n=0;}
Timer0() interrupt 1 //定时中断服务程序
{
TH0=0xec;
TL0=0X78;
t=WXUAN[j]; //取位值
p3=p3|0x38; //P3.3~P3.5送 1
P3=P3&t; //P3.3~P3.5输出取出的位值
t=YSHHCHONG[j]; //取出待显示的数
t=XSHB[t]; //取字形码
p1=t; //字形码由 P3输出显示
j++; //j作为数码管的计数器,取值为0~2,显示程序通过它确认显示哪个数码管
if(j==3)
j=0;
n++;
if(n==2000) //10秒钟测不到心率,n复位
n=0
}
void YSHI(YSHSHJIAN) //延时子程序
{
for(;YSHSHJIAN>0;YSHSHJIAN--)
{
for(i=;i<250;i++)
}
}
5、系统仿真及调试
应用系统设计完成之后,就要进行硬件调试和软件调试了。硬件调试主要是把电路的各种参数调整到符合设计要求,软件调试可以利用开发及仿真系统进行调试。先排除电路故障,包括设计性错误和工艺性故障,一般原则是先静态,后动态。
5.1 硬件调试
利用万用表或逻辑测试器器,检查电路中的各器件以及引脚的连接是否正确,是否有短路故障。先要将单片机AT89S52芯片取下,对电路板进行通电检查,通过观察看是否有异常,是否有虚焊的情况,然后用万用表测试各电源电压。这些都没有问题后,接上仿真机进行联机调试,观察各接口线路是否正常。
5.2 软件测试
软件调试是利用仿真工具进行在线仿真调试,除发现和解决程序错误外,也可以发现硬件故障。
程序调试一般是分模块进行,分子程序调试,最后连起来统调。在单片机上把各模块程序分别进行调试使其正确无误,可以用系统编程器将程序固化到AT89S52的FLASH ROM中,接上电源脱机运行。
6、结束语
脉搏测量器利用单片机芯片为核心的数字控制,不仅减少了电子元器件的使用,而且有效的降低了控制电路对元器件参数的敏感,其精确度和可靠性得到明显的提高,而控制装置体积也随之变小,携带更方便。利用单片机强大的逻辑功能实现复杂的控制,进而提高整个控制装置的灵活性和适应性。
参考文献
[1]杨西明,朱骐.单片机编程与应用入门[M].北京: 机械工业出版社,2004
[2]董晓红.单片机原理及接口技术[M].西安:西安电子科技大学出版社,2004
4.at89s51单片机简介 篇四
温、湿度控制广泛应用于人们的生产和生活中,人们通常使用温度计、湿度计来采集温度和湿度,通过人工加热、加湿、通风和降温设备来控制温湿度,这样不但控制精度低、实时性差,而且操作人员的劳动强度大。即使有些用户采用半导体二极管作为温度传感器,但由于其互换性差,效果也不理想[1]。在某些行业中对温湿度的要求较高,由于温度过高或过低引起的元器件失效或由于环境湿度过高而引起的事故时有发生,对系统的可靠运行造成影响,甚至危及到系统局部及操作人员的安全。所以实施对温度的监控也日显重要。针对这一情况,作者结合微电子技术和AT89系列单片机技术研制了一种稳定性高、成本低的温湿度控制仪[2]。
2 系统组成及工作原理
这种基于单片机控制的温湿度控制仪的控制系统工作原理如图1所示。该温度控制仪的控制系统不以PC上位机作为数据处理器,而是直接以单片机作为其控制系统的核心部件,其硬件电路以AT89S51为核心,并配以键盘、LED显示器、继电器等元件。其中硬件电路部分主要由时钟电路、上电复位电路、595引脚电路、键盘接口电路、LED显示电路以及继电器接口电路组成[3]。
其中时钟电路部分主要是为了保证计算机的正常工作,并使内部各功能电路必须在该时钟信号的同步下按时序工作。上电复位电路的作用主要是将计算机内部的硬件初始化,使CPU和系统中的其他部件都处于这个确定的初始状态,并从这个状态开始工作。595引脚电路的作用主要是将温湿度控制仪内部的硬件电路联系在一起。键盘接口电路主要是用来控制以及查询电路的,通过键盘设置温湿度的上下限值,使得温湿度在期望值之内,当温湿度超过上下限值,报警电路接通,随后通过单片机控制继电器使温度回到设定值之内。LED显示电路是采用软件动态扫描四位数码管的方式,及时地将室内的温湿度显示出来,完成对温湿度的实时监测。继电器接口电路起着自动调节、安全保护、转换电路等作用[4]。整套系统是利用AT89S51单片机作为控制系统的核心来采集周围环境的温湿度值,以数字量的形式存储和显示,并独立作为一种设备对温湿度进行控制,经过简单的运算,发出各种控制命令,并能动态地显示当前温湿度值,设定目标控制温湿度值,同时,作为数据采集装置,为上位机进行复杂运算决策提供数据来源。
3 主要硬件电路设计
3.1 时钟电路
单片机的工作过程就是不断执行指令的过程[5]。CPU每执行一条指令,都要经过取操作码、取操作数和执行等几个过程,这些有效的操作都是在CPU时钟脉冲控制下有序的进行,而这些脉冲就是由CPU的定时控制器提供的,因此该温湿度控制仪的时钟电路主要是利用了MCS-51单片机芯片内部的一个用于构成时钟振荡电路的高增益反相放大器,XTAL1为该放大器的输入端,XTAL2为输出端,在XTAL1和XTAL2引脚上外接定时元件,内部振荡电路便产生自激振荡,故该系统使用的是内部方式产生时钟,其时钟电路原理如图2所示。
3.2 键盘接口电路
按键连接方式有两种:独立式按键和矩阵式键盘,本次设计采用了独立式非编码4×4键盘,是每个按键独立地占用一条数据输入线,当某一按键闭合时,相应的I/O线变为低电平,这样通过键盘上的高低电平来检测有无按键被按下,读入相应的数值,键盘输入的是温/湿度的阀值,键盘接口电路如图3所示。
3.3 LED显示接口电路
显示子程序采用动态扫描法实现四位数码管的数值显示,以减少硬件电路[6]。由SHT11测得的温湿度的值经其自身所带的A/D转换数据放在内存单元中,由51单片机的P3.5串行输入到595,595给出合适的时钟脉冲后,由Q0~Q7输出,点亮相应位段。有四个数码管,具体哪一个选通,由51单片机P0.0~P0.3发出选通信号DIS0~DIS3来选择。测量数据在显示时需转化为十进制BCD码。本设计采用软件动态扫描实现数据显示功能。
3.4 继电器接口电路
当温度或湿度高于或低于设定值时,需要通过继电器来控制,本设计选用的继电器型号为:G2R-1A-12DC,并使用了高耐压、大电流、内部由七个硅NPN 达林顿管组成的驱动芯片ULN2003A进行驱动,其接口电路如图4所示。
3.5 复位电路
复位电路采用了高电平复位,刚上电时电容两端没有电压,三极管不导通,节点RESET被R45拉至高电平,随着电容充电的进行两端电压逐渐升高,直到三极管进入导通状态,R45有电流流过,RESET电压降低,最后三极管饱和,RESET点的电压只是三级管的饱和压降,0.3 V左右,至此完成复位,复位时间是电容充电时间[7]。复位电路如图5所示。
4 控制仪的器件选型
4.1 微控制器的选择
AT89S51 是美国ATMEL生产的低功耗、高性能CMOS八位单片机,片内含 4 Kbytes 的可系统编程的 Flash 只读程序存储器,器件采用 ATMEL 公司的高密度、非易失性存储技术生产, 兼容标准 8051 指令系统及引脚。它集Flash程序存储器既可在线编程(ISP)也可用传统方法进行编程及通用八位微处理器于单片机芯片中, 该单片机的功能强大,出色地表现在以下几方面:①为一般控制应用的八位单芯片;②晶片内部具时钟振荡器,最高工作频率可至 12 MHz;③内部程式存储器(ROM)为 4 KB ;④内部数据存储器(RAM)为 128 B;⑤32 条双向输入输出线,且每条均可以单独做 I/O 的控制,五个中断向量源;⑥两组独立的 16 位定时器;⑦单芯片提供位逻辑运算指令,此外AT系列单片机可以应用到各种领域,基于上述几方面,采用低价位 AT89S51 单片机为本系统的控制核心。
4.2 温湿度数据检测模块器件选择
Sensiron公司在2002年率先研制成功了SHT11型智能化温度/湿度传感器,其外形尺寸仅为7.6 mm×5 mm×2.5 mm,体积与火柴头相近,它不仅能准确测量相对湿度,还能测量温度和露点。测量相对湿度的范围是0~100%,分辨率达0.03%RH,最高精度为±2%RH。测量温度的范围是-40~+123.8 ℃,分辨率为0.01 ℃。测量露点的精度小于±1 ℃。在测量湿度、温度时A/D转换器的位数分别可达12位、14位。利用降低分辨率的方法可以提高测量速率,减小芯片的功耗。SHT11的产品互换性好,响应速度快,抗干扰能力强,不需要外部元件,适配各种单片机,可广泛用于医疗设备及温度/湿度调节系统中。而且芯片内部包含相对湿度传感器、温度传感器、放大器、14位A/D转换器、校准存储器(E2PROM)、易失存储器(RAM)、状态寄存器、循环冗余校验码(CRC)寄存器、二线串行接口、控制单元、加热器及低电压检测电路,集成度高,在本设计中由于不需要上位机传输信号,因此使用该产品作为本系统的温湿度传感器。
5 系统软件设计
本设计是从主程序、温湿度处理部分、键盘设置、数码管显示、继电器控制几个方面进行具体描述的[8]。整个程序的思路是:主程序以“测温湿——处理温湿——查询键盘——继电器控制”进行着,定时器0定时时间到了,保护现场,进行数码管动态扫描,之后恢复现场,中断返回,继续回到主程序。
主程序的主要功能是负责温湿度的实时显示,读出并处理SHT11测量出的温湿度值,并设定一个预期值,使实时温湿度值与之对比,当温湿度低于设定值时,相应的灯会亮,并使继电器相应开关闭合,给其加温或加湿;当温湿度高于设定值,继电器开关处于断开状态。温湿度程序设计中,包含了以下子程序:写程序、读程序、传输启动程序、复位程序、计算及修正温湿度值程序[9]。键盘程序设计的思路如下:先进行键扫描,确定是哪个键被按下。如果先按K1或K2,当前状态继续进行,数码管显示也不会发生改变。当先按到K3或K4时表明要设定值了,此时再扫描,看K1或K2有没有被按下,按下则进行相应的加减1操作,当操作完后,再按下K3或K4表示此次设置完成。继电器在本设计中的作用就是:当此时温湿度高于设定值时,继电器开关是打开的,不对其进行操作;当温湿度低于设定值时,继电器开关是闭合的,驱动后设,来改变温湿度值。继电器闭合时,加温加湿相应指示灯亮[10]。主程序流程如图6所示。
6 结 论
经过长时间的试验与测试,这种基于单片机控制的温湿度控制仪,能够实现对温度的精确控制,能将温度误差控制在±0.1 ℃之间,而且该产品不需要上位机的控制信号,结构简单实用,且生产成本较低,在实际运行中可以节约能源,提高工作效率,达到较好的控制效果。
参考文献
[1]文生平,赵国平,江剑强.基于MATLAB的熔体温度控制设计研究[J].化工自动化及仪表,2007,34(6):17-18.
[2]王学武,王冬青,陈程,等.基于混沌RBF神经网络的气化炉温度软测量系统[J].化工自动化及仪表,2006,33(5):13-14.
[3]史军勇,冀捐灶,杨宝强.基于AT89C2051的温湿度控制仪[J].电子技术,2004,(1):21-23.
[4]ZHAO Yong-zhong,DONG Xing-wan,TANJin-lin,et al.ZWB-2 Intelligent Multimeter,Intelligent Processing Systems[C]//1997 IEEE International Conference.1997:1470-1472.
[5]夏方林.一种基于单片机AT89C51的温湿度控制仪的设计[J].工业仪表与自动化装置,1999,(1):32-34.
[6]王宝库.多功能检测控制系统的设计[J].微计算机信息,2006,22(4-1):103-105.
[7]赵亮,赵国锐.单片机C语言编程与实例[M].北京:人民邮电出版社,2003.
[8]张志利,蔡伟.基于AD590的温度测控装置研究[J].自动化与仪器仪表,2001,(2):37-39.
[9]王福瑞.单片微机测控系统设计大全[M].北京:北京航空航天大学出版社,1998:282-283.
5.at89s51单片机简介 篇五
学校的空闲教室是学生们最喜欢用于上自习的地方, 在教室自习虽然避免了下课后去图书馆找座的时间浪费。但是, 由于每间教室分配的教学任务不同, 其使用的时间和状况也不同, 所以想要在自己上课的教学楼找到一个空闲的教室也不是一件容易的事。
通过采用单片机控制的自习室管理系统, 可以简单有效地解决上述问题, 方便学生快速有效地找到合适的自习教室。通过单独置于的教室的子系统对当前教室的使用情况和使用人数进行记录, 然后在教学楼相应的区域进行显示。这样, 学生可以通过系统显示的内容在其所处的教学楼内进行自习室的选择, 大大节省了盲目找座的时间, 对教室资源的高效使用也有很大的意义。
1. 系统总体设计
本系统主要包含两个主体部分:教室单元和大厅单元 (即总显示部分) 。系统的工作流程如下:
每个教室的使用状态有“上课中”、“自习 (人少) ”和“自习 (人多) ”3种。现用3种不同颜色的LED灯表示当前教室状态:红色代表“上课中”;绿色代表“自习 (人少) ”;黄色代表“自习 (人多) ”。单片机通过对当前教室信息进行判断, 并且实时将教室信息用LED灯表示, 并且在本楼层进行显示。每个教室的使用信息数据由单片机通过有线通信的方式向上一级发送, 然后位于大厅的单片机读取各个楼层教室的使用数据并且点亮大厅的教室使用状态灯。
各模块间的关系如图1所示。
2. 系统各功能模块实现
自习室管理系统的主要部分是对教室的状态信息进行采集与判断, 这里采用单片机作为控制中心。
AT89S51是一种低功耗高性能的8位单片机, 片内带有一个4KB的Flash在线可编擦除只读存储器, 它采用了CMOS工艺和ATMEL公司的高密度非易失性存储器技术, 而且其输出引脚和指令系统和51系列单片机兼容。片内的存储器允许在线重新编程或用常规的非易失性存储器编程器来编程。同时已具有三级程序存储器保密的性能。在众多的51系列单片机中, 要算ATMEL公司的AT89S51更实用, 因为它不仅和MCS-51系列单片机指令、管脚完全兼容, 而且它将通用CPU和在线可编程Flash集成在一个芯片上。AT89S51单片机对开发设备的要求很低, 开发时间也大大缩短, 方便使用。
2.1 教室单元设计
2.1.1 教室人数
对于自习室的使用来说, 并不需要精确知道每个教室当前有多少人, 因此采用红外对管的方式对教室人数进行计算, 原理如图2所示。
将两组红外线发射接收对管安装在图2中所示的墙壁上, 外侧的红外线发射接收对管的位置为P1, 内侧的位置为P2, 这里P1的P2之间需要有一定的间隔距离。此时根据P1和P2的触发顺序可以有两种情况:P1先触发, P2后触发;P2先触发, P1后触发。前者表示有人进入教室, 这时总人数加1, 后者表示有人离开教室, 此时总人数减1。
计数过程流程图如图3所示, 其中Pa=1代表位置P1处的红外线发射接收对管被触发, Pb=1代表位置P2处的红外线发射接收对管被触发。
部分计数代码如下:
2.1.2 教室状态
每个教室的使用状态有“上课中”、“自习 (人少) ”和“自习 (人多) ”3种。现用3种不同颜色的LED灯表示当前教室状态:红色代表“上课中”;绿色代表“自习 (人少) ”;黄色代表“自习 (人多) ”。上课状态由控制按键决定, 按键按下表示处于“上课中”, 否则处于“自习”状态。
取教室容量为A, 当前教室学生数为B, 考虑到一般自习教室的自习人数大约为教室容量A的80%, 因此可令教室容量A的70%作为判断教室容量状态的标志:在自习状态下, 若B>70%A, 则亮黄灯, 否则亮绿灯。
2.1.3 数据收发
通过有线通信的方式实现AT89S51单片机与上位机的数据收发。给每个教室分配不同的端口地址。由于自习教室人员流动情况较小, 单片机与服务器的通信频率采用当有新数据需要传送时进行通信, 以降低系统的资源占用, 提高系统的使用效率。
2.1.4 教室系统设计
考虑到实际应用情况, 采用AT89S51单片机的中断系统对是否上课进行判断, 当中断未出现时, 单片机继续监控学生出入, 当“上下课”中断产生时, 单片机跳出主程序, 优先执行中断, 实现教室状态信息灯的控制。具体设计流程如图4所示。
由AT89S51单片机的P3.2引脚引入外部中断INT0, 外部中断源INT0为低电平有效, 当P3.2引脚输入低电平时, 单片机相应该中断, 执行相应的中断处理子程序。
部分主要代码如图5所示。
需要说明的是, 跳出执行的中断处理子程序的功能只负责修改状态灯的亮灭情况, 不对计数器进行任何操作。
2.2 大厅单元设计
放置在大厅的是系统的总显示系统, 用于集中显示各教室的使用状况。通过一片AT89S51单片机接收下级系统发送的状态信息, 并且由特定的端口地址取出对应教室的使用状况数据, 点亮对应状态指示灯。
结语
本文所设计的系统具有体积小、效率高、成本低、结构简单和可靠性强的优点。通过安装该系统, 可以使高校的教室得到更加合理地利用, 提高资源的利用率, 避免了教室的空置和浪费。对于学生来说, 该系统提供的教室信息也便于其快速有效地选择自习教室, 从而避开上课教室和自习人多的教室, 大大减少了时间的浪费。相较于其他单片机来说, AT89S51具有价格低廉、功能强大的特点, 因此, 基于AT89S51单片机的该系统容易得到接受与推广, 具有很高的实用价值。
摘要:本文以AT89S51单片机为核心, 设计了一个自习室管理系统, 以帮助学生快速有效地选择自习教室, 使得学校教室资源可以得到合理高效地利用。教室部分系统作为基本主题, 通过红外计数、按键等方式对教室状态进行采集判断, 然后采用有线通信方式与上位机进行通信, 具有体积小、效率高、成本低、结构简单和可靠性强的优点。
关键词:AT89S51,单片机,红外计数,自习室管理系统
参考文献
[1]兰建军, 潘凤红.图书馆阅览室座位信息管理系统[J].科技信息, 2007 (34) :608-623.
[2]刘大杰.基于单片机和红外接近开关的图书馆座位管理系统[J].电子工程师, 2006, 32 (5) :73-75.
[3]周兴华.单片机智能化产品C语言设计实例详解[M].北京:北京航空航天大学出版社, 2006.
[4]范洪刚, 魏学海, 任思璟.51单片机自学笔记[M].北京:北京航空航天大学出版社, 2010.
6.at89s51单片机简介 篇六
目前,多数中高档轿车配置了以微处理器为核心的自动空调系统,它显著提高了轿车的智能化控制水平和舒适性。随着我国轿车保有量的增加,轿车自动空调的故障率也增多,汽车维修人员迫切需要掌握轿车自动空调系统的原理以便于维修。为了满足这方面的科研和教学的需要,本文以帕萨特空调实验台架机械部分(制冷、供暖、通风等系统)为控制对象,借助于51.AVR单片机开发工具,开发了以Atmel公司的AT89S51为核心的轿车空调控制实验系统。
1 轿车空调系统功能
轿车空调系统主要由制冷、供暖、通风和控制系统组成,其主要功能是调节车内温度和湿度,实时为车内补充新鲜空气。轿车空调调节温度原理如下:用温度传感器检测车厢内、车厢外、蒸发器表面的温度,由控制器控制压缩机的运行、鼓风机的转速、热水阀的开度、各种风挡的开度,使车厢内温度保持在所设定的温度值附近。
轿车空调制冷、供暖的转换是靠通风系统的风道切换来实现的。在制冷模式下,通过温度风挡打开制冷风道,空调压缩机工作,使蒸发器温度降低,在其周围形成冷空气,鼓风机将冷空气吹入车内,达到制冷的目的。在供暖模式下,通过温度风挡打开供暖风道,由风道内的发动机冷却水暖风器加热周围空气,再由鼓风机将加热后的空气吹入车厢内,实现供暖。
在制冷模式下,当空调压缩机连续工作时,蒸发器表面温度将逐渐降低直至结霜,此时影响空气流通,因此必须及时除霜。具体方法是:当蒸发器表面温度低于某一数值(如0 ℃)时,使压缩机停止工作,开始除霜;当蒸发器表面温度高于某一数值(如2 ℃)时,将压缩机接通,又开始制冷。通过控制压缩机间断工作来控制蒸发器表面温度,防止其表面结霜。
2 轿车空调控制实验系统硬件设计
2.1 硬件总体方案
轿车空调控制实验系统框图见图1,它以AT89S51单片机为主控器,用DS18B20温度传感器检测温度,用步进电动机控制风挡位置,用直流固态继电器控制压缩机启停,用风机调速模块控制鼓风机转速。
用按键S1~S4设定轿车空调器工作模式。其中,S1表示制冷;S2表示供暖;S3表示自动控制;S4表示返回。
用4位数码管显示温度。其中,第1位为符号位,第2位~第4位分别为温度值的十位、个位和小数位。当温度值为0 ℃或为正时,符号位不显示;温度值为负时,符号位显示“-”。
2.2 控制系统硬件电路
控制系统主要组成元器件及电路包括AT89S51单片芯片、数字式传感器、按键电路、MC14499LED数码管显示驱动器、步进电动机驱动电路、压缩机控制电路、风机调速模块。本设计进行了如下假设:进入暖风器的热水量不需进行控制和调节,热水阀开度恒定;仅用温度风挡切换风道,在制冷和供暖时,温度风挡分别处于制冷侧和供暖侧两极限位置,其初始位置在制冷侧;鼓风机工作时以最大转速运行。
2.2.1 风挡位置控制
风挡位置调节机构由微型步进电机和传动机构组成。采用三相步进电动机,步进电动机每相绕组的驱动电路由TLP250光耦和IRF840场效应管组成。步进电机采用三相六拍工作方式,正转相序为A→AB→B→BC→C→CA→A,反转相序为A→CA→C→BC→B→AB→A。单片机从P2.0、P2.1、P2.2引脚输出时序脉冲,经驱动电路驱动步进电动机的A、B、C三相绕组按预定方式工作,实现步进电动机转向和运行步数控制,完成风挡位置调节。
2.2.2 压缩机启停控制
压缩机电磁离合器线圈串接在直流固态继电器DC-SSR的输出端,单片机通过P2.4引脚控制固态继电器的通断,使电磁离合器线圈通电或断电,实现对压缩机的启停控制。在负载的两端并接一续流二极管1N4007,防止电感性负载启停时瞬间电压产生冲击,保护固态继电器。
2.2.3 按键电路
按键共有4个,即S1~S4。4个按键通过“与”门与单片机的外部中断INT0输入脚相连。当有按键按下时进入中断,单片机通过查询P0.0、P0.1、P0.2、P0.3各引脚的电平,确定具体的按键,执行相应的操作。
2.2.4 显示驱动电路
MC14499是串行输入BCD码、十进制译码输出的LED显示驱动器。1片MC14499可直接驱动和控制4个8段LED显示器。MC14499主要由移位寄存器、锁存器、多路输出器、译码器及振荡器组成。串行输入的BCD码数据存放在移位寄存器和锁存器中,经多路输出器的BCD码译码器译码后,形成显示数据的十进制段形码,经段驱动器送a段~g段和dp位显示。片内振荡器产生的振荡信号经4分频和位译码后提供4个位控信号,经位驱动线后到4条位控线,以轮流动态扫描4个LED显示器。
采用MC14499驱动4个数码管显示温度值。DS18B20的测温范围为-55 ℃~+125 ℃,采用传感器默认的12位分辨率,测温精度为0.625 ℃,可显示的温度范围为-55 ℃~99.9 ℃。
3 轿车空调控制实验系统软件设计
3.1 软件实现的功能
轿车空调器有制冷、供暖、自动控制等工作模式。AT89S51通过检测按下的按键确定工作模式,进行相应的控制。本设计假定车内温度设定值为22 ℃。
(1)按下“制冷”(S1)键,进入制冷模式。温度风挡转向制冷侧,打开制冷风道,电磁离合器线圈通电,压缩机工作,鼓风机启动运行,空调开始制冷。当制冷到车内温度低于设定温度时,关闭压缩机和鼓风机,空调停止制冷。当车内温度回升到高出设定温度1 ℃时,启动压缩机和鼓风机,空调又开始制冷,如此循环,使车内的温度控制在22 ℃。在制冷过程中,蒸发传感器不断检测蒸发器表面温度。
(2)按下“供暖”(S2)键,进入供暖模式。温度风挡转向供暖侧,打开供暖风道,电磁离合器线圈断电,压缩机停机,鼓风机启动运行,空调开始供暖。当供暖到车内温度高于设定温度时,关闭鼓风机,空调停止供暖。当车内温度降到低于设定温度1 ℃时,启动鼓风机,空调又开始供暖。
(3)按下“自动”(S3)键,进入自动控制模式。将检测的车外温度与车内温度设定值进行比较,确定进行制冷还是供暖操作。根据检测的蒸发器、车内外温度和有关设定温度,通过运算、处理和判断后输出控制信号,控制风挡位置、制冷、加热等,达到自动控制车内温度的目的。车内温度设定值为22 ℃,制冷温控范围为22 ℃~23 ℃;供暖温控范围为22 ℃~23 ℃。
(4)按下“返回(S4)键,结束正在进行的制冷、供暖或自动控制模式,执行返回子程序,将温度风挡复位至制冷侧,关闭压缩机和鼓风机,有关标志位清零,然后返回按键检测状态。
3.2 软件开发平台
软件是在8051系列的Keil C51软件开发平台上完成的,Keil C51软件内嵌多种符合当前工业标准的开发工具,可以完成从工程建立到管理、编译、链接、生成目标代码、软件仿真、硬件仿真等完整的开发环节。
3.3 软件主程序流程
汽车空调控制实验系统主程序流程图见图2。
4 结束语
将使用较多的Atmel公司AT89S51单片机用于控制帕萨特空调实验台架机械部分,组成轿车空调实验系统,实现了对轿车空调在制冷、供暖、自动、停止等的实时控制,对汽车维修专业技术人员掌握和研究汽车空调控制原理具有重要的意义,对高校学生进一步掌握单片机的应用系统也有帮助。通过实际使用,对汽车技术人员的培训、相关课程的教学、相关课题的研究起到了一定的作用。
摘要:目前,多数中高档轿车配置了自动空调系统,轿车维修技术人员迫切需要掌握轿车自动空调系统的原理和维修。介绍了以AT89S51为核心的轿车空调实验控制系统的硬件和软件设计,实现了对帕萨特空调机械部分的控制。该系统满足了教学和科研的需要。
关键词:AT89S5,自动空调,控制系统
参考文献
[1]陈芝久,仲华,唐双波,等.轿车空调微机控制系统研究[J].汽车工程,2001,23(1):53-54.
[2]王吉忠,尹凝霞,王泽鹏.车用单片机系统实验教程[M].北京:中国电力出版社,2009.
[3]李良洪.汽车车身控制系统[M].北京:北京理工大学出版社,2007.
7.at89s51单片机简介 篇七
直流稳压电源是电子技术常用的设备之一,广泛的应用于教学、科研等领域。传统的多功能直流稳压电源功能简单、难控制、可靠性低、干扰大、精度低且体积大、复杂度高。普通直流稳压电源品种很多。但均存在以下问题:输出电压是通过粗调(波段开关)及细调(电位器)来调节。这样,当输出电压需要精确输出,或需要在一个小范围内改变时(如1.02~1.03V),困难就较大。另外,随着使用时间的增加,波段开关及电位器难免接触不良,对输出会有影响。常常通过硬件对过载进行限流或截流型保护,电路构成复杂,稳压精度也不高。本文设计了一种以单片机为核心的智能化高精度简易直流电源,克服了传统直流电压源的缺点,具有很高的应用价值。
1 系统硬件设计
1.1 系统总体结构
本系统是以AT89S51单片机为核心控制器,具有电压可预置、可步进调整、输出的电压信号和预置的电压信号可同时显示的数控直流电源,其硬件原理方框图如图1所示。系统由AT889S51控制电路、键盘电路、电源电路、D/A电路、功放电路、短路保护及报警电路、稳压输出电路、LED显示电路八部分组成。系统通过“开关”、“+”、“-”三个按键来控制预置电压的升降,并通过数码管显示。AT89S51单片机送出相应的数字信号,在D/A转换之后输出电流,经集成运放LM358转换、三极管放大、RC网络滤波,最终稳定。同时由LED数码管显示输出电压;由数字电压表测量实测值。
1.2 数控部分
主要由AT89S51最小系统控制,它要完成键盘控制、预置电压显示控制、短路保护控制及报警控制等功能。AT89S51最小系统如图2所示。
1.2.1 键盘接口电路
键盘接口电路如图3所示。键盘设计由三个按键控制即:“开关”键、“+”键、“-”键,并外接三个上拉电阻控制键盘去抖。此三键分别连接到单片机的P1.0、P1.1、P1.2接口进行控制。
1.2.2 预置电压显示电路
预置电压显示电路如图4所示。本设计选用译码驱动器74F244,用来驱动LED数码管显示预置电压,分别由单片机P2.0~P2.7接口控制。LED共阴极控制端由P1.4~P1.6接口控制,并用三极管8050来控制LED的显示。
1.3 电源部分
1.3.1 主电源电路
电源部分输入220V、50Hz交流电,输出全机所需的三种电压:+5V、+15V、-5V,主要供数控部分和D/A转换芯片使用;+15V作为运放的正电源,同时也是稳压输出电路的主电源。该电源模块部分拓展了-5V负电压,同时作为运放的负电源,如图5所示。
1.3.2 稳压输出部分
稳压输出部分是将控制部分送来的电压控制字数据转换成稳定的电压输出。它由转化器(DAC0808)、集成运放LM358、晶体三极管、基准电压源(+15V)、过流检测电路组成。
稳压输出模块包括过流检测电路,当电源过流时,过流检测电路输出为低电平其,送到CPU的INT0申请中断,CPU接收后,延迟5ms。
2 系统软件设计
软件控制程序由主程序和过流保护程序两部分,其主要实现步进加减、D/A转换、键盘扫描、LED显示、电流报警等功能。
2.1 主程序
首先初始化系统,即AT89S51单片机系统的初始化,再对系统时间进行设置,调用按键处理子程序,判断是否有按键按下,若有就调用显示处理程序,显示处理程序在数码管上显示预置电压,由单片机控制的信号经D/A转换后,通过检测电路判断是否短路,若短路则启动中断保护。否则,实现稳压输出。主流程图如图6所示。
2.2 过流保护程序
从数模转换电路转换出的信号,一路经过流检测电路,把检测到的信号,送入单片机最小系统进行处理,若过流,则蜂鸣器鸣叫。过流保护程序流程图如图7所示。
3 结束语
本设计以单片机为核心设计一种智能稳压电源,不但电路简单,结构紧凑,价格低廉,性能卓越。所研制的智能稳压电源可利用单片机设置周密的保护监测系统,确保电源运行可靠。输出电压采用数字显示,输人采用键盘方式,电源的外表美观,操作使用方便,具有较高的使用价值。
基于以上创新之处,该项目在海南省2008“新卫杯”大学生电子设计竞赛中获得一等奖。
参考文献
[1]李全利.单片机原理及应用技术[M].北京高等教育出版社,2004.
[2]李中发.数字电子技术[M].中国水利水电出版社,2001.
[3]公茂法.单片机人机接口实例集[M].北京航空航天大学出版社,1998.
【at89s51单片机简介】推荐阅读:
单片机实训室简介11-16
介词at和on和in区别12-18
基于AT89C51的交通灯控制系统设计02-12
2022PEP新版小学三年级上册英语第三单元Look_at_me教案08-30
pep人教新课标版小学英语四年级下册unit6 at a farm 教学设计08-23
单片机实验报告10-27
单片机项目总结02-09
单片机课程设计实验06-23
单片机原理学习心得08-20