lcd数码字符显示器的设计 100307.docx
- 文档编号:24934505
- 上传时间:2023-06-03
- 格式:DOCX
- 页数:20
- 大小:75.53KB
lcd数码字符显示器的设计 100307.docx
《lcd数码字符显示器的设计 100307.docx》由会员分享,可在线阅读,更多相关《lcd数码字符显示器的设计 100307.docx(20页珍藏版)》请在冰豆网上搜索。
lcd数码字符显示器的设计100307
摘要
随着时代的进步和发展,智能仪表已经普及到我们生活、工作、科研、各个领域,已经成为一种比较成熟的技术,本文主要介绍了一个基于AT89C51单片机LCD数码字符显示器,
关键词:
LCD;AT89C51
一、智能仪器仪表的简介
1.1智能仪器仪表简介
仪器仪表(英文:
instrumentation)仪器仪表是用以检出、测量、观察、计算各种物理量、物质成分、物性参数等的器具或设备。
真空检漏仪、压力表、测长仪、显微镜、乘法器等均属于仪器仪表。
广义来说,仪器仪表也可具有自动控制、报警、信号传递和数据处理等功能,例如用于工业生产过程自动控制中的气动调节仪表,和电动调节仪表,以及集散型仪表控制系统也皆属于仪器仪表。
1.2智能仪器仪表的作用
科学技术是第一生产力,仪器是科学技术发展的重要“工具”。
著名科学家王大珩先生指出,“机器是改造世界的工具,仪器是认识世界的工具”。
仪器是工业生产的“倍增器”,是科学研究的“先行官”,是军事上的“战斗力”,是现代社会活动的“物化法官”。
不言而喻,仪器在当今时代推动科学技术和国民经济的发展具有非常重要的地位。
1.仪器是科学技术发展的重要前提和根本保障。
人类发展史上任何一次大的飞跃都是基于工具的巨大创新和根本变革驱动的,作为“工具”的科学仪器的发展和创新往往是催生科技创新的重要要素。
2.仪器是经济发展和国防安全的重要保障。
仪器是保障经济发展、国家安全不可或缺的重要基础条件。
首先,著名科学家钱学森先生指出:
“新技术革命的关键技术是信息技术。
信息技术由测量技术、计算机技术、通讯技术三部分组成。
测量技术则是关键和基础”。
3.仪器是推进和谐社会建设的重要力量。
目前,全球的资源枯竭、环境污染等问题成为社会健康发展的瓶颈;食品安全问题、公共突发事件、疾病诊断、易燃易爆化学危险品等给人民的生活带来了严重影响,这些重大问题的解决都离不开先进的检测技术和手段。
二、设计方案及论证
本系统采用单片机AT89C51为控制核心系统主要包括显示模块、按键控制模块、蜂鸣器报警模块等。
下面对各模块的设计进行论证比较。
2.1显示模块
方案一:
采用七段码数码管显示。
数码管是指将所有发光二极管的一极接到一起形成公共极,因此数码管有共阴共阳之分。
以共阳数码管为例共阳数码管在应用时应将公共极接到+5V,当某一字段发光二极管的阴极为低电平时相应字段就点亮。
当某一字段的阴极为高电平时相应字段就不亮。
因此每个数码管有9个接口。
数码管的驱动方式有静态扫描和动态扫描两种形式。
静态扫描编程简单但电路复杂动态扫描变成复杂而且还需要使用其他芯片。
方案二:
采用1602液晶显示。
液晶的物理特性是当通电时导通排列变得有秩序,是光线容易通过不通电时排列混乱阻止光线通过。
相比于数码管LCD1602不仅可以显示的图形符号更丰富而且具有轻薄、无辐射等优点。
比较以上两种方案系统设计中采用方案二。
2.2按键控制模块
方案一:
采用矩阵键盘。
矩阵键盘的长各分接口分别于单片机的I/O口连接可以通过连接数量较少的I/O口扩展出多个按键。
但其缺点是电路更复杂编程更麻烦。
方案二:
采用独立按键。
每个独立按键与单片机I/O连接虽然不能节省I/O口但电路简单、编程容易比较以上两种方案由于本系统只需要4个按键因此选者方案二。
2.3报警模块
报警模块中信号由单片机输出经PNP型三极管放大后进入蜂鸣器发出声响。
2.3总体硬件组成框图
按键控制模块液晶显示模块
晶振电路AT89C51
蜂鸣报警器
复位电路
图1系统框图
系统框图如图所示,系统主要由四大模块组成即单片机最小系统模块、液晶显示模块、蜂鸣器报警模块、按键控制模块。
单片机最小系统作为整个系统的控制核心按键模块的4个按键对分数和时间进行控制然后显示在LCD1602上蜂鸣器报警模块则根据程序设定的时间进行报警。
三、设计原理及电路图
3.1LCD1602显示模块的硬件设计
1602液晶也叫1602字符型液晶它是一种专门用来显示字母、数字、符号等的点阵型液晶模块它有若干个5X7或者5X11等点阵字符位组成每个点阵字符位都可以显示一个字符。
1602LCD是指显示的内容为16X2,即可以显示两行每行16个字符液晶模块。
图2LCD显示模块
3.2按键控制模块的硬件设计
按键控制模块采用4个独立按键Key1、Key2、Key3、Key4分别于单片机的P1^0、P1^1、P1^2、P1^3连接每个按键的另一端直接与地相连接因此是低电平有效。
图3按键控制模块
3.3蜂鸣器报警模块的硬件设计
蜂鸣器报警模块由一个蜂鸣器和一个PNP型的三极管组成接单片机的P2^7口蜂鸣器为5V驱动低电平有效。
图4蜂鸣器报警模块
3.4单片机最小系统的硬件设计
图5单片机最小系统
四、系统的软件设计
4.1主程序设计
本系统中单片机的主要功能,就是利用内部的定时器计时并随时接受控制模块的信息显示在1602液晶上。
其主程序流程如图所示。
图6程序流程图
4.2仿真原件清单
器件名称
型号
主要参数
数量
备注
单片机
AT89C51
4KB,33MHz
1
电容
CAP
30pF
2
晶振
CRYSTAL
12MHz
1
电解电容
CAP-ELEC
10uF
1
1602液晶
LM016
16*2
1
三极管
MJE350
PNP型
1
蜂鸣报警器
BUZZER
5V驱动
1
低电平有效
排阻
RESPACK-8
4.3设计电路仿真图
图7设计电路仿真图
五、器件识别与检测
AT89C51是一种带4K字节FLASH存储器FPEROM—FlashProgrammableandErasableReadOnlyMemory的低电压、高性能CMOS8位微处理器俗称单片机。
AT89C2051是一种带2K字节闪存可编程可擦除只读存储器的单片机。
单片机的可擦除只读存储器可以反复擦除1000次。
该器件采用ATMEL高密度非易失存储器制造技术制造与工业标准的MCS-51指令集和输出管脚相兼容。
由于将多功能8位CPU和闪烁存储器组合在单个芯片中ATMEL的AT89C51是一种高效微控制器。
最小系统模块的晶振电路由12MHz晶振和30pF的电容构成复位电路由10uF的电解电容和104瓷片电容构成。
六、控制系统实现
6.1程序代码
#include
#defineucharunsignedchar
#defineuintunsignedint
ucharcodetab1[]="A:
";
ucharcodetab2[]="B";
ucharcodetab3[]="GAMEOVER";//比赛结束时显
ucharcodetab4[]="AB";//比赛结束时显
sbitlcden=P2^2;
sbitlcdrw=P2^1;
sbitlcdrs=P2^0;
sbitkey1=P1^0;
sbitkey2=P1^1;//四个按键
sbitkey3=P1^2;
sbitkey4=P1^3;
sbitBell=P2^7;//蜂鸣器
uintkeyflag,flag;//标志位
uchari,num,count;
ucharsec,min,miao;
ucharAscore,Bscore;//两队得分
voiddelay(uintz)//液晶延时函
{
uintx,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
voidwrite_com(ucharcom)
{
lcdrs=0;
P0=com;
delay(5);
lcden=1;
delay(5);
lcden=0;
}
voidwrite_dat(uchardate)//数据子函数data
{
lcdrs=1;
P0=date;
delay(5);
lcden=1;
delay(5);
lcden=0;
}
voidwrite_time(ucharadd,uchardate)//写入时间函数
{
ucharshi,ge;
shi=date/10;
ge=date%10;
write_com(0x80+add);
write_dat(0x30+shi);
write_dat(0x30+ge);
}
voidwrite_miao(ucharadd,uchardate)//写入24秒函数
{
ucharshi,ge;
shi=date/10;
ge=date%10;
write_com(0x80+0x40+add);
write_dat(0x30+shi);
write_dat(0x30+ge);
}
voidwrite_Ascore(ucharadd,uchardate)//写入A队得分函数
{
ucharbai,shi,ge;
bai=date/100;
shi=date/10%10;
ge=date%10;
write_com(0x80+add);
write_dat(0x30+bai);
write_dat(0x30+shi);
write_dat(0x30+ge);
}
voidwrite_Bscore(ucharadd,uchardate)//写入B队得分函数
{
ucharbai,shi,ge;
bai=date/100;
shi=date/10%10;
ge=date%10;
write_com(0x80+0x40+add);
write_dat(0x30+bai);
write_dat(0x30+shi);
write_dat(0x30+ge);
}
voidwrite_score(ucharadd,uchardate)//比赛结束写入得分函数
{
ucharbai,shi,ge;
bai=date/100;
shi=date/10%10;
ge=date%10;
write_com(0x80+0x40+add);
write_dat(0x30+bai);
write_dat(0x30+shi);
write_dat(0x30+ge);
}
voiddelay_Bell(uintz)//蜂鸣器延时函数
{
uintx,y;
for(x=z;x>0;x--)
for(y=255;y>0;y--);
}
voidinit()//初始化函数
{
Bell=1;
keyflag=0;
flag=0;
min=12;
sec=0;
miao=25;
Ascore=0;
Bscore=0;
lcdrw=0;
lcden=0;
write_com(0x38);
write_com(0x0e);
write_com(0x06);
write_com(0x01);
write_com(0x80+0x00);
for(num=0;num<16;num++)
{write_dat(tab1[num]);}
write_com(0x80+0x40);
for(num=0;num<2;num++)
{write_dat(tab2[num]);}
write_Ascore(2,Ascore);
write_Bscore(2,Bscore);
TMOD=0x01;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
EA=1;ET0=1;
TR0=1;//开定时器
}
voidkeyscan()//按键函数
{
if(key1==0)
{
delay(10);
if(key1==0)
{
keyflag++;
while(!
key1);
if(keyflag==1)
{TR0=0;}
if(keyflag==2)
{TR0=1;keyflag=0;}
}
}
if(key2==0)
{delay(5);
if(key2==0)
{while(!
key2);miao=25;}
}
if(key3==0)
{
delay(5);
if(key3==0)
{while(!
key3);
Ascore++;write_Ascore(2,Ascore);}//写入A队得分
}
if(key4==0)
{
delay(5);
if(key4==0)
{while(!
key4);
Bscore++;;write_Bscore(2,Bscore);}//写入B队得分
}
}
voidmain()
{
init();
while
(1)
{
keyscan();
if(flag==0)
{
write_com(0x80+0x40+7);//写入第一节FIR
write_dat('F');
write_dat('I');
write_dat('R');
}
if(flag==1)
{
write_com(0x80+0x40+7);//写入第二节SEC
write_dat('S');
write_dat('E');
write_dat('C');
}
if(flag==2)
{
write_com(0x80+0x40+7);//写入第三节THR
write_dat('T');
write_dat('H');
write_dat('R');
}
if(flag==3)
{
write_com(0x80+0x40+7);//写入第四节FOU
write_dat('F');
write_dat('O');
write_dat('U');
}
if(flag==4)/比赛结束显示”GAMEOVER“和两队比分
{
TR0=0;
write_com(0x80);
for(i=0;i<16;i++)
{
write_dat(tab3[i]);
}
write_com(0x80+0x40);
for(i=0;i<16;i++)
{
write_dat(tab4[i]);
}
write_score(5,Ascore);//比赛结束写入两队比分
write_score(11,Bscore);
}
if(miao>=4&&miao<=5)//若只剩5秒蜂鸣器响1秒
{Bell=0;delay_Bell(510);Bell=1;delay_Bell(510);}
}
}
voidtimer0()interrupt1//定时器
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
count++;
if(count==18)
{
count=0;
sec--;
miao--;
if(miao==(-1))//若24秒到蜂鸣器响4秒
{
Bell=0;
delay_Bell(510);delay_Bell(510);
delay_Bell(510);delay_Bell(510);
Bell=1;
}
if(miao==(-1))
{miao=24;}
if(sec==((-1)))
{
sec=59;min--;
if(min==(-1))//若比赛(单节)结束蜂鸣器响4秒
{
Bell=0;
delay_Bell(510);delay_Bell(510);delay_Bell(510);delay_Bell(510);
Bell=1;
min=11;flag++;
}//显示比赛时间
}
write_time(11,min);write_time(14,sec);write_miao(14,miao);
}
}
6.2硬件、软件的调试
6.2.1硬件调试
本阶段采用实验板ST-3A对各个模块的功能进行调试,主要检查硬件间连线是否正确,并调试各模块能否实现指定的功能。
6.2.2软件调试
软件调试采用Keil软件完成。
在写好源程序之后建新工程选择AT89C51处理器接着新建文档编辑程序编辑完存为.C把保存的.C文件加入到工程里。
检查无语法错误后生成.HEX文件。
6.2.3硬件软件联调
软硬件联合调试主要是运用Proteus完成。
将系统原理图在Proteus环境下画好之后将软件调试阶段Keil生成的.HEX文件下载到单片机里在电脑上进行软件仿真。
6.3仿真结果
本次系统设计结构较好,单片机最小系统能正常工作,按键模块能实现控制功能液晶显示模块能。
根据按键模块输入的控制信息进行显示,蜂鸣器报警模块能按程序设定的要求报警。
仿真结果图如图所示。
图8仿真结果图
七、设计心得
通过此次智能仪器仪表课程设计,使我加深了对智能仪器仪表理论的理解,学会了怎样将理论很好地应用到实际当中去。
还学会了如何培养不畏艰难的挑战精神,从而不断地战胜自己,超越自己。
这次课程设计,我遇到过许多次失败的考验。
比如,对智能仪器仪表的一些基本原理都搞不清楚,所以在程序的设计过程中,很难写出正确的程序,常常出错等。
但是面对这些困难,我没有想过要放弃,因为我坚信吃得苦中苦,方为人上人。
八、参考文献
[1]李川汪秋蒙.ISP技术的原理及实现方法[J].科技资讯.200735期93-94.
[2]万光毅.单片机实验与实践教程[M].北京:
北京航空航天大学出版社.2005.1.
[3]张毅刚.单片机原理及应用[M].北京高等教育出版社.2003:
160-190.
[4]胡烨,姚鹏翼,陈明.Protel99SE原理图与PCB设计教程[M].机械工业出社.200523-99.
[5]马忠梅.单片机的C语言应用程序设计M北京:
北京航空航天大学出版社.2006
[6]周润景.基于Proteus的电路与单片机仿真系统设计与仿真[M].北京:
北京航空航天大学出版社.2005
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- lcd数码字符显示器的设计 100307 lcd 数码 字符 显示器 设计