?? diancanshuceliang.c
字號:
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
uchar code table[]="0123456789Hz.V mAOm ";
sbit lcden=P2^0;
sbit lcdrw=P2^1;
sbit lcdrs=P2^2;
sbit LED=P3^4;
sbit s1=P3^6;
sbit s2=P3^7;
sbit s3=P3^5;
sbit s4=P3^3;
void dianya();
void dianzu();
void dianliu();
uint count,n=10,s=1000;
uchar ge,fen,den,wan,qian,bai,shi,nen,num,cnt=0x0f,s1num,swan;
void display();
void delay(uint z)
{
uint x,y;
for(x=z;x>0;x--)
for(y=1;y>0;y--);
}
void write_com(uchar com)
{
lcdrs=0;
lcdrw=0;
P0=com;
delay(5);
lcden=1;
delay(5);
lcden=0;
}
void write_data(uchar date)
{
lcdrs=1;
lcdrw=0;
P0=date;
delay(5);
lcden=1;
delay(5);
lcden=0;
}
void init()
{
lcden=0;
write_com(0x38);
write_com(0x0c);
write_com(0x06);
write_com(0x01);
write_com(0x80);
}
void main()
{
init();
TMOD=0x95; //1001 0101,T0計數,T1定時
TH1=0x0f;
TL1=0x00;
TH0=0;
TL0=0;//T0計數器清零
IE=0x88;
// TR0=1;
TR1=1;
TR0=1;
while(1)
{
if(s1==0)
{
delay(5);
if(s1==0)
{ n=1;}
}
while(!s1);
if(s2==0)
{
delay(5);
if(s2==0)
{ n=4;}
}
while(!s2);
if(s3==0)
{
delay(5);
if(s3==0)
{ n=6;}
}
while(!s3);
if(s4==0)
{
delay(5);
if(s4==0)
{ n=8;}
}
while(!s4);
display();
}
}
void T1_int() interrupt 3
{
TR0=0;
TH1=0x0f;
TL1=0x00;
if(!(--cnt))
{
// TL0=1;
count=(TH0*256+TL0);
if(n==1)
{ swan=wan=qian=bai=shi=ge=fen=den=nen=0;
//swan==nen=den=0;
count=count/0.644538/0.988;
fen=(int)(count/1.00474*100)%100/10;
// den=(int)(count/1.00474*100)%10;
count=count/1.006474;
wan=count/10000;
qian=(count-wan*10000)/1000;
bai=(count-wan*10000-qian*1000)/100;
shi=(count-wan*10000-qian*1000-bai*100)/10;
ge=count%10;
}
count=count/1.006474/1.2713/0.94287;
if(n==4)
{
dianya();
}
if(n==6)
{
dianliu() ;
}
if(n==8)
{
dianzu();
}
TH0=0;
TL0=0;
cnt=0x0f;
}
TR0=1;
}
void display()
{
// write_com(0x80+0);write_data(table[bwan]);
write_com(0x80+0);write_data(table[swan]);
write_com(0x80+1);write_data(table[wan]);
write_com(0x80+2);write_data(table[qian]);
write_com(0x80+3);write_data(table[bai]);
write_com(0x80+4);write_data(table[shi]);
write_com(0x80+5);write_data(table[ge]);
write_com(0x80+6);write_data(table[12]);
write_com(0x80+7);
switch(fen)
{
case 0: write_data(table[0]);break;
case 1: write_data(table[1]);break;
case 2: write_data(table[2]);break;
case 3: write_data(table[3]);break;
case 4: write_data(table[4]);break;
case 5: write_data(table[5]);break;
case 6: write_data(table[6]);break;
case 7: write_data(table[7]);break;
case 8: write_data(table[8]);break;
case 9: write_data(table[9]);break;
}
write_com(0x80+8); switch(den)
{
case 0: write_data(table[0]);break;
case 1: write_data(table[1]);break;
case 2: write_data(table[2]);break;
case 3: write_data(table[3]);break;
case 4: write_data(table[4]);break;
case 5: write_data(table[5]);break;
case 6: write_data(table[6]);break;
case 7: write_data(table[7]);break;
case 8: write_data(table[8]);break;
case 9: write_data(table[9]);break;
}
write_com(0x80+9);write_data(table[nen]);
for(num=12;num<14;num++)
{
write_com(0x80+num);
write_data(table[num+n-3]);
}
}
void dianzu()
{
swan=wan=qian=bai=shi=ge=fen=den=nen=0;
count=(5000000.0/count-500.0000)+42.888;
if(count<100)
{
count=count-25.1111;
}
else
{
if(count>10000)
{
count=count/0.96515;
}
else
count=count-20.0;
}
if(count>60000)
{ count=1000000; }
fen=(int)(count/1.00474*100)%100/10;
den=(int)(count/1.00474*100)%10;
wan=count/10000;
qian=(count-wan*10000)/1000;
bai=(count-wan*10000-qian*1000)/100;
count=count-wan*10000-qian*1000-bai*100;
shi=count/10;
ge=(count-shi*10)%10;
}
void dianliu()
{
swan=wan=qian=bai=shi=ge=fen=den=nen=0;
//count=count/1.006474/1.2713;
shi=count/10000;
ge=(count-shi*10000)/1000;
if(ge>1)
{
if(ge>5)
{
if(ge>7)
{
count=count-382.85;
fen=(count-shi*10000-ge*1000)/100;
den=(count-shi*10000-ge*1000-fen*100)/10;
nen=count%10;
}
else
{
count=count-200.85;
fen=(count-shi*10000-ge*1000)/100;
den=(count-shi*10000-ge*1000-fen*100)/10;
nen=count%10;
}
}
else
{
count=count-100.85;
fen=(count-shi*10000-ge*1000)/100;
den=(count-shi*10000-ge*1000-fen*100)/10;
nen=count%10;
}
}
else{
count=count-2.0;
fen=(count-shi*10000-ge*1000)/100;
den=(count-shi*10000-ge*1000-fen*100)/10;
nen=count%10;
}
}
void dianya()
{
swan=wan=qian=bai=shi=ge=fen=den=nen=0;
//count=count/1.006474/1.2713;
shi=count/10000;
ge=(count-shi*10000)/1000;
if(ge>5)
{
if(ge>7)
{
count=count-382.85;
fen=(count-shi*10000-ge*1000)/100;
den=(count-shi*10000-ge*1000-fen*100)/10;
nen=count%10;
}
else{
count=count-44.223;
fen=(count-shi*10000-ge*1000)/100;
if(ge==5&&fen>6)
{
count=count-369.85 ;
fen=(count-shi*10000-ge*1000)/100;
den=(count-shi*10000-ge*1000-fen*100)/10;
nen=count%10;
}
else
{
den=(count-shi*10000-ge*1000-fen*100)/10;
nen=count%10;
}
}
}
else{
fen=(count-shi*10000-ge*1000)/100;
den=(count-shi*10000-ge*1000-fen*100)/10;
nen=count%10;
}
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -