📄 main.c
字号:
#include <reg52.h>
#include <INTRINS.H>
#include <math.H>
#include <stdio.H>
#include "LCD1602.h"
#define UART_ASK 0xA5
sbit OPEN = P1^0;//连接CPLD的IO27
sbit GATE = P3^2;//连接CPLD的IO28
sbit CLRP = P3^5;//连接CPLD的IO29
//定义CPLD内部计数器地址
unsigned char xdata REG0 _at_ 0xfff0;
unsigned char xdata REG1 _at_ 0xfff1;
unsigned char xdata REG2 _at_ 0xfff2;
unsigned char xdata REG3 _at_ 0xfff3;
unsigned char str_buff[30];
unsigned char counter;
void timer0_init()
{
TMOD|=0x09;
ET0=1;
EA=1;
TR0=0;
}
void delay_ms(unsigned int n)
{
unsigned char j;
while(n--)
for(j=0;j<230;j++);//230是实验测试所得!
}
main()
{
double fx,temp;
uint temp1;
lcd1602_init();
timer0_init();
OPEN=0;
lcd_put_xys(1,1,"Cymometer");
while(1)
{
OPEN=0;
temp1=0;
while(GATE)
if(temp1++>65000) break; //超时跳出
CLRP=1; //清零CPLD内部计数器
CLRP=0;
TH0=0; //清除单片机内部计数器
TL0=0;
counter=0;
TR0=1; //开启定时器0
OPEN=1;//开启CPLD内部计数器
while(counter<1);
OPEN=0;
temp1=0;
while(GATE)
if(temp1++>65000) break;//超时跳出
TR0=0; //关闭定时器0
temp=counter*65536+TH0*256+TL0;
fx=1843200/temp;//(22118400/12=1843200)
fx=fx*(REG2*65536+REG1*256+REG0);//和数据总线P0相关
sprintf(str_buff,"%-8.3fHz",fx);
lcd_put_xys(1,2," "); //清屏
lcd_put_xys(1,2,"f=");
lcd_put_xys(3,2,str_buff);
delay_ms(1000);
}
}
void timer0_int(void) interrupt 1
{
counter++;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -