本文包含原理图、PCB、源代码、封装库、中英文PDF等资源
您需要 登录 才可以下载或查看,没有账号?注册会员
×
学习板上的频率计程序,红色不太懂。。。
大家帮忙说一下这是什么结构,干什么的??有这方面程序资料也可以给我发邮箱。。。
duckhead568@sina.com 谢谢[url][/url]
#include <reg51.h>
//定义位操作
sbit ls1=P0^2; //个位公共极
sbit ls2=P0^3; //十位公共极
sbit ls3=P0^4; //百位公共极
sbit ls4=P0^5; //千位公共极
#define Out P1 //数据输出端
unsigned char msec; //闸门
union{
unsigned char c[2];
unsigned int i;
}Freq;
unsigned char tab[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; //共阳字表
unsigned char disbuf[]={0,0,0,0}; //显存
//----初始化------------------------------
void Init(void)
{
TMOD=0x15; //T0=16位外部计数器,T1=定时方式1
TH0=TL0=0; //计数器清0
TH1=0x3C;TL1=0xB0; //12.0000MHz@50mS
ET1=1;
}
//------闸门中断--------------------------
void Timer1(void) interrupt 3
{ TH1=0x3C;TL1=0xB0; //12.0000MHz@50mS
msec++; //50mS +1
if (msec>=20) //1秒闸门
{
TR0=0; //停止计数
EA=0;
Freq.c[0]=TH0;
Freq.c[1]=TL0;
TH0=TL0=0;
TH1=0x3C;TL1=0xB0;
msec=0; //开始下次计数
EA=1;
TR0=1; //开始计数
}
}
//延时----------------------------
Delay(unsigned int t)
{
while(t--);
}
//显示----------------------------
void Display(unsigned int mun)
{
unsigned char i=0,j;
do{
disbuf=mun%10; //将带进的mun分位到个十百千
i++;
}
while(mun/=10);
for(j=0;j<50;j++)
{
Out=tab[disbuf[0]];
ls1=0;
Delay(100);
ls1=1;
Out=tab[disbuf[1]];
ls2=0;
Delay(100);
ls2=1;
Out=tab[disbuf[2]];
ls3=0;
Delay(100);
ls3=1;
Out=tab[disbuf[3]];
ls4=0;
Delay(100);
ls4=1;
}
}
//---------------------------------------
main()
{
Init();
EA=1; //允许闸门中断
TR1=1; //开计时闸门
TR0=1; //开始计数
while(1)
{
if(Freq.i>9999) Freq.i=0;
Display(Freq.i);
}
} |
|