基于单片机的1602液晶显示电路设计 - 图文 联系客服

发布时间 : 星期日 文章基于单片机的1602液晶显示电路设计 - 图文更新完毕开始阅读27c6e52ef4335a8102d276a20029bd64793e6263

图2-8 内部时钟方式

图2-9 外部时钟电路

本次研究采用的是内部时钟方式,晶振采用12M晶振,电容为30?F,电路图如图2-8。

第三章 软件设计

本次研究设计主要涉及到电路图的设计,程序的编写,程序的烧录,分别用到Altium Designer ,keil, AVR_fighter。下面将对这三个软件一一进行简单的介绍。

3.1 软件设计思路

通过对AT89S52单片机和LCD1602的基本了解,利用Altium designer软件绘制出电路图进行仿真,根据电路图焊接出电路板,并进行测试。利用keil软件编写c程序,程序编写无误后,将程序生成.hex文件,利用AVR_fighter烧录软件将程序烧录到单片机,得到设计结果,即LCD1602液晶显示屏上显示出字符。

3-1 原理框图

10

3.1.1 Altium Designer

Altium Designer 是原Protel软件开发商Altium公司推出的一体化的电子产品开发系统,主要运行在Windows操作系统。这套软件通过把原理图设计、电路仿真、PCB绘制编辑、拓扑逻辑自动布线、信号完整性分析和设计输出等技术的完美融合,为设计者提供了全新的设计解决方案,使设计者可以轻松进行设计,熟练使用这一软件必将使电路设计的质量和效率大大提高。

主要功能有: 1 原理图设计 2 印刷电路板设计 3 FPGA的开发 4 嵌入式开发 5 3D PCB设计 3.1.2 keil

Keil C51是美国Keil Software公司出品的51系列兼容单片机C语言软件开发系统,与汇编相比,C语言在功能上、结构性、可读性、可维护性上有明显的优势,因而易学易用。Keil提供了包括C编译器、宏汇编、链接器、库管理和一个功能强大的仿真调试器等在内的完整开发方案,通过一个集成开发环境(μVision)将这些部分组合在一起。

优点:

⒈Keil C51生成的目标代码效率非常之高,多数语句生成的汇编代码很紧凑,容易理解。在开发大型软件时更能体现高级语言的优势。

⒉与汇编相比,C语言在功能上、结构性、可读性、可维护性上有明显的优势,因而易学易用。用过汇编语言后再使用C来开发,体会更加深刻。

3.1.3 AVR_fighter

AVR_fighter是AVR单片机ISP下载编程软件,此软件必须将编写的c程序利用keil软件生成.hex文件才能烧录到单片机,操作界面如图3-2所示:

11

图3-2 AVR_fighter

3.2 程序设计

利用keil软件编写程序,程序如下: #include //52寄存器文件 #include

typedef unsigned char BYTE; //用BYTE代替unsigned char typedef unsigned int WORD;//WORD代替unsigned int typedef bit BOOL ;//用BOOL代替bit

sbit rs = P2^6; //复位端 sbit rw = P2^5; //写数据端 sbit ep = P2^7; //使能端

BYTE code dis1[] = {\BYTE code dis2[] = {\

/*******************延时函数********************/ delay(BYTE ms)

{

12

BYTE i; while(ms--) {

for(i = 0; i< 250; i++) {

_nop_();

_nop_(); //空执行消耗CPU时间达到等待的效果 _nop_(); _nop_(); } } }

/*******************LCD侧忙函数********************/ BOOL lcd_bz()

{ BOOL result; rs = 0; rw = 1; ep = 1; _nop_(); _nop_(); _nop_(); _nop_();

result = (BOOL)(P0 & 0x08); //检测P0最高位是否为1 ep = 0;

return result;//返回侧忙结果 }

lcd_wcmd(BYTE cmd)

{ // 写入指令数据到LCD while(lcd_bz()); rs = 0; rw = 0; ep = 0; _nop_(); _nop_();

P0 = ((cmd<<4)|(cmd>>4)); //将8位指令通过P0口传给1602 _nop_();

_nop_();//用于产生一个脉冲宽度 _nop_(); _nop_(); ep = 1; _nop_(); _nop_(); _nop_();

13