基于单片机的LCD显示系统设计与Proteus仿真实现
2020-12-17
来源:爱问旅游网
基于单片机的LC D显示系统 设计与P rote u s仿真实现 高玲 尹立强 (黄河水利职业技术学院 开封475003) (河南科技学院 新乡453003)z 摘 要本文通过AT89C51芯片与AMPIRE 128 X 64液晶模块组合完成了一种显示系统的设计,并使用Proteus软件进行了功能 仿真。 关键词单片机LCD Proteus 仿真 文献标识码 B 文章编号1 1 0826—5865 中图分类号TP368.5 Design and Simulation with Proteus of LCD Display System Based on MCU Gao Ling Yin Liqiang2 (Yellow River Conservancy Technical Institute Kaifeng (Henan Institute of Science and Technology Xinxiang 475003) 453003) Abstract In this article,AT89C5 1 chip and AMPIRE 1 28 X 64 LCD module are combined to design a display sys- tern,and proteus software is used to simulate the function of the display system. Keywords MCU 一LCD Proteus Simulation 、引言 单片机自问世以来,因其功能强、使用灵活、面向控制等优 点在社会各个领域的应用越来越广。LCD液晶显示也因其微功 耗、显示内容丰富、接口电路简单等优点得到广泛应用。本文将 完成基于单片机的LCD显示系统的设计,在液晶屏上分两行显 示汉字“黄河水院自动化工程系”,并使用Proteus软件进行仿 真测试与验证。 二、硬件电路设计 利用Proteus设计LCD显示系统的硬件电路原理如图1所 示,单片机选用ATMEL公司的AT89C51,显示单元选用AM— PIRE 128 X 64 LCD液晶显示器,单片机的Pl口作为8位数据 的输出端,P3.0~P3.4口作为控制信号的输出端。 三、软件设计 电路图绘制好后,根据设计要求并结合图1所示硬件连接 进行程序设计。本文采用C语言编写程序,程序源代码及简略 注释如下: #include<reg51.h> #include<intrins.h> //函数声明 void busy wait(); sbitCS1=P3 3;//片选1 void select(ucharx); sbitCS2=P3 4;//片选2 voidwrite_command(uchar cmd); sbitRW=P3 1;//读/写选择 voidwrite_data(uehardat): sbitRS=P3 0;//指令/数据选择 voidinitial(): 图1硬件电路原理图 办公自动化杂志‘29。 sbitE=P3 2;//使自 voidsetposition(ucharrow,uchareolumn); void delay(uchar x); void delayshort(); { typedef unsigned char uchar; uchari,j; ,/液晶左半屏显示第一行的”黄河”二字 select(0); initial(); setposition(1,32); //汉字点阵码表,可通过字模提取软件获取 uchar code table[1 0][32]={ {0x20,0x20,0x24,0xA4,0xA4,OxBF,0xA4,0xE4,0xA4,0xBF,0x A4,0)【E6,0xA4,0x30,0x20,0x00,0x00,0)(80,Ox80,0x5F,0x4A, for(j=O;j<2;j++) for(i=0;i<16;i++)write—data(table[j][i]); 0x2A,Ox0A,OxOF,0x0A,0x2A,0x2A,0x4F,Ox40,0x80,OxO0,0xO0}, 黄” {0xl0,0x21,0x62,0x06,0x82,0xE2,0x22,0x22,0x22,OxF2,Ox2 setposition(2,32); for(j=0;j<2;j++) 2,0x02,OxFE,0)【03,Ox02,OxO0,0x04,0x04,OxFE,OxO1,OxO0,Ox OF,0x04,0x04,Ox04,0x0F,0x40,0x80,0x7F,0xO0,OxO0,0xO0l, ” {0x00,0x20,0x20,0x20,Ox20,OxEO,0x00,0xFF,0xCO,0x40,0x2 0,Oxl0,Ox18,Ox0HD,0x00,OxO0,Ox20,0xl0,0x08,0x04,0x03,Ox4 0,0x80,0x7F,0x00,Ox01,Ox02,0x04,Ox08,0x18,0x08,OxO0l,//” 水” {0xO0,OxFE,0x22,0x5A,0x96,0xOC,0x24,0x24,0x25,0x26,Ox2 4,0x34,0xA4,0x14,OxOC,OxO0,0x00,0xFF,0x04,0x08,0x87,0x 81,0x41,0x3l,0x0F,OxO1,0x3F,Ox41,0x41,Ox41,0)【7O,0x00l, //”院” f0x00,0x00,0xO0,oxF8,0x48,0x4C,0x4A,0x49,0x48,0x48,0x4 8,0xFC,0x08,0x00,0x00,OxO0,OxO0,0x00,0x00,o)【FF,0x44,0x4 4,0x44,Oxdd,0x44,0x44,0x44,OxFF,0xO0,0x00,OxO0,0]‘001, ’ 目” {0)【20,0x24,0x24,0xE4,0x26,0x34,Ox20,OxlO,Oxl0,OxFF,0xl 0,0xl0,OxlO,0】(F8,OxlO,0x00,0x08,OxlC,【h0B,0x08,0x08,0x8 A,0x4C,0x30,0x0C,0x03,0x40,0x80,0x40,0x3F,OxO0,0x00l,//” 动” {0x80,Ox40,o)(20,0xF8,o)【07,0)【o0,OxO0,OxO0,OxFF,0x40,Ox2 0,OxlO,0x18,0x00,OxO0,Oxo0,0x0o,Ox00,0x00,0xFF,0x00,0x0 4,Ox02,Ox01,0x3F,0x40,Ox40,0x40,0x40,Ox40,0x70,OxO0l,//” 化” {()】【oo,Ox04,(b【04,Ox04,Ox04,OxlM,Oxo4,0)【FC,Ox04,oxo4,0x0 4,0)(o4,0x06,0)【o4,Ox00,0】【00,o]【20,0】(20,Ox20,0x20,0x20,0x2 0,Ox20,0)【3F,0x20,0x20,0x20,Ox20,Ox20,0x30,0x20,OxO0}, 工” {0x24,0x24,0xA4,0)【FE,0xA3,0x22,0x20,0x7E,0x42,0x42,0x4 2,0x42,0x42,0x7F,Ox02,0x00,0x08,0x06,0x01,0xFF,0x00,0x4 3,0x41,0x49,0x49,0x49,0x7F,0x49,0x4D,0x69,0x41,o)【00l,/,” 程” {Oxoo,0x02,0x22,0x22,0x32,0x2E,OxA2,0x62,0x22,0x22,Ox9 1,0x09,OxO1,0xO0,0x00,0xO0,OxO0,0x00,0x42,0x22,0xlA,0x4 3,0x82,0x7E,0x02,0x02,0x0A,0x13,0x66,0x00,0x00,0x00}//” 系” }; voidmain() ’30‘ 办公自动化杂志 for(i=16;i<32;i++)write_data(table[j][i]); //液晶右半屏显示第一行的”水院”二字 select(1); initial(); setposition(1,0); for(j=2;j<4;j++) for(i=0;i<16;i++)write_data(table[j][i]); setposiifon(2,0); for(j=2;j<4;j++) for(i=16;i<32;i++)write_data(table[j][i]); ,/液晶左半屏显示第二行的”自动化”三字 select(0); initial(); setposition(5,16); for(j=4;j<7;j++) for(i=0;i<16;i++)write—data(table[j][i]); setposition(6,16); for(j=4;j<7;j++) for(i=16;i<32;i++)write—data(table[j][i]); ,/液晶右半屏显示第二行的”工程系”三字 select(1); initial(); setposition(5,0); for(j=7;j<1O;j++) f0r(i=0;i<16;i++)write_data(table[j][i]); setposition(6,0); for(j=7;j<1O;j++) ofr(i=16;i<32;i++)write_data(table[j][i]); } ,/片选,0选择第一片,1选择第2片 void select(uchar x) { switch(x) { case 0:CS1=0;CS2=1;break; case 1:CS1=1;CS2=0;break; case 2:; default:CS1=0;CS2=0; } l //忙等待 ,/保证液晶模块有足够时间进行内部数据处理 void busy_wait() { ucharX; f0r(x=O;x<200;x++); return; } //初始化 void initial() { write_command(0x3f); ) ,/设置显示位置: //row(行):0…7;column(列):0…63 void setposition(uchar row,uchar column) { if(row<011row>=811column<011column>=64)return; write—command(0xb8+row); writecommand(0x40+column); l II void delay(uchar x) { ucharY,z; for(y=x;y>O;y一一) for(z=l10;z>O;Z一一); } ‘//短延时 void delay_short() { 一nop_();_nop一();一nop.();_hop一(); } f}写抬令 void write—command(uchar cmd) { RS=0; busy_wait(); RW=0: E=0; 一nop一();一n0p一(); P1=cmd; delay_short(); E=I; delay—short(); E=0: } //写数据 void write_data(uchar dat) { RS=1; busy_wait(); RW=0: E=0; 一nop一();一nop_(); P1=dat; delay_short(); E=I; delay_short(); E=O: } 四、调试与仿真 在Keil C51软件环境下,对程序进行编译,并生成 .hex文 件。启动Proteus仿真软件,打开本设计原理图,双击AT89C51, 打开“编辑元件”对话框,将编译生成的 .hex文件加载进去,再 进行仿真运行就可以看到仿真结果如图2所示,成功实现了中 文汉字“黄河水院自动化工程系”的显示。 图2电路仿真结果 五、结束语 本设计利用Proteus软件完成了对单片机AT89C5 1和LCD 液晶模块AMPIRE 128×64构成的显示系统的仿真,成功实现 了中文汉字的显示。Proteus为单片机设计开发提供了很好的软 件平台,可以在没有硬件条件的基础上进行逻辑控制电路设计, 缩短了开发周期,降低了开发成本。 参考文献 [1】高云华刘保彬.Proteus仿真软件在单片机教学中的应 用[J].中国科技信息,2010(1):199—200. [2]刘小兵.基于Proteus技术的ARM7显示系统设计与仿 真实现[J].电子技术,2010(9):32—33. 作者简介 高玲(1982~),女,讲师,2004年毕业于郑州大学信息工程 学院,现为黄河水利职业技术学院教师,从事高校电子信息技术 专业教学与研究工作。 尹立强(1982~),女,助教,2004年毕业于郑州大学信息工 程学院,现为河南科技学院教师,从事高校电子信息技术专业教 学与研究工作。 办公自动化杂志‘31。