电子显示屏设计.docx

上传人:b****3 文档编号:5583679 上传时间:2023-05-08 格式:DOCX 页数:21 大小:225.55KB
下载 相关 举报
电子显示屏设计.docx_第1页
第1页 / 共21页
电子显示屏设计.docx_第2页
第2页 / 共21页
电子显示屏设计.docx_第3页
第3页 / 共21页
电子显示屏设计.docx_第4页
第4页 / 共21页
电子显示屏设计.docx_第5页
第5页 / 共21页
电子显示屏设计.docx_第6页
第6页 / 共21页
电子显示屏设计.docx_第7页
第7页 / 共21页
电子显示屏设计.docx_第8页
第8页 / 共21页
电子显示屏设计.docx_第9页
第9页 / 共21页
电子显示屏设计.docx_第10页
第10页 / 共21页
电子显示屏设计.docx_第11页
第11页 / 共21页
电子显示屏设计.docx_第12页
第12页 / 共21页
电子显示屏设计.docx_第13页
第13页 / 共21页
电子显示屏设计.docx_第14页
第14页 / 共21页
电子显示屏设计.docx_第15页
第15页 / 共21页
电子显示屏设计.docx_第16页
第16页 / 共21页
电子显示屏设计.docx_第17页
第17页 / 共21页
电子显示屏设计.docx_第18页
第18页 / 共21页
电子显示屏设计.docx_第19页
第19页 / 共21页
电子显示屏设计.docx_第20页
第20页 / 共21页
亲,该文档总共21页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

电子显示屏设计.docx

《电子显示屏设计.docx》由会员分享,可在线阅读,更多相关《电子显示屏设计.docx(21页珍藏版)》请在冰点文库上搜索。

电子显示屏设计.docx

电子显示屏设计

电子显示屏设计

 

电子显示屏课程设计

 

系部:

电信信息工程系

 

图1

单片机P0口输出显示数据,P1口连接按键,P2口连接液晶显示屏的功能控制口;

第一行中间显示时间(起始时间默认为12:

00:

00),用定时器T0控制秒;按键1、按键2、按键3分别对时个位,分个位,秒个位做加1操作;

第二行,第三行,第四行显示汉字;若按键4按下,定时器T1开始定时,汉字开始每隔三秒自动刷新,并循环显示;若按键5按下,汉字停止自动刷新,停留当前页面,定时器T1关闭。

三、硬件电路设计

(1)电路原理图

图2

我组设计的电子显示屏由单片机控制电路、按键控制电路和液晶显示三部分组成,其原理图如上图所示;

(2)单片机控制模块

采用12MHZ的晶振,机器周期满足大于520KHZ液晶执行时间的要求,使读写没有时间间隔感;因12864内自带驱动电路,故无需外部设置驱动,使设计更为简单;单片机EA接高电平,使单片机能够使用内部程序;单片机复位端RST通过阻容电路接高电平,且并接一个按键,使其能实现复位功能。

(3)按键控制电路

我组设计的电子显示屏共有五个按键,除了单片机复位按键外,其余皆为显示控制按键。

因默认显示时间为12:

00:

00,按键1、按键2、按键3分别对时个位,分个位,秒个位做加1操作,从而调整时间。

按键4为汉字开始循环显示控制按键。

当按键4按下后,定时器T1启动,每隔3秒汉字会自动刷新,并循环显示。

按键5为刷新停止控制键,当按键5被按下后,定时器T1停止启动。

因P1口默认电平为1,故输入数据前无需置1操作。

(4)液晶显示模块

带中文字库的128X64是一种具有4位/8位并行、2线或3线串行多种接口方式,内部含有国标一级、二级简体中文字库的点阵图形液晶显示模块;可以显示8×4行16×16点阵的汉字.也可完成图形显示.通讯方式:

串行、并口可选、内置DC-DC转换电路,无需外加负压、无需片选信号,简化软件设计、工作温度:

0℃-+55℃,存储温度:

-20℃-+60℃。

0V为对比度亮度调节,接滑动变阻器。

RS、R/W控制指令和数据的读写,分别接P2^0,P2^1。

RS=0,R/W=0时写指令;RS=0,R/W=1时读指令;RS=1,R/W=0时写数据;RS=1,R/W=1时读数据;E为12864并行的使能端,接P2^2,当E由0变成1时,允许执行写操作;当E=1时,允许执行读操作;DB0-DB7为液晶的输入端,接单片机的P0口;因本次设计采用8位并行接口方式,在液晶的第一行显示时间,后三行显示汉字,故显示屏的控制端PSB接高电平。

NC为空脚;RST为液晶的复位脚,低电平有效;A、K为背光的正负电源接口;其中汉字显示坐标如下图3所示:

80H

81H

82H

83H

84H

85H

86H

87H

90H

91H

92H

93H

94H

95H

96H

97H

88H

89H

8AH

8BH

8CH

8DH

8EH

8FH

98H

99H

9AH

9BH

9CH

9DH

9EH

9FH

图3

可以根据坐标,把汉字写在任意位置上。

分析12864的并行接口时序图可知,当进行写操作时,应先设置RS为1/0,R/W为0,然后给P0口赋值,再打开并行使能端E,然后再关闭使能端。

进行读操作时,同样应先设置RS为1/0,R/W为1,然后给P0口赋值,再打开并行使能端E。

 

四、程序设计

(1)主程序

刚上电时,液晶第一行中间显示默认时间12:

00:

00,第二行显示“电子显示屏设计”,第二行显示“设计成员:

郑明月”,第三行显示“、金英、王广宇”。

每隔一秒,秒个位加1。

主程序在调用按键子程序和显示之程序之间循环,主程序流程图如图4:

 

图4

定时器T0在主程序中启动,是为了控制时间显示,主程序在按键扫描和液晶显示子程序中不断循环,以便及时捕捉是否有按键按下,及时更新显示信息。

(2)显示子程序(图5)

 

 

按键5按下后定时器T1启动,每隔三秒,显示相应的汉字;按键6按下后定时器T1关闭,显示停留在当前页面。

(3)源程序

#include

#defineucharunsignedchar

#defineuintunsignedint

sbitPSB=P2^3;

sbitEnable=P2^2;//使能

sbitDi=P2^0;//数据/命令选择(RS)

sbitRW=P2^1;//读/写信号

sbitRst=P2^5;//复位脚

sbitk1=P1^2;

sbitk2=P1^3;

sbitk3=P1^4;

sbitk4=P1^5;

sbitk5=P1^6;

ucharcounts=0;//定义全局变量,分别控制时钟的时个位

uchars=0;/*定义全局变量时十位*/

ucharcountm=0;/*定义全局变量分个位*/

ucharm=0;/*定义全局变量分十位*/

ucharcounth=2;/*定义全局变量秒个位*/

ucharh=1;/*定义全局变量秒十位*/

ucharcount=0;/*全局变量count控制时钟刷新*/

ucharside=0;/*全局变量控制整个屏幕自动刷新的次数*/

uchards=0;/*全局变量ds控制屏幕自动刷新的间隔时间*/

ucharcodetab[]={"0123456789:

"};

ucharcodehz1[]={"电子显示屏设计"};

ucharcodehz2[]={"设计成员:

郑明月"};

ucharcodehz3[]={"、金英、王广宇"};

ucharcodehz4[]={"《锦瑟》"};

ucharcodehz5[]={"锦瑟无端五十弦,"};

ucharcodehz6[]={"一弦一柱思华年。

"};

ucharcodehz7[]={"庄生晓梦迷蝴蝶,"};

ucharcodehz8[]={"望帝春心托杜鹃。

"};

ucharcodehz9[]={"沧海月明珠有泪,"};

ucharcodehz10[]={"蓝田日暖玉生烟。

"};

ucharcodehz11[]={"此情可待成追忆,"};

ucharcodehz12[]={"只是当时已惘然。

"};

ucharcodehz13[]={"显示完毕"};

ucharcodehz14[]={""};

voiddelay(ucharz)//延时函数

{ucharx,y;

for(x=z;x>0;x--)

for(y=110;y>0;y--);}

bitbusy_12864()

/*忙碌检测。

=1忙,需等待;=0不忙,可以执行操作*/

{bitresult;

Di=0;

RW=1;

Enable=1;

delay(5);

result=(bit)(P0&0x80);

Enable=0;

returnresult;

}

voidwrite_com(ucharc)//写指令

{while(busy_12864());

Di=0;

RW=0;

P0=c;/*写入指令*/

delay(5);

Enable=1;/*开使能端*/

delay(5);

Enable=0;/*关使能端*/

}

voidwrite_data(ucharDispdata)//写数据

{while(busy_12864());

Di=1;

RW=0;

P0=Dispdata;/*输出给定数据*/

delay(5);

Enable=1;

delay(5);

Enable=0;

}

voidinit()//初始化函数

{delay(10);

PSB=1;//并口方式

write_com(0x30);delay(5);/*从第一行的第一个地址开始写*/

write_com(0x08);delay(5);/*关屏幕显示*/

write_com(0x01);delay(5);/*清零*/

write_com(0x0c);delay(5);/*开屏幕显示*/

}

voiddisplay1()//时间显示函数

{write_com(0x82);/*从第一行的第三个地址开始写*/

write_data(tab[h]);/*写时十位*/

write_data(tab[counth]);/*写时个位,可以用按键控制*/

write_data(tab[10]);/*写符号“:

”*/

write_data(tab[m]);/*写分十位*/

write_data(tab[countm]);/*写分个位,可以用按键控制*/

write_data(tab[10]);/*写符号“:

”*/

write_data(tab[s]);/*写秒十位*/

write_data(tab[counts]);/*写秒个位,可以用按键控制*/

}

voiddisplay2()//汉字显示函数

{uchari;

if(side==0)

{write_com(0x90);/*从第二行的第一个地址开始写*/

i=0;

while(hz1[i]!

='\0'){write_data(hz1[i++]);}

/*把字符串写完*/

write_com(0x97);for(i=0;i<2;i++)write_data(hz14[0]);

/*未写地址,写入空格*/

write_com(0x88);/*从第三行的第一个地址开始写*/

i=0;

while(hz2[i]!

='\0'){write_data(hz2[i++]);}

/*把字符串写完*/

write_com(0x98);/*从第四行的第一个地址开始写*/

i=0;

while(hz3[i]!

='\0'){write_data(hz3[i++]);}

write_com(0x9f);for(i=0;i<2;i++)write_data(hz14[0]);

if(side==1)

{write_com(0x90);for(i=0;i<4;i++)write_data(hz14[0]);/*未写地址,写入空格*/

write_com(0x92);

i=0;

while(hz4[i]!

='\0'){write_data(hz4[i++]);}

write_com(0x96);for(i=0;i<4;i++)write_data(hz14[0]);/*未写地址,写入空格*/

write_com(0x88);

i=0;

while(hz5[i]!

='\0'){write_data(hz5[i++]);}

write_com(0x98);

i=0;

while(hz6[i]!

='\0'){write_data(hz6[i++]);};}

if(side==2)

{write_com(0x90);

i=0;

while(hz7[i]!

='\0'){write_data(hz7[i++]);}

write_com(0x88);

i=0;

while(hz8[i]!

='\0'){write_data(hz8[i++]);}

write_com(0x98);

i=0;

while(hz9[i]!

='\0'){write_data(hz9[i++]);};}

if(side==3)

{write_com(0x90);

i=0;

while(hz10[i]!

='\0'){write_data(hz10[i++]);}

write_com(0x88);

i=0;

while(hz11[i]!

='\0'){write_data(hz11[i++]);}

write_com(0x98);

i=0;

while(hz12[i]!

='\0'){write_data(hz12[i++]);};}

if(side==4)

{write_com(0x90);for(i=0;i<16;i++)write_data(hz14[0]);write_com(0x88);for(i=0;i<4;i++)write_data(hz14[0]);

write_com(0x8a);

i=0;

while(hz13[i]!

='\0'){write_data(hz13[i++]);}

write_com(0x8e);for(i=0;i<4;i++)write_data(hz14[0]);write_com(0x98);for(i=0;i<16;i++)write_data(hz14[0]);}

}

voidkeyscan1()//时钟控制按键

{if(k1==0){delay

(2);if(k1==0){while(k1==0);counth++;}}//k1按下,时加1

if(k2==0){delay

(2);if(k2==0){while(k2==0);countm++;}}//k2按下,分加1

if(k3==0){delay

(2);if(k3==0){while(k3==0);counts++;}}//k3按下,秒加1

if(counts==10){s++;counts=0;};

//加到10秒,秒十位s加1,秒个位counts清0

if(s==6){s=0;};//加到60秒,秒十位s清0

if(countm==10){m++;countm=0;};

//加到10分钟,分十位m加1,分个位countm清0

if(m==6){m=0;};//加到60分钟,m清0

if(counth==10&&h!

=2){h++;counth=0;};

//加到1小时,时十位h加1,时个位counth清0

if(h==2&&counth==4){h=0;counth=0;}/

/加到24小时,h,counth清0

}

voidkeyscan2()//汉字显示按键

{if(k4==0)

{delay

(2);/*消抖*/

if(k4==0)TR1=1;/*启动定时器T1*/

}

if(k5==0)

{delay

(2);

if(k5==0)TR1=0;}/*关闭定时器T1*/

}

voidmain()

{init();//液晶显示屏初始化

TMOD=0x11;//T0定时器和T1定时器都工作在方式一

EA=1;

ET0=1;

ET1=1;

TH0=0x3c;//T0赋初值,定时时间为50ms

TL0=0xb0;

TH1=0x3c;//T1赋初值,定时时间为50ms

TL1=0xb0;

TR0=1;//启动定时器T0

while

(1)

{keyscan1();

keyscan2();

display1();

display2();

}

}

voidt0(void)interrupt1

{TH0=0x3c;

TL0=0xb0;

TF0=0;

count++;

if(count==20)//1s到,秒个位加1

{counts++;

count=0;

if(counts==10){s++;counts=0;};

//10秒到,秒十位加1

if(s==6){countm++;s=0;};

//60秒到,分个位加1

if(countm==10){m++;countm=0;};

//10分钟到,分十位加1

if(m==6){counth++;m=0;};

//60分钟到,时个位加1

if(counth==10&&h!

=2){h++;counth=0;};

//1小时到,时十位加1

if(h==2&&counth==4){h=0;counth=0;}

//24小时到,清零

}

}

voidt1(void)interrupt3

{TH0=0x3c;

TL0=0xb0;

TF0=0;

ds++;

if(ds==40)//2s到,屏幕自动刷新

{side++;

ds=0;

if(side==5){side=0;}/*刷新5次后清0,循环显示*/

}

}

 

五、实物照片

 

六、元件清单

元件清单如表1所列。

表1液晶显示屏显示元件清单

序号

名称

型号与规格

单位

数量

1

单片机

U1(AT89C52)

1

2

液晶显示屏

LM1(12864)

1

3

排阻

P1(10KΩ)

1

4

晶振

Y1(12MHz)

1

5

滑动变阻器

P2(10KΩ)

1

6

四脚按键

S1~S5

5

7

电容

C1、C2(22PF)

2

8

电解电容

C3(20μF)

1

七、Proteus仿真

液晶显示屏显示仿真图,如图七所示.

液晶显示屏显示仿真图七

八、设计制作要点

在制作中要注意如下事项:

(1)、单片机晶振频率建议选择12MHz。

(2)、用带中文字库的128X64显示模块时应注意以下几点:

①欲在某一个位置显示中文字符时,应先设定显示字符位置,即先设定显示地址,再写入中文字符编码。

②显示ASCII字符过程与显示中文字符过程相同。

不过在显示连续字符时,只须设定一次显示地址,由模块自动对地址加1指向下一个字符位置,否则,显示的字符中将会有一个空ASCII字符位置。

③当字符编码为2字节时,应先写入高位字节,再写入低位字节。

④模块在接收指令前,向处理器必须先确认模块内部处于非忙状

态,即读取BF标志时BF需为“0”,方可接受新的指令。

如果

在送出一个指令前不检查BF标志,则在前一个指令和这个指令

中间必须延迟一段较长的时间,即等待前一个指令确定执行完

成。

指令执行的时间请参考指令表中的指令执行时间说明。

(3)、尽量不用手触摸液晶显示屏端口,以免产生静电,使显示屏所显示的内容出现乱码。

 

参考文献

1、《单片机应用开发技术》翁嘉民编中国电力出版社

2、《51单片机C语言教程》郭天祥编电子工业出版社

3、《单片机原理及应用》李建忠编西安电子科技大学出版社

4、《电路设计与制板》张伟、王力、赵晶编人民邮电出版社

5、《单片机原理及应用》李建忠编西安电子科技大学出版社

6、《ProtelDXP与PCB设计》姜立东、姜雪松编北京邮电大学出版社

个人感受

在这次的实习中,我的主要工作是电路板的焊接。

在焊接的时候,我将我们的电路板与原理图、仿真图及PCB进行了认真的对比,以确保在焊接的时候能够尽量不浪费元器件,并一次焊接成功。

终于,经过几个小时的努力,我完成了电路板的焊接。

虽然以前也有过电路板焊接的经验,但毕竟长时间没有操作,以及对一些元器件了解得不够详细,期间也遇到了一些问题。

比如四脚按键各个管脚的分别,晶振的选取,电阻阻值的选取。

最终,通过询问以及资料的查取,使我的问题得到了解决。

通过此次的实训,我充分地认识到了自己自单片机课程上的缺陷及不足,自己的基础太过薄弱。

但是,我也通过此次机会巩固了一些课本上的知识,并学到了许多课本外的内容。

而且,我也会在课下针对自己的弱点去加强学习。

 

姓名:

王广宇

学号:

200910710235

班级:

电气工程0942

系别:

电气工程及其自动化

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > IT计算机 > 电脑基础知识

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2