单片机简易位数码管频率计c语言程序
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
#include
#define uchar unsigned char
#define uint unsigned int
#define ulong unsigned long
unsigned char code duan[] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; //段码控制
unsigned char code wei[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdF}; //位选控制查表的方法控制//0xfe,0xfd,0xfb,0xf7,0xef,0xdF
void display(uchar,uchar,uchar,uchar,uchar,uchar);
void delay(uint);
uchar flag,n,a,b,c,d,e,f;
ulong m;
uint num;
void main()
{
TMOD=0x25; //设置定时器t1方式2,计数器t0方式0
TH0=0;
TL0=0;
TH1=6;
TL1=6;
EA=1;
ET0=1;
ET1=1;
TR0=1;
TR1=1;
while(1)
{
if(flag)
{
m=n*65536+256*TH0+TL0;
m=256*TH0+TL0;
a=m/100000;
b=m%100000/10000;
c=m%100000%10000/1000;
d=m%100000%10000%1000/100;
e=m%100000%10000%1000%100/10;
f=m%100000%10000%1000%100%10;
}
display(a,b,c,d,e,f);
}
void display(uchar a,uchar b,uchar c,uchar d,uchar e,uchar f) //数码管显示子程序{
P0=wei[0];
P2=duan[a];
delay(1);
P0=wei[1];
P2=duan[b];
delay(1);
P0=wei[2];
P2=duan[c];
delay(1);
P0=wei[3];
P2=duan[d];
delay(1);
P0=wei[4];
P2=duan[e];
delay(1);
P0=wei[5];
P2=duan[f];
delay(1);
}
void delay(uint xms) //延时子程序
{
uint i,j;
for(i=xms;i>0;i--)
for(j=110;j>0;j--);
}
void t0() interrupt 1 //计数器t0服务子程序
{
n++;
}
void T1_time()interrupt 3 //定时器t1服务子程序
num++;
if(num==4000) {
TR0=0;
TR1=0;
flag=1;
}
}