📄 lcd.c
字号:
#include <reg51.H>
#include"LCD1602.h"
//--------------------------
//5位lcd显示频率计设计
//Designed by BoBo
//--------------------------
//--------------------------------------------------
//固定函数声明
void int_0(); //外部中断0
void int_1(); //外部中断1
void t0(); //定时器中断1
void t1(); //定时器中断2
void serial_1(); //串行中断1
void serial_2(); //串行中断2
//---------------------------------------------------
//用户函数声明
void initial(); //初始化
void IntToStr(unsigned long t, unsigned char *str);//数据转换模式
void Delay1ms(unsigned int num); //延时模块
//---------------------------------------------------
//-------------------------------------------------------------------------------------------------------
//信号和数据声明
unsigned char timecount=0; //闸门计数值
unsigned char T0count; //计数器溢出计数值
sbit Gate=P3^1; //闸门输出口
sbit Clr=P3^7; //清零信号
unsigned long x; //频率计数容器1
bit flag=0; //闸门结束标志
unsigned char TempBuffer[10];//数据缓冲区
//---------------------------------------------------------------------------------------------------------
void main(void)
{
initial();
Gate=1; //闸门开
Clr=1; //先清零74LS393
LCD_Initial(); //lcd初始化
GotoXY(0,0); //指向0行0列
Print(" The Frequent ");
GotoXY(0,1);
Print(" Hz by BoBo");
while(1)
{
Clr=0;
if(flag)
{
flag=0;
IntToStr(x,TempBuffer); //数值转换
GotoXY(0,1); //定位
Print(TempBuffer); //打印数据
TR0=1;
}
}
}
void initial() //初始化
{
TMOD=0x15;
TH0=0; //计数器付初值
TL0=0; //计数器付初值
TH1=0x3b; //定时器付初值
TL1=0xb0; //定时器付初值
TR1=1; //定时器启动
TR0=1; //计数器启动
ET0=1; //计数器开中断
ET1=1; //定时器开中断
EX1=1; // INT1中断开
IT1=0; // INT1低电平触发(为1则为下降沿触发)
EA=1; //开中断
return;
}
void IntToStr(unsigned long t, unsigned char *str)
{
unsigned char a[10]; char i,length;
while(t/10) //将计数值转换为数码管段码值
{
a[i]=t%10;
t=t/10;
i++;
}
a[i]=t;
length=i+1;
for(i=0; i<length; i++) //转成ASCII码
a[i]=a[i]+'0';
//for(i=0; a[i]=='0' && i<=6; i++);
//for(j=8-n; j<i; j++) //填充空格
// { *str=' '; str++; }
for(i=length-1; i>=0; i--)
{ *str=a[i]; str++; } //加入有效的数字
*str='\0';
}
void int_1() interrupt 2 using 1 //INT1中断 由P3.1引脚产生
{
T0count=0; //计数高位清零
flag=1;
TH0=0; //计数器清零
TL0=0;
}
void t0(void) interrupt 1 using 0 //计数器中断服务程序
{
T0count++;
}
void t1(void) interrupt 3 using 0 //定时器溢出中断程序
{
TH1=0x3b; //重置初值
TL1=0xb0;
timecount++;
if(timecount==20)
{
TR0=0; //停止计数器
x=(T0count*65536+TH0*256+TL0)*255+P1;//取计数值
Clr=1; //产生清零信号
timecount=0; //定时计数清零
Gate=!Gate; //闸门取反
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -