基于单片CPU的LCD显示频率计设计

上传人:公**** 文档编号:472800280 上传时间:2022-08-01 格式:DOC 页数:13 大小:577.50KB
返回 下载 相关 举报
基于单片CPU的LCD显示频率计设计_第1页
第1页 / 共13页
基于单片CPU的LCD显示频率计设计_第2页
第2页 / 共13页
基于单片CPU的LCD显示频率计设计_第3页
第3页 / 共13页
基于单片CPU的LCD显示频率计设计_第4页
第4页 / 共13页
基于单片CPU的LCD显示频率计设计_第5页
第5页 / 共13页
点击查看更多>>
资源描述

《基于单片CPU的LCD显示频率计设计》由会员分享,可在线阅读,更多相关《基于单片CPU的LCD显示频率计设计(13页珍藏版)》请在金锄头文库上搜索。

1、2013/2014学年 第一学期课程设计II 实验报告 模 块 名 称 Proteus软件设计(51单片机) 专 业 通信工程 学 生 班 级 学 生 学 号 学 生 姓 名 指 导 教 师 需要程序和仿真电路图请联系QQ:643233819设计题目基于单片的显示频率计设计任务要求基本要求:1 用P1或P3口,产生一方波信号,频率为1000Hz,用8LED显示频率和周期2 将输出信号输入到另一端口作频率计的信号输入端,测量此方波信号的频率、周期和脉宽,在另一8LED上将参数值显示出来。3 设置一功能键,能将当前LED上的信号值锁定发挥部分:1 通过键盘,可修改方波的频率。每按一次键,频率值进给

2、或后退100Hz,频率范围100Hz1500Hz2 按键时,蜂鸣器发出提示音,表示按键有效3 用图形方式显示输入波动态显示格式:自定实验设备及软件(1)PC机 一台(2) Keil c51单片机仿真软件(3)Proteus软件同组人员学号及姓名参考文献郭天祥十天学会单片机谭浩强C语言程序设计新概念51单片机 C语言教程杜洋爱上单片机基于单片的显示频率计设计一、实验目的本课程设计是在理论课程的基础上,重点培养学生的动手能力,通过电路设计、理论计算、实际编程、调试、测试、分析查找故障,解决在实际设计中的问题,使设计好的电路能正常工作,并可能结合实际的实验板进行下载测试。学习proteus软件的使用

3、,学习汇编语言以及C语言在51编程上的使用,学习系统测试,自主实验。二、实验设备(1)PC机 一台(2) Keil c51单片机仿真软件(3)Proteus软件三、实验内容简易频率计类:基于单片的显示频率计设计基本要求:1 用P1或P3口,产生一方波信号,频率为1000Hz,用一组数码管或LCD显示频率和周期以及脉宽等参数(也可用信号源或模拟信号源)。2 将输出信号输入到另一端口(INT0/INT1)作频率计的信号输入端,测量此方波信号的频率、周期和脉宽,在另一组数码管或LCD上将参数值显示出来。(刷新时间1秒)。发挥部分:1设置一功能键,能将当前数码管或LCD上的信号参数值锁定。2通过键盘,

4、可修改方显示参数,刷新时间。3按键时,蜂鸣器发出提示音,表示按键有效4用图形方式显示输入波形(用模拟示波器) 动态显示格式:自定四、实验原理 单片机卫星计算机简称单片机,是指在一块芯片体上集成了中央处理器CPU,随即存储器RAM,程序存储器ROM或EPROM,定时器/计数器,中断控制器以及串行和并行I/O接口等部件,构成一个完整的微型计算机。 单片机应用系统中,经常要对一个连续的脉冲波频率进行测量。在实际应用中,对于转速,位移、速度、流量等物理量的测量,一般也是由传感器转换成脉冲电信号,采用测量频率的手段实现。 使用单片机测量频率或周期,通常是利用单片机的定时计数器来完成的,测量的基本方法和原

5、理有两种: 测频法:在限定的时间内(如1秒钟)检测脉冲的个数。 测周法:测试限定的脉冲个数之间的时间。 这两种方法尽管原理是相同的,但在实际使用时,需要根据待测频率的范围、系统的时钟周期、计数器的长度、以及所要求的测量精度等因素进行全面和具体的考虑,寻找和设计出适合具体要求的测量方法。 在具体频率的测量中,需要考虑和注意的因素有以下几点。 系统的时钟。首先测量频率的系统时钟本身精度要高,因为不管是限定测量时间还是测量限定脉冲个数的周期,其基本的时间基准是系统本身时钟产生的。其次是系统时钟的频率值,因为系统时钟频率越高,能够实现频率测量的精度也越高。因此使用AVR测量频率时,建议使用由外部晶体组

6、成的系统的振荡电路,不使用其内部的RC振荡源,同时尽量使用频率比较高的系统时钟。 所使用定时计数器的位数。测量频率要使用定时计数器,定时计数器的位数越长,可以产生的限定时间越长,或在限定时间里记录的脉冲个数越多,因此也提高了频率测量的精度。所以对频率测量精度有一定要求时,尽量采用16位的定时计数器。 被测频率的范围。频率测量需要根据被测频率的范围选择测量的方式。当被测频率的范围比较低时,最好采用测周期的方法测量频率。而被测频率比较高时,使用测频法比较合适。需要注意的是,被测频率的最高值一般不能超过测频MCU系统时钟频率的1/2,因为当被测频率高于MCU时钟1/2后,MCU往往不能正确检测被测脉

7、冲的电平变化了。 除了以上三个因素外,还要考虑频率测量的频度(每秒内测量的次数),如何与系统中其它任务处理之间的协调工作等。频率测量精度要求高时,还应该考虑其它中断以及中断响应时间的影响,甚至需要在软件中考虑采用多次测量取平均的算法等。测频法的基本思想,就是采用在已知限定的时间内对被测信号输入的脉冲个数进行计数的方法来实现对信号频率的测量。当被测信号的频率比较高时,采用这种方法比较适合,因为在一定时间内,频率越高,计数脉冲的个数也越多,测量也越准确。 本次实验,采用了测频法,采用在已知限定的时间内对被测信号输入的脉冲个数进行计数的方法来实现对信号频率的测量,用P1或P3口,产生一方波信号,频率

8、分别为100Hz,500Hz,1000Hz,用LCD显示频率以及脉宽参数。程序:#include#include#define uchar unsigned char#define uint unsigned intsbit S1=P20;sbit lcdrs=P30;sbit lcdrw=P33;sbit lcde=P34;uchar set_st=0; /状态标志sbit PWMPort = P37;int FCount;uint FSet,aa,bb,cc;void delay(uint z) uint i,j; for(i=z;i0;i-) for(j=110;j0;j-);void

9、Delay1(uint num)while( -num );void write_com(uchar com) lcdrs=0; P1=com; delay(5); lcde=1; delay(5); lcde=0;void write_data(uchar date) lcdrs=1; P1=date; delay(5); lcde=1; delay(5); lcde=0;void init() lcdrw=0; lcde=0; write_com(0x38); write_com(0x0c); write_com(0x06); write_com(0x01); write_com(0x80

10、+0x00); write_data(f); write_data(:); write_com(0x80+0x0a); write_data(5); write_data(0); write_data(%); write_com(0xc0+0x00); write_data(f); write_data(:); write_com(0xc0+0x06); write_data(H); write_data(Z); write_com(0xc0+0x0a);write_data(0x30+cc/10);write_data(0x30+cc%10); write_data(%);void writ

11、e_f(uint date) /写频率 uchar qian,bai,shi,ge; qian=date/1000; bai=date/100%10; shi=date/10%10; ge=date%10; write_com(0x80+0x02); write_data(0x30+qian); write_data(0x30+bai); write_data(0x30+shi); write_data(0x30+ge); write_data(0x48); write_data(0x5a);write_com(0xc0+0x02);write_data(0x30+bb/1000);write

12、_data(0x30+bb/100%10);write_data(0x30+bb/10%10);write_data(0x30+bb%10); write_com(0xc0+0x0a);write_data(0x30+cc/10);write_data(0x30+cc%10);void TimerInit(void)TMOD |= 0x10;TH1 = 0xFF;/ Timer0 count 50us when cpu at 12MHzTL1 = 0xCE;TR1 = 1;ET1 = 1; EX0=1;/外部中断0开 IT0=1;/边沿触发EA = 1;void main(void)init(

13、);TimerInit();while(1)if(S1=0) Delay1(2000); dowhile(S1=0); set_st+; if(set_st2)set_st=0;if(set_st=0) FCount=100;if(set_st=1) FCount=500;if(set_st=2) FCount=1000;write_f(FCount);FSet = 20000 / FCount;void TIMER1INT(void)interrupt 3static uint FValue = 0;TH1 = 0xFF;/50us when cpu at 12MHzTL1 = 0xDD;if(+FValue = FSet)/定时时间到,输出电平取反aa+;if(aa=FCount) aa=0;PWMPort = !PWMPort;FValue = 0;void INT0_ISR(void) interrupt 0 using 1static unsigned char second;/定义静态变量,退出该程序后内容不变 second+;/加

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 学术论文 > 毕业论文

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号