📄 标准两用表.c
字号:
#include<reg51.h>
//由Key控制实现数字表与钟的切换
unsigned char sec=0,min=0,hour=0,count=0,count1=0,j=0;
number[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; //显示数组
number1[10]={0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10};
sbit four=P2^0; //片选端
sbit three=P2^1;
sbit two=P2^2;
sbit one=P2^3;
sbit Key=P3^7; //功能转换键
sbit k=P1^7; //秒显示位
sbit ST=P3^0; //ADC0809设置
sbit OE=P3^1;
sbit EOC=P3^2;
unsigned int adc0[8] ; //存放A/D的数据
unsigned int avedata(); //求转换后的平均值
unsigned int xd;
unsigned int adcdata1,adcdata2, adcdata3,x; //A/D相关变量
void delay_2ms(); //延迟
void show(); //显示A/D结果
void showclock(); //时钟显示方式
void showtest(); //数字表显示方式
void adcdata();
void main()
{TMOD=0x01; //定时器设置
TL0=-50000%256;
TH0=-50000/256;
EA=1;
ET0=1;
TR0=1;
P2=0xf0; //初始化
P0=0xff;
while(1)
{ while(Key==1)
{
for(xd=0;xd<10;xd++) ;
if(Key==1)
{
showclock();
}
}
while(!Key)
{
for(xd=0;xd<10;xd++) ;
if(!Key)
{
showtest();
}
}
}
}
//--------------------------------------
void dingshi() interrupt 1 using 0
{ //j++; //
TL0=-50000%256;
TH0=-50000/256;
if((count++)==10)
{ count=0;
if(sec==59)
{sec=0;
if(min==59)
{ min=0;
if(hour==23)
hour=0;
else hour++;
}
else min++;
}
else sec++ ;
}
}
//----------------------------------------
void showclock()
{
if(Key)
{
for(xd=0;xd<10;xd++) ;
}
if(Key)
{
one=0;
P1=number[min%10];
delay_2ms();
one=1;
two=0;
P1=number[min/10];
delay_2ms();
two=1;
three=0;
//秒显示控制
if(count==0)
{
P1=number1[hour%10];
}
else P1=number[hour%10];
delay_2ms();
three=1;
four=0;
P1=number[hour/10];
delay_2ms();
four=1;
}
}
//-------------------------------------
void delay_2ms()
{
unsigned i;
for(i=0;i<80;i++) ;
}
//-------------------------------------------------------------------------------------
void showtest()
{
if(!Key)
{
for(xd=0;xd<10;xd++) ;
}
if(!Key)
{
P2=0xff;
OE=0;
ST=0;
ST=1;
while(!Key)
{ for(xd=0;xd<10;xd++) ;
ST=0;
while(!EOC);
OE=1;
adcdata2=avedata();
show();
ST=1;
}
} else OE=0;
}
//----------------------------------
void show()
{
if(!Key)
{
for(xd=0;xd<10;xd++) ;
}
if(!Key)
{
adcdata1=adcdata2*19;
four=0;
P1=number1[adcdata1/1000];
adcdata1%=1000;
delay_2ms();
four=1;
three=0;
P1=number[adcdata1/100];
adcdata1%=100;
delay_2ms();
three=1;
two=0;
P1=number[adcdata1/10];
delay_2ms();
two=1;
one=0;
P1=number[adcdata1%10];
delay_2ms();
one=1;
}
else {OE=0;showclock();}
}
//------------------------------------------
unsigned int avedata() //求平均
{
unsigned int i,j,max,min,sum=0,a,b,c,d,e,f,g,h;
if(!Key)
{
for(xd=0;xd<10;xd++) ;
}
if(!Key)
{
for(i=0;i<8;i++)
{x=P0;
a=(x&0x01)*128;
b=(x&0x02)*32;
c=(x&0x04)*8;
d=(x&0x08)*2;
e=(x&0x10)/2;
f=(x&0x20)/8;
g=(x&0x40)/32;
h=(x&0x80)/128;
adc0[i]=a+b+c+d+e+f+g+h;
//adc0[i]=(k&0x01)*128+(k&0x02)*32+(k&0x04)*8+(k&0x08)*2+(k&0x10)/2+(k&0x20)/8+(k&0x40)/32+(k&0x80)/128; //{ adc0[i]=P0; delay_2ms(); } ? //放数据
}
} else {OE=0;showclock();}
for(i=0;i<7;i++)
{
if(adc0[i+1]>adc0[i])
max=adc0[i+1];
else max=adc0[i];
}
for(j=0;j<7;j++)
{
if(adc0[j+1]>adc0[j])
min=adc0[j];
else min=adc0[j+1];
}
for(i=0;i<8;i++)
sum=sum+adc0[i];
adcdata3=(sum-max-min)/6;
return(adcdata3) ;
} //else OE=0;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -