基于STC89C52的红外遥控系统设计LCD显示.docx
《基于STC89C52的红外遥控系统设计LCD显示.docx》由会员分享,可在线阅读,更多相关《基于STC89C52的红外遥控系统设计LCD显示.docx(14页珍藏版)》请在冰点文库上搜索。
基于STC89C52的红外遥控系统设计LCD显示
福建电力职业技术学院
课程设计
课程名称:
《智能仪器》
题目:
基于STC89C52的红外遥控系统设计(LCD显示)
专业班次:
******
姓名:
***
学号:
指导教师:
学期:
2011-2012学年第2学期
日期:
2012.2
1.引言
1.1本设计意义
随着科学技术的发展,单片机因其高可靠性和高性价比,在智能化家用电器、仪器仪表等诸多领域内得到了极为广泛的应用。
当前单片机对家用电器控制呈现出外型简单化、功能多样化、性能优越化的发展趋向。
人机界面器具用使用方便、功耗低、抗干扰能力强的特点,因此它的应用前景是不可估量。
用STC89C52设计出题目所要求的数码管动态循环显示基础。
并通过人机界面的设计与计算机之间传递、交换信息的媒介和对话接口,是计算机系统的重要组成部分,在这次的课设中人机界面起到了重大的作用在这种起到了信息的交换,在这次的课设中人机界面的作用远远小于其它设备的作用。
人机界面早于深入到人们的生活中已经是不可分割的一部分了,在我们周围也可看到有关人机界面装置,早上世纪就有人机界面的装置如:
扩音器、按键式电话、方向盘等等的装置,而在现在工业中人机界面更是起到重大作用就像“WEINVIEW”品牌人机界面,WEINVIEW人机产品在行业内率先采用符合先进环保标准的无铅零件和制造工艺,用实际行动为企业道德印上金牌品质保证,一路保持行业领先,因此人机界面在生活中起到重要的作用,而在这次的课设主要是实现通过人机界面装置能在数码管上显示出0~F字样并且实现左移的功能。
1.2本设计任务和主要内容
本设计根据设计内容要求,用STC89C52单片机与数码管和矩阵键盘的通讯实施人机界面的设置,用STC89C52并行口P0、P2接数码管,P1口接矩阵键盘,用C语言进行编程,实现数码管左移显示。
1)查阅先关文献资料,了解数码管设计原理。
2)设计基于C语言的矩阵键盘的控制系统硬件部分,画出方框图,设计控制系统的软件部分,首先根据数码管首需的具体功能设计好流程图,根据设计的流程图写代码,进行代码编译调试。
3)把设计好的软件代码烧入硬件中,然后进行总调试,直到能实现预定的结果为止将自己所做的工作和指标写出。
2.硬件设计
2.1系统框图
本文所设计的数码管移动显示由STC89C52单片机及其最小系统、4位数码管、4*4矩阵键盘等部分组成。
其硬件原理图如图2.1所示。
根据下图可知STC89C52单片机上的P1口接矩阵键盘上的八个串口,P0口接在人机界面上的A~H端口,P2.0~P2.3接在人机界面的COM1~COM4端口。
图2.1数码管显示系统框图
2.2最小系统
2.2.1STC89C52单片机简介
如图2.2
图2.2单片机
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)。
XTAL1:
反向振荡放大器的输入及内部时钟工作电路的输入。
XTAL2:
来自反向振荡器的输出。
2.2.2最小系统设计
最小系统如2.3所示.
如图2.3最小系统
1)电源:
单片机使用的是5V电源,其中正极接40引脚负极接20引脚,在电路中VCC、GND识符;
2)晶振电路:
单片机是一中时序电路,必须提供脉冲信号才能正常工作,使用晶体震荡器,接18,19脚;
3)复位电路:
复位电路是单片机正常运行的一个必要部分,复位电路应保证单片机在上点瞬间进行一次有效的复位,在单片机正常工作时將RST引脚置低。
此外通过一个按键进行手动复位,在单片机运行不正常时使用;
4)EA引脚:
上拉倒VCC,表示程序烧写到单片机内部。
2.3矩阵键盘
2.3.1矩阵键盘与独立按键的区别
独立按键:
一个按键就要占用单独的一个I/O口,所需要的串口和导线多且占用空间大。
独立按键如图2.4所示。
图2.4独立按键
2.3.2矩阵键盘
矩阵键盘:
是为了节省I/O口而制作的,通常将按键排列成矩阵形式,每条水平线和垂直线在交叉处不直接连通,而是通过一个按键加以连接。
本课设的矩阵键盘接的是P1口。
矩阵键盘如图2.5所示:
图2.5矩阵键盘
2.4数码管
2.4.1数码管的分类
数码管一种以发光二极管为基本单元的半导体发光器件。
在我们日常生活中,比如电子秤、电子数码钟等的显示都是利用数码管实现,数码管现今已得到广泛的应用。
数码管按段数分为七段数码管和八段数码管,八段数码管比七段数码管多一个发光二极管单元(多一个小数点显示);按能显示多少个“8”可分为1位、2位、4位等等数码管;按发光二极管单元连接方式分为共阳极数码管和共阴极数码管。
共阳数码管是指将所有发光二极管的阳极接到一起形成公共阳极(COM)的数码管。
共阳数码管在应用时应将公共极COM接到+5V,当某一字段发光二极管的阴极为低电平时,相应字段就点亮。
当某一字段的阴极为高电平时,相应字段就不亮。
。
共阴数码管是指将所有发光二极管的阴极接到一起形成公共阴极(COM)的数码管。
共阴数码管在应用时应将公共极COM接到地线GND上,当某一字段发光二极管的阳极为高电平时,相应字段就点亮。
当某一字段的阳极为低电平时,相应字段就不亮。
数码管如图2.6。
图2.6数码管
2.4.2数码管的选用
数码管的种类虽然多,较多数器件引脚能提供吸入较大电流的能力(即用低电平驱动数码管时较亮).能直接提供高电平点亮数码管的器件很少.而且多数是需要另外再加上拉电阻,这样使用很不方便且浪费,我所选用的数码管是4*4共阳数码管。
根据上图2.6可知数码管的接线口数码管的A~H接口接单片机P0口,U1~U4接P2.0~P2.3串口。
3.软件设计
3.1矩阵键盘的扫描原理
1)判断是否有键按下。
將P1.0~P1.3都设为低电平,然后检测P1.4~P1.7是否都为高电平。
若都为高,则说明没有键按下,若其中有一行为低,则说明在这一行中有键按下。
2)判断哪个键按下。
如6号键按下,则第二行应呈现为低电平。
这时,在通过將P1.0设为低电平,P1.1,P1.2,P1.3设为高电平,来检测P1.5是否为低电平,若不为低,则设置P1.1为低,P1.0,P1.2,P1.3为高依次检测。
因为我们假设6好键按下,则当P1.1为低时,P1.5检测为低,这时知道6号键被按下了。
矩阵键盘如图2.5。
3)流程图
3.2数码管显示原理
在实际的单片机系统中,往往需要多位显示。
动态显示是一种最常见的多位显示方法,应用非常广泛。
用数码管显示信息时,由于每个数码管至少需要8个I/O口,如果需要多个数码管,则需要太多I/O口,而单片机的I/O口是有限的。
在实际应用中,一般采用动态显示的方式解决此问题。
在编程时,需要输出段选和位选信号,位选信号选中其中一个数码管,然后输出段码,
使该数码管显示所需要的内容,延时一段时间后,再选中另一个数码管,再输出对应的段码,高速交替。
例如需要显示数字“12”时,先输出位选信号,选中第一个数码管,输出1的段码,延时一段时间后选中第二个数码管,输出2的段码。
把上面的流程以一定的速度循环执行就可以显示出“12”,由于交替的速度非常快,人眼看到的就是连续的“12”在动态显示程序中,各个位的延时时间长短是非常重要的,如果延时时间长,则会出现闪烁现象;如果延时时间太短,则会出现显示暗且有重影。
3.3主程序设计
3.3.1流程图
3.3.2主程序设计
voidmain(void)
{
chari,key;
while
(1)
{
display();
key=keyboard();
if(key<16)
{
disp_buff[4]=disp_buff[3];
disp_buff[3]=disp_buff[2];
disp_buff[2]=disp_buff[1];
disp_buff[1]=disp_buff[0];
disp_buff[0]=key;
for(i=0;i<20;i++)display();
while(key<16)
{
key=keyboard();
display();
}
}
}
}
3.4调试结果
经过三周的努力最终实现预定的结果,实现了STC89C52单片机人机界面设计能过在数码管上移动显示字体并能过在数码管上左移的显示出0~F等字体,并实现了矩阵键盘的扫描,实现人机界面间的信息转换。
4.设计小结
这次实训提高了我们的设计能力与及对电路的分析能力.同时在软件的编程方面得到更到的提高,对编程能力得到加强.同时对所学的知识得到很大的提高与巩固.本次实验熟悉了单片机的使用和功能进行程序调试。
在整个设计过程中,发挥团队精神,分工合作,充分发挥人的主观能动性,自主学习,学到了许多没学到的知识,较好的完成了作品,达到了预期的目的。
程序编写中,由于思路不清晰,开始时遇到了很多的问题,经过静下心来思考,和同组员的讨论,理清了思路,反而得心应手。
在此次设计中,知道了做凡事要有一颗平常的心,不要想着走捷径,一步一脚印。
也练就了我们的耐心,做什么事都在有耐心。
此次比赛中学到了很多很多东西,这是最重要的。
总之,我们的能力得到了全方位的提高。
参考文献
[1]单片机基础北京航空航天大学出版社。
[2]单片机原理及应用高等教育出版社张毅刚。
[3]MCS-51系列单片微型计算机及其应用东南大学出版社张育才。
[4]单片机原理与应用机械工业出版社赵全利肖达兴。
[5]GB3100-31020001—1994,中华人民共和国国家标准[S]。
附录:
课程设计程序清单
#include
chardisp_buff[]={0,0,0,0,0,0,0,0};//显示缓冲单元
delay1ms(unsignedintt)//1ms延时函数
{
unsignedinti,j;
for(i=0;i}
voiddisplay(void)//显示函数
{
charcodetable[]={0xc0,0xf9,0xa4,0xb0,
0x99,0x92,0x82,0xf8,0x80,0x90,0x88,
0x83,0xc6,0xa1,0x86,0x8e};//共阳数码管的段码
charcodewei[]={0xf7,0xfb,0xfd,0xfe};//位选代码11111011
chari;
for(i=0;i<8;i++)
{
P2=0;//先消隐
P0=table[disp_buff[i]];
P2=wei[i];
delay1ms
(2);
}
}
unsignedcharkeyboard(void)//扫描键盘函数
{
chari,j,temp,Buffer[4]={0xef,0xdf,0xbf,0x7f};
for(j=0;j<4;j++)//循环扫描四行
{
P1=Buffer[j];//在高四位分别输出一个低电平
temp=0x01;//计划先判断第0位
for(i=0;i<4;i++)//循环扫描四列
{
if(!
(P1&temp))//从低四位,截取1位
return(i+j*4);//如果为0就返回按键值
temp<<=1;//判断的位,左移一位
}
}
return16;//判断结束,没有键按下,返回16
}
voidmain(void)
{
chari,key;
while
(1)//无限循环
{
display();//显示一遍
key=keyboard();//读出一遍键盘
if(key<16)//如果有人按
{
//-------------------------进行按键处理
disp_buff[4]=disp_buff[3];
disp_buff[3]=disp_buff[2];
disp_buff[2]=disp_buff[1];
disp_buff[1]=disp_buff[0];
disp_buff[0]=key;
//------------------处理结束,去等待按键释放
for(i=0;i<20;i++)display();//稍稍延时
while(key<16)//等待按键释放
{
key=keyboard();//再读
display();//别忘了显示
}
}
}
}