51单片机1602液晶显示频率计

图5-9 运行Keil C编译成功后生成的所有文件

5.3 软件功能模块设计

系统软件设计主要包括9大模块,分别为测量初始化模块、显示模块、信号频率测量模块、量程自动转换模块、信号周期测量模块、定时器中断服务模块、浮点数格式化模块、浮点数算术运算模块、浮点数到BCD码转换模块。其系统软件框图如图5-10。

浮点数到ASCII码转换模块 浮点运算模块 显示模块 周期测量模块 初始化模块 频率测量模块 量程自动转化模块 定时器中断服务模块 浮点数格式转化模块 图5-10 频率计系统软件框图

- 27 -

5.3.1 LCD初始化设置模块

LCD初始化主要进行显示器显示模式设置和显示开关及光标设置,在本次设计中定义其显示模式为:8位数据端口,5*7矩阵,16*2显示,并且开启显示无光标。具体实现代码为:

void LCD_Initial() { LcdEn=0;

LCD_Write(LCD_COMMAND,0x38); //8位数据端口,2行显示,5*7点阵 LCD_SetDisplay(LCD_SHOW|LCD_NO_CURSOR); //开启显示, 无光标 LCD_Write(LCD_COMMAND,LCD_CLEAR_SCREEN); //清屏

LCD_SetInput(LCD_AC_UP|LCD_NO_MOVE); //AC递增, 画面不动 }

5.3.2 浮点数到ASCII码转换模块

在LCD1602的显示中,数据是以ASCII码的形式在屏幕上显示出来的,而通过系统测量出的频率值为浮点数形式,因此必须将浮点数形式的数据转化为ASCII码的形式才能显示出来。将浮点数转换为ASCII码的代码为:

void IntToStr(unsigned int t, unsigned char *str, unsigned char n) {

unsigned char a[5]; char i, j; a[0]=(t/10000); //取得整数值到数组 a[1]=(t/1000); a[2]=(t/100); a[3]=(t/10); a[4]=(t/1); a[i]=a[i]+'0'; for(i=0; a[i]=='0' && i<=3; i++); for(j=5-n; j

- 28 -

for(i=0; i<5; i++) //转成ASCII码

*str='\\0'; }

5.3.3 定时/计数器初始化模块

在系统测频之前,首先要进行定时/计数器0和1的初始化,这一部分主要是进行定时/计数器0和1的工作方式和中断优先级的设置,在实验中通过设置定时/计数器 0和1的工作方式控制寄存器TMOD的操作模式和工作方式,我们设置定时器1为16位定时器方式,定时器0为16位计数器方式,并通过中断优先级控制寄存器IP设定定时器1为高优先级中断。其具体代码为:

void Time01_Init(void) { EA=0; TR0=0; TR1=0;

//关总中断 //关定时器0 //关定时器1

//允许TF1/TF0标志位(TCON7/TCON5)的中断请求 //定时器1是高优先级中断

IE=0x0A; IP=0x08; TL1=0xB0; }

TMOD=0x15; //定时器1是16位定时器方式,定时器0是16为计数器方式 TH1=0x3C;

5.3.4 定时器中断服务模块子程序

在频率测量过程中,我们使用单片机的定式计数器来实现频率的测量。当计数器0工作一段时间后,我们要读取计数值进行频率计算时,首先要关闭定时器1来切断外部信号,然后读取计数器中的数值来进行计算。其相应功能代码即定时器T1中断服务子程序为:

void TIMER1_ISR (void) interrupt 3 using 1 { EA=0; TR0=0; TR1=0; flag=!flag; TH1=0x3c;

- 29 -

//关总中断 //关定时器0 //关定时器1

TL1=0xB0;

frequence=(TH0*0x100+TL0)/200; if(flag) P3=P3|1<<5; else

P3=P3&(~(1<<5)); TH0=0x00; TL0=0x00; TR1=1; TR0=1; EA=1;

}

// 开定时器1 // 开定时器0 // 开总中断

- 30 -

6 系统的模拟及仿真

本次基于单片机的频率计设计是通过Proteus ISIS软件来进行模拟和仿真的。Proteus是目前最好的模拟单片机外围器件的工具,可以仿真51系列、AVR、PIC等常用的MCU及其外围电路(如LCD、RAM、键盘、马达、LED、AD/DA等)。

6.1 Proteus ISIS简介

6.1.1 Proteus ISIS的概况简介及特点

Proteus ISIS 是英国Labcenter 公司开发的电路分析与实物仿真软件。它运行于Windows 操作系统上,可以仿真、分析(SPICE)各种模拟器件和集成电路。Proteus 与其它单片机仿真软件不同的是,它不仅能仿真单片机CPU 的工作情况,也能仿真单片机外围电路或没有单片机参与的其它电路的工作情况。因此在仿真和程序调试时,关心的不再是某些语句执行时单片机寄存器和存储器内容的改变,而是从工程的角度直接看程序运行和电路工作的过程和结果。

该软件的特点是:

① 实现了单片机仿真和SPICE 电路仿真相结合。具有模拟电路仿真、数字电路仿真、单片机及其外围电路组成的系统的仿真、RS232 动态仿真、I2C 调试器、SPI 调试器、键盘和LCD 系统仿真的功能;有各种虚拟仪器,如示波器、逻辑分析仪、信号发生器等。

② 支持主流单片机系统的仿真。目前支持的单片机类型有:68000 系列、8051 系列、AVR 系列、PIC12 系列、PIC16 系列、PIC18 系列、Z80 系列、HC11系列以及各种外围芯片。

③ 提供软件调试功能。在硬件仿真系统中具有全速、单步、设置断点等调试功能,同时可以观察各个变量、寄存器等的当前状态,因此在该软件仿真系统中,也必须具有这些功能;同时支持第三方的软件编译和调试环境,如Keil C51 uVision2 等软件。

④ 具有强大的原理图绘制功能。总之,该软件是一款集单片机和SPICE 分析于一身的仿真软件,功能极其强大。 6.1.2 Proteus ISIS的运行概况

1) proteus的工作过程

运行proteus 的ISIS 程序后,进入该仿真软件的主界面。在工作前,要设置view 菜

- 31 -

联系客服:779662525#qq.com(#替换为@) 苏ICP备20003344号-4