频率计:
LCD1602显现
在不添加外部计数硬件的情况下,本实验软件可测最高频率到达460KHz
作业原理:
1S 钟内对输入脉冲所计数的次数则为频率值。
16位二进制加法计数器的最大计数值为 65535。
设置守时器 0 作业在守时方法1,守时1S。
设置守时器 1 作业在计数方法1,对输入脉冲进行计数,溢出发生中止。
将守时器 1中止界说为优先。在中止处理程序里对中止次数进行计数。1S到后,将中止次数和计数器里的计数值取出进行归纳数据处理,处理后的数据送LCD1602显现。
/********************
程序名:频率计
功用:双通道频率丈量,未加分频的情况下最高测频值65KHZ
网站:51单片机教程网http://www.51hei.com
作者:周勇
日期:2010年4月10日
*********************/
#include
sbit led=P1^7;
sbit rs=P3^7;//rs=P2^5;
sbit e=P3^6;//e=P2^7;
sbit shift=P1^7;
#define uchar unsigned char
#define uint unsigned int
uint time,aa;
uint num,ff;
uchar qian,bai,shi,ge;
void delay_ms(uint z)
{
uint x,y;
for(x=z;x>0;x–)
for(y=100;y>0;y–);
}
void writecom(uchar com)//写指令
{
rs=0;
// rw=0;
P2=com;
delay_ms(5);
e=1;
delay_ms(5);
e=0;
}
void writedate(uchar date)//写数据
{
rs=1;
//rw=0;
P2=date;
delay_ms(5);
e=1;
delay_ms(5);
e=0;
}
void lcd_init()
{
P2=0xff;
led=1;
writecom(1);//铲除显现
delay_ms(20);
writecom(0x38);//设置液晶为16*2矩阵,5*7点阵,8位数据接口(写指令)
delay_ms(20);
writecom(0x0E);//设置液晶开显现,显现光标,光标闪耀(写指令)
delay_ms(20);
writecom(0x06);//设置地址主动向右加1(写指令)
delay_ms(20);
writecom(0x80);//光标指针方位初始化(写指令)
delay_ms(20);
}
void lcd_1602xy(uchar x,uchar y,uchar date)//X值为行,Y为列,DATE为数据
{
uchar i,j;
i=x;j=y;
if(i==1)
{
writecom(0x80+j);
delay_ms(1);
writedate(date);
delay_ms(1);
}
if(i==2)
{
writecom(0x80+0x40+j);
delay_ms(1);
writedate(date);
delay_ms(1);
}
}