基于单片机的LCD频率计设计课程设计_第1页
基于单片机的LCD频率计设计课程设计_第2页
基于单片机的LCD频率计设计课程设计_第3页
基于单片机的LCD频率计设计课程设计_第4页
基于单片机的LCD频率计设计课程设计_第5页
已阅读5页,还剩12页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

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单片机

3、中的t2定时器/计数器产生1000hz的脉冲,从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的外部计数输入),时钟输

6、出 p1.1 t2ex(定时器/计数器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。在使

7、用8位地址(如movx ri)访问外部数据存储器时,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(串行输

8、出口)p3.2 into(外中断0)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输出固定的脉冲信号,因此它可对外输出时钟或用于定时目的。要注意的是:每当访问外部数据存储器时将

9、跳过一个ale脉冲。对flash存储器编程期间,该引脚还用于输入编程脉冲(prog)。如有必要,可通过对特殊功能寄存器(sfr)区中的8eh单元的d0位置位,可禁止ale操作。该位置位后,只有一条movx和movc指令才能将ale激活。此外,该引脚会被微弱拉高,单片机执行外部程序时,应设置ale禁止位无效。psen程序储存允许(psen)输出是外部程序存储器的读选通信号,当at89c52由外部程序存储器取指令(或数据)时,每个机器周期两次psen有效,即输出两个脉冲,在此期间,当访问外部数据存储器,将跳过两次psen信号。ea/vpp外部访问允许,欲使cpu仅访问外部程序存储器(地址为0000

10、h-ffffh),ea端必须保持低电平(接地)。需注意的是:如果加密位lb1被编程,复位时内部会锁存ea端状态。如ea端为高电平(接vcc端),cpu则执行内部程序存储器的指令。flash存储器编程时,该引脚加上+12v的编程允许电源vpp,当然这必须是该器件是使用12v编程电压vpp。 通过任务分析,要求单片机要完成三个实时任务,分别是:对输入信号周期进行计数、定时1s、动态显示以及频率计算频率转换为显示数据。要同时完成三个实时任务,只有使用中断的方式进行任务分割,可以用定时器t0、t1及其中断服务程序和主程序来分别完成每一个任务。1.定时1st1工作在定时状态下,最大定时实践约为65ms,

11、达不到1s的定时,所以采用时50ms,共定时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 ×

12、 65536 + b 3.定时器/计数器的工作方式模式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引脚功能介绍字符型液晶是

13、一种液晶显示器lcd(liquid crystal diodes)模块,简称lcm.。模块内部含有控制和驱动电路等部件的液晶模块组件,使用中将其作为一个独立的器件使用。在使用时,将字符和命令通过其接口送到模块内部,模块内的电路控制液晶逐一显示从端口输入的各个字符。在lcd的段电极与背电极间施加电压(通常为4v或5v),可使该段呈黑色,这样可以实现显示。由于液晶的驱动电路较为复杂,因此在市场上出现了一种称为液晶显示模块的器件。液晶显示模块是一种将液晶显示器件、连接件、集成电路、pcb线路板、背光源、结构件装配在一起的组件,实际上,它是一种商品化的部件。在任务中采用常用的字符型液晶显示模块lcd1

14、602作为显示器件,其引脚功能见表1。编号符号引脚说明编号符号引脚说明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=高脉冲;

15、 读数据:输入rs=h,rw=h,en=h; 写指令:输入rs=l,rw=h,d0d7=数据,en=高脉冲;(2)lcd1602的指令说明 1)0011 1000:16×2显示,5×7点阵,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

16、,且光标减1。 s=1 当写一个字符,整屏显示左移(n=1)或右移(n=0)。实现光标不移动而屏幕移动的效果。 6)80ha7h: 设置数据地址指针(第一行)。 7)c0he7h: 设置数据地址指针(第二行)。 2.4 元件清单 (1) lcd1602 一个(2) at89s52单片机 一个(3) 电阻10k 1k 各一个(4) 电容 20f 两个(5) 12mhz晶振一个(6) 复位按键一个(7) 下载线一根(8) 导线若干3 软件设计软件设计部分主要是说明程序设计的思路和实现方法、程序。包含了整体的设计思路,和每个程序的作用和实现的方法。整个程序实际上包含三个部分:频率产生、函数中断和lc

17、d显示部分。而其中的每一个部分都有一段程序去实现,在这部分我们将对每个程序进行详细说明其作用和实现方法。3.1 软件功能(1) at89s52单片机 利用c语言程序来实现定时/计数器功能,用程序来选择定时/计数器的工作方式,确定工作的模式,实现全16位的定时/计数器。再通过定时/计数器来设置中断程序,完成随意中断。(2) lcd1602液晶显示 通过3.2 lcd驱动程序#include <at89x52.h> /包含头文件#define uchar unsigned char#define dbport p0 /定义端口sbit lcdrs= p11;sbit lcdrw= p1

18、2;sbit lcden = p13;#ifndef lcd_char_1602_2005_4_9#define lcd_char_1602_2005_4_9#include <intrins.h>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

19、 0x02 / 光标返回原点void lcd_write(bit style, unsigned char input)lcden=0;lcdrs=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_flash0x0

20、1 /光标闪动#define lcd_no_flash0x00 /光标不闪动void lcd_setdisplay(unsigned char 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_comma

21、nd, 0x04|inputmode);void lcd_initial() /lcd初始化lcden=0;lcd_write(lcd_command,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,

22、unsigned char y)if(y=0)lcd_write(lcd_command,0x80|x);if(y=1)lcd_write(lcd_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;

23、unsigned char j; for(i=n;i>0;i-) for(j=250;j>0;j-); for(j=250;j>0;j-); /*将频率转换为显示数据*/void calc () uchar i; long frequency; frequency=t0count*65536+th0*256+tl0;/*实现将频率转换为显示数组*/ for(i=7;i>0;i-) dispi=(frequency%10)+0x30; frequency=frequency/10; disp0=frequency+0x30; void init() /对变量初始化 t0c

24、ount=0; t1count=0; th0=0; tl0=0;3.3 主程序main() init();lcd_initial(); /以上两条调用初始化函数 tmod=0x15; /将t1设置为模式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() interrupt 1 /定时器0的服务中断程序 t0count+; /计算t0在1秒内中断几次void time1() interrupt 3 th1=(65536-50000+36)/256; tl1=(65536-50000+36)%256; if(t1

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论