《基于单片机的LCD频率计设计课程设计.doc》由会员分享,可在线阅读,更多相关《基于单片机的LCD频率计设计课程设计.doc(17页珍藏版)》请在三一办公上搜索。
1、单片机应用技术课程设计报告题 目: LCD频率计 系 别: 电子电气工程系 专 业: 电子信息工程系 班 级: 08电信一班 四川职业技术学院课程设计任务书 电子电气工程 系 电子信息工程技术 专业 8 年级 电信1 班学生日期 2010.6.25 课程设计题目 LCD频率计 课程设计内容与要求:一、设计任务 用单片机的定时器/计数器测量外边眼脉冲的频率,并使用LCD1602显示结果。 二、设计要求1给定条件(1) LCD1602(2) AT89S52单片机2技术指标(1) 单片机控制LCD实现频率显示(2) 频率范围为1HZ-500KHZ,精度为1HZ。 课 程 设 计 成 绩 评 定 表本
2、课程设计评语: 指导教师(签名): 年 月 日本课程设计成绩:指导教师(签名): 年 月 日 目 录1方案设计1.1 系统分析1.2 系统方案2 硬件设计2.1 系统控制芯片2.4 元件清单3 软件设计3.1 软件功能3.2 LCD驱动程序3.3 主程序4 课程设计体会5 参考文献LCD频率计摘 要:本设计的成品是一个利用单片机产生脉冲,利用LCD1602显示出频率.频率计主要由AT89S52单片机最小系统电路、LCD1602电路构成,它能实现1HZ500KHZ任意频率的显示。关键字:单片机 LCD1602 1方案设计1.1 系统分析选择AT89S52单片机中的T2定时器/计数器产生1000H
3、Z的脉冲,从P1.0输出,P3.4输入.再通过单片机传送给LCD1602,并显示频率.液晶显示器具有体积小、重量轻、功耗极低、显示内容丰富等特点,在单片机系统中得到了广泛的应用。单片机具有体积小、功能强、成本低、功耗小等优点,所以在工业控制、智能仪表、通信技术、信号处理及家用电器产品中广泛应用。现在的单片机从功能上突破微型计算机的传统功能,向着以单元片机为核心、外接各种控制单元的专用单片机方向阳发展。1.2 系统方案我们采用AT89S52单片机中的T2定时器/计数器实现脉冲的产生,用LCD1602来实现频率的显示。 2 硬件设计2.1 系统控制芯片 选用的是单片机,如下图。其引脚如下图示。单片
4、机就是在一块硅片上集民了中央处理器()、存储器(、lash emory)和输入、输出接口(并行、串行通信口)、振荡电路、计数器等到电路的一块集成电路,这样的一块集成电路具有一台计算机的基本功能,因而被称为单片微型计算机,简称单片机()。图1 单片机AT89S52图2 AT89S52引脚图P0 口:P0口是一个8位漏极开路的双向I/O口。作为输出口,每位能驱动8个TTL逻辑电平。对P0端口写“1”时,引脚用作高阻抗输入。 当访问外部程序和数据存储器时,P0口也被作为低8位地址/数据复用。在这种模式下,P0具有内部上拉电阻。 在flash编程时,P0口也用来接收指令字节;在程序校验时,输出指令字节
5、。程序校验时,需要外部上拉电阻。 P1 口:P1 口是一个具有内部上拉电阻的8 位双向I/O 口,p1 输出缓冲器能驱动4 个TTL 逻辑电平。对P1 端口写“1”时,内部上拉电阻把端口拉高,此时可以作为输入口使用。作为输入使用时,被外部拉低的引脚由于内部电阻的原因,将输出电流(IIL)。 此外,P1.0和P1.2分别作定时器/计数器2的外部计数输入(P1.0/T2)和时器/计数器2的触发输入(P1.1/T2EX),具体如下表所示。在flash编程和校验时,P1口接收低8位地址字节。 引脚号第二功能:P1.0 T2(定时器/计数器T2的外部计数输入),时钟输出 P1.1 T2EX(定时器/计数
6、器T2的捕捉/重载触发信号和方向控制) P1.5 MOSI(在系统编程用) P1.6 MISO(在系统编程用) P1.7 SCK(在系统编程用) P2 口:P2 口是一个具有内部上拉电阻的8 位双向I/O 口,P2 输出缓冲器能驱动4 个TTL 逻辑电平。对P2 端口写“1”时,内部上拉电阻把端口拉高,此时可以作为输入 口使用。作为输入使用时,被外部拉低的引脚由于内部电阻的原因,将输出电流(IIL)。 在访问外部程序存储器或用16位地址读取外部数据存储器(执行MOVXDPTR) 时,P2 口送出高八位地址。在这种应用中,P2 口使用很强的内部上拉发送1。在使用8位地址(如MOVX RI)访问外
7、部数据存储器时,P2口输出P2锁存器的内容。在flash编程和校验时,P2口也接收高8位地址字节和一些控制信号。 P3 口:P3 口是一个具有内部上拉电阻的8 位双向I/O 口,p2 输出缓冲器能驱动4 个TTL 逻辑电平。对P3 端口写“1”时,内部上拉电阻把端口拉高,此时可以作为输入口使用。作为输入使用时,被外部拉低的引脚由于内部电阻的原因,将输出电流(IIL)。 P3口亦作为AT89S52特殊功能(第二功能)使用,如下表所示。在flash编程和校验时,P3口也接收一些控制信号。 端口引脚 第二功能:P3.0 RXD(串行输入口)P3.1 TXD(串行输出口)P3.2 INTO(外中断0)
8、P3.3 INT1(外中断1)P3.4 TO(定时/计数器0)P3.5 T1(定时/计数器1)P3.6 WR(外部数据存储器写选通)P3.7 RD(外部数据存储器读选通)此外,P3口还接收一些用于FLASH闪存编程和程序校验的控制信号。RST复位输入。当振荡器工作时,RST引脚出现两个机器周期以上高电平将是单片机复位。ALE/PROG当访问外部程序存储器或数据存储器时,ALE(地址锁存允许)输出脉冲用于锁存地址的低8位字节。一般情况下,ALE仍以时钟振荡频率的1/6输出固定的脉冲信号,因此它可对外输出时钟或用于定时目的。要注意的是:每当访问外部数据存储器时将跳过一个ALE脉冲。对FLASH存储
9、器编程期间,该引脚还用于输入编程脉冲(PROG)。如有必要,可通过对特殊功能寄存器(SFR)区中的8EH单元的D0位置位,可禁止ALE操作。该位置位后,只有一条MOVX和MOVC指令才能将ALE激活。此外,该引脚会被微弱拉高,单片机执行外部程序时,应设置ALE禁止位无效。PSEN程序储存允许(PSEN)输出是外部程序存储器的读选通信号,当AT89C52由外部程序存储器取指令(或数据)时,每个机器周期两次PSEN有效,即输出两个脉冲,在此期间,当访问外部数据存储器,将跳过两次PSEN信号。EA/VPP外部访问允许,欲使CPU仅访问外部程序存储器(地址为0000H-FFFFH),EA端必须保持低电
10、平(接地)。需注意的是:如果加密位LB1被编程,复位时内部会锁存EA端状态。如EA端为高电平(接Vcc端),CPU则执行内部程序存储器的指令。FLASH存储器编程时,该引脚加上+12V的编程允许电源Vpp,当然这必须是该器件是使用12V编程电压Vpp。 通过任务分析,要求单片机要完成三个实时任务,分别是:对输入信号周期进行计数、定时1s、动态显示以及频率计算频率转换为显示数据。要同时完成三个实时任务,只有使用中断的方式进行任务分割,可以用定时器T0、T1及其中断服务程序和主程序来分别完成每一个任务。1.定时1sT1工作在定时状态下,最大定时实践约为65ms,达不到1s的定时,所以采用时50ms
11、,共定时20次,即可完成1s的定时功能。TH1=(65536-50000)/256; /高8位的初始值 TL1=(65536-50000)%256; /低8位的初始值每定时1s时间到,就停下T0的计数,而从T0的计数单元中读取计数的数值,然后进行数据处理,送到数码管显示出来。2.输入的脉冲计数在本任务中,由于单片机的工作频率为12MHz,工作在计数状态下的T0,最大计数值为12MHz/24,因此T0能计数的脉冲最大计数频率为12MHz/24=500KHz。作为定时器T0,若1s内有A次溢出,最后T0的计数值为B,则输出信号的频率为: f = A 65536 + B 3.定时器/计数器的工作方式
12、模式1在模式1中,有THx的高8位和TLx的低8位构成全16位定时/计数器,其最大计数值为:M=65536。其初始值设置命令为 THx=(65536-t*f/12)/256; TLx=(65536-t*f/12)%256; 4.定时/计数器的中断设置定时/计数器的初始化编程格式如下所示:TMOD=方式字; /选择定时器的工作方式THx=高8为初始值; /装入Tx时间常数TLx=低8位初始值;Etx=1; /开Tx中断EA=1; /总中断允许,如果有其他中断,可共用本条指令TRx=1; /启动Tx定时器 5.LCD1602引脚功能介绍字符型液晶是一种液晶显示器LCD(Liquid Crystal
13、 Diodes)模块,简称LCM.。模块内部含有控制和驱动电路等部件的液晶模块组件,使用中将其作为一个独立的器件使用。在使用时,将字符和命令通过其接口送到模块内部,模块内的电路控制液晶逐一显示从端口输入的各个字符。在LCD的段电极与背电极间施加电压(通常为4V或5V),可使该段呈黑色,这样可以实现显示。由于液晶的驱动电路较为复杂,因此在市场上出现了一种称为液晶显示模块的器件。液晶显示模块是一种将液晶显示器件、连接件、集成电路、PCB线路板、背光源、结构件装配在一起的组件,实际上,它是一种商品化的部件。在任务中采用常用的字符型液晶显示模块LCD1602作为显示器件,其引脚功能见表1。编号符号引脚
14、说明编号符号引脚说明1Vss电源地9D2Data I/O2Vdd电源正极10D3Data I/O3VL液晶显示偏压信号11D4Data I/O4RS数据/命令选择端(H/L)12D5Data I/O5R/W读/写选择端(H/L)13D6Data I/O6EN使能信号14D7Data I/O7D0Data I/O15BLA背光源正极8D1Data I/O16BLK背光源负极 表14.LCD1602操作说明(1)LCD1602的基本操作时序 读状态:输入RS=L,RW=H,EN=H; 写指令:输入RS=L,RW=H,D0D7=指令码,EN=高脉冲; 读数据:输入RS=H,RW=H,EN=H; 写指
15、令:输入RS=L,RW=H,D0D7=数据,EN=高脉冲;(2)LCD1602的指令说明 1)0011 1000:162显示,57点阵,8位数据接口。 2)0000 0001:显示清屏,数据指针清0,所有显示清0。 3)0000 0010:显示回车,数据指针清0。 4)00001DCB: D=1 开显示; D=0 关显示。 C=1 显示光标; C=0 不显示光标。 B=1 光标闪烁; B=0 光标不显示。 5)000001NS: N=1 当读或定一个字符后地址指针加1,且光标加1。 N=0 当读或定一个字符后地址指针减1,且光标减1。 S=1 当写一个字符,整屏显示左移(N=1)或右移(N=0
16、)。实现光标不移动而屏幕移动的效果。 6)80HA7H: 设置数据地址指针(第一行)。 7)C0HE7H: 设置数据地址指针(第二行)。 2.4 元件清单 (1) LCD1602 一个(2) AT89S52单片机 一个(3) 电阻10K 1K 各一个(4) 电容 20F 两个(5) 12Mhz晶振一个(6) 复位按键一个(7) 下载线一根(8) 导线若干3 软件设计软件设计部分主要是说明程序设计的思路和实现方法、程序。包含了整体的设计思路,和每个程序的作用和实现的方法。整个程序实际上包含三个部分:频率产生、函数中断和LCD显示部分。而其中的每一个部分都有一段程序去实现,在这部分我们将对每个程序
17、进行详细说明其作用和实现方法。3.1 软件功能(1) AT89S52单片机 利用C语言程序来实现定时/计数器功能,用程序来选择定时/计数器的工作方式,确定工作的模式,实现全16位的定时/计数器。再通过定时/计数器来设置中断程序,完成随意中断。(2) LCD1602液晶显示 通过3.2 LCD驱动程序#include /包含头文件#define uchar unsigned char#define DBPort P0 /定义端口sbit LcdRs= P11;sbit LcdRw= P12;sbit LcdEn = P13;#ifndef LCD_CHAR_1602_2005_4_9#defin
18、e LCD_CHAR_1602_2005_4_9#include unsigned char LCD_Wait(void)LcdRs=0;LcdRw=1;_nop_();LcdEn=1;_nop_();LcdEn=0;return DBPort;#define LCD_COMMAND0 / Command#define LCD_DATA1 / Data#define LCD_CLEAR_SCREEN0x01 / 清屏#define LCD_HOMING 0x02 / 光标返回原点void LCD_Write(bit style, unsigned char input)LcdEn=0;LcdR
19、s=style;LcdRw=0;_nop_();DBPort=input;_nop_();/注意顺序LcdEn=1;_nop_();/注意顺序LcdEn=0;_nop_();LCD_Wait();#define LCD_SHOW0x04 /显示开#define LCD_HIDE0x00 /显示关 #define LCD_CURSOR0x02 /显示光标#define LCD_NO_CURSOR0x00 /无光标 #define LCD_FLASH0x01 /光标闪动#define LCD_NO_FLASH0x00 /光标不闪动void LCD_SetDisplay(unsigned char
20、DisplayMode)LCD_Write(LCD_COMMAND, 0x08|DisplayMode);#define LCD_AC_UP0x02#define LCD_AC_DOWN0x00 / default#define LCD_MOVE0x01 / 画面可平移#define LCD_NO_MOVE0x00 /defaultvoid LCD_SetInput(unsigned char InputMode)LCD_Write(LCD_COMMAND, 0x04|InputMode);void LCD_Initial() /LCD初始化LcdEn=0;LCD_Write(LCD_COMM
21、AND,0x38); /8位数据端口,2行显示,5*7点阵LCD_Write(LCD_COMMAND,0x38);LCD_SetDisplay(LCD_SHOW|LCD_NO_CURSOR); /开启显示, 无光标LCD_Write(LCD_COMMAND,LCD_CLEAR_SCREEN); /清屏LCD_SetInput(LCD_AC_UP|LCD_NO_MOVE); /AC递增, 画面不动void GotoXY(unsigned char x, unsigned char y)if(y=0)LCD_Write(LCD_COMMAND,0x80|x);if(y=1)LCD_Write(LC
22、D_COMMAND,0x80|(x-0x40);void Print(unsigned char *str)while(*str!=0)LCD_Write(LCD_DATA,*str);str+;#endifbit time;uchar disp8=0,0,0,0,0,0,0,0;uchar T0count,T1count;void delay_nms(unsigned int n) /延迟一段时间 unsigned int i; unsigned char j; for(i=n;i0;i-) for(j=250;j0;j-); for(j=250;j0;j-); /*将频率转换为显示数据*/
23、void calc () uchar i; long frequency; frequency=T0count*65536+TH0*256+TL0;/*实现将频率转换为显示数组*/ for(i=7;i0;i-) dispi=(frequency%10)+0x30; frequency=frequency/10; disp0=frequency+0x30; void init() /对变量初始化 T0count=0; T1count=0; TH0=0; TL0=0;3.3 主程序main() init();LCD_Initial(); /以上两条调用初始化函数 TMOD=0x15; /将T1设置
24、为模式1、定时方式,T0为模式1、计数方式 TH1=(65536-50000+36)/256; TL1=(65536-50000+36)%256; ET1=1; ET0=1; EA=1; /*将其中的高8位和低8位的初始值更改后可输出不同频率的脉冲*/ T2MOD=0x2; RCAP2H=245; /设置高8位初始值 RCAP2L=74; /设置低8位初始值 TR2=1; /开始输出 TR1=1; TR0=1;GotoXY(0,0);Print(Frequency: Hz);while(1)GotoXY(0,1);Print(disp);delay_nms(1000);void time0()
25、 interrupt 1 /定时器0的服务中断程序 T0count+; /计算T0在1秒内中断几次void time1() interrupt 3 TH1=(65536-50000+36)/256; TL1=(65536-50000+36)%256; if(T1count=19)/1s time=1; TR1=0; TR0=0; calc(); init(); TR1=1; TR0=1; else T1count+; 4 课程设计体会 本设计的成品是一个利用单片机产生脉冲,利用LCD1602显示出频率.频率计主要由AT89S52单片机最小系统电路、LCD1602电路构成,它能实现1HZ500K
26、HZ任意频率的显示。在老师的帮助下,在组员的共同努力下,我们终于按时按质地完成了任务。这次单片机实训,有很多个课题,如电子秒表、点阵液晶、红外遥控、可调数字闹钟等等。通过单片机最小系统基础上外接不同的相关电路,并让这些电路按照程序设计要求工作,组成单片机的应用电路。这些应用电路可以实现各种不同的功能。这让我们见识到了单片机应用功能的强大。在实训过程中,我们遇见了很多困难。重要的困难有以下两点:一是写源程序的时候,关于LCD0602显示这部分我们一窍不通。我们只有通过研究书本后面关于这部分的知识,结合已学过的简易频率计,编写出了整个程序的框架.我们虽然用尽全力但还是有好多错误。通过同学们的帮助修
27、改,终于调试成功。二是我们在画图的时候放置LCD1602时总是找不到元件的位置,经过同学和老师的帮助我们终于成功画出了图形,着让我们知道我们对我们所学的软件的应用一点也不能够运用自如,还一点也不熟悉,我们下来要做的就是好好练习我们所学的软件,让我们的专业知识学得更好。在这次实训中还让我们认识到了团队精神的伟大,当我们有困难的时候,我们同学之就应该相互帮助。.通过这次实训,我们巩固和增长了很多关于单片机的专业的知识,自己动手设计和制作也增加了我们自己的实践能力,在把知识转化为能力和能力转化为工程素质中,我们的个人能力得到了很大的提高。5 参考文献1 朱永金 成友才.单片机应用技术(C语言)M.北京:劳动和社会保障出版社,2007.7 2 何立民. 单片机初级教程M.北京:北京航空航天大学出版社,2006.8