📄 f-count.c
字号:
/*****************************************************
* 频率计 *
* 采用中断方式,即来一个脉冲,计数一次。 *
* 动态扫描显示 *
* *
* *
* 制作组成员:张君波,张意,郭远昊 *
* 时间:08/8/17 *
* *
******************************************************/
#include <reg51.h>
#include<stdio.h>
#define uchar unsigned char
#define uint unsigned int
Uart_Init();
sbit P20=P2^0 ;
sbit P21=P2^1;
sbit P22=P2^2;
sbit P23=P2^3;
uint t=0,nIndex=0,count=0,k,k1,k2;
char Table[10]={0XC0,0XF9,0XA4,0XB0,0X99,0X92,0X82,0XF8,0X80,0X90};
void delay_ms(uint ms) //延时毫秒级子程序
{
uint i,j;
for(i=0;i<ms;i++)
for(j=0;j<125;j++);
}
void Update_LED()
{
nIndex=k/1000;
P1=Table[nIndex];
P20=1;
delay_ms(1);
P20=0;
nIndex=(k%1000)/100;
P1=Table[nIndex];
P21=1;
delay_ms(1);
P21=0;
nIndex=(k%100)/10;
P1=Table[nIndex];
P22=1;
delay_ms(1);
P22=0;
nIndex=k%10;
P1=Table[nIndex];
P23=1;
delay_ms(1);
P23=0;
}
void jishu()
{
k1=TH1;
k2=TL1;
count=k1*256+k2;
}
void Timer0_Overflow() interrupt 1 using 0
{ TH0=0x3C; /* 计数初值写入TH0 */
TL0=0xB0;/* 写入计数初值到TL0 */
if(t==20)
{
t=0;
jishu();
k=count;
EA=0;
ET0=0;
//Update_LED();
EA=1;
ET0=1;
TH1=0;
TL1=0;
TR0=1;
count=0;
}
t++;
}
Uart_Init()
{SCON = 0x52; /* 设置串行口控制寄存器SCON*/
TMOD = 0x21; /* 12M时钟时波特率为2400 */
TCON = 0x69; /* TCON */
TH1 = 0xf3; /* TH1 */
}
void main()
{
Uart_Init();
TMOD=0x51;
TH0=0x3C; /* 计数初值写入TH0 */
TL0=0xB0; /* 写入计数初值到TL0 */
ET0=1; /* 定时器0中断允许*/
EA=1; /* 全局中断允许 */
TF0=0; /* 定时器0中断标志位清0 */
TR0=1; /* 定时器0准备开始 */
TH1=0;
TL1=0;
ET1=1;
TR1=1;
// k=123;
// Update_LED();
while(1)
{
Update_LED();
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -