内容发布更新时间 : 2024/12/26 20:26:32星期一 下面是文章的全部内容请认真阅读。
图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
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