📄 display.c
字号:
#include<reg764.h>
#include<intrins.h>
#define dissda P1_7
#define disscl P1_6
unsigned char str_table[10]={0x5F,0x06,0x3D,0x2F,0x66,0x6B,0x7B,0x0E,0x7F,0x6F};
unsigned char error;
unsigned char turn;
unsigned char x1_4;
//unsigned char timer0=107;
unsigned char cell;
unsigned char hour;
unsigned char min;
unsigned char sec;
unsigned char timer1=200;
struct store
{
unsigned char power_gross[8];
unsigned char year_month_date[8];
unsigned char ammeter_number[8];
}ddsd22j={"00700903","20060928","19830904"};
void delay5()
{
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
}
void stop3566()
{
disscl=1;
delay5();
dissda=1;
delay5();
disscl=0;
delay5();
}
void start3566()
{
disscl=1;
delay5();
dissda=1;
delay5();
dissda=0;
delay5();
disscl=0;
delay5();
}
void write3566(unsigned char disdata)
{
unsigned char i;
unsigned char disdata0;
for (i=0;i<8;i++)
{
disdata0=disdata;
dissda=0;
if((disdata0&0x80)!=0)
dissda=1;
delay5();
disscl=1;
delay5();
disscl=0;
delay5();
disdata=disdata<<1;
}
disscl=1;
delay5();
disscl=0;
delay5();
}
void dis_inter() interrupt 3
{
timer1=timer1-1;
if(timer1>=1)
{
;
}
else
{
// turn=turn+1;
// if(turn>=0x05)
// turn=0x00;
sec=sec+1;
timer1=200;
}
TH1=0x3C;
TL1=0xB0;
}
void latent(unsigned char null)
{
write3566(null);
}
void dis_number()
{
unsigned char num;
if(x1_4 != 0x00)
write3566(0x5F | 0x80);//display "0" and "OFF"
else
write3566(0x5F);//display "0"
num=turn;
num=num & 0x0F;
if(num>=0x05)
write3566(0x5F);
else
write3566(str_table[num]);
}
void dis_power_gross()
{
unsigned char k;
unsigned char mid1;
unsigned char comp=0;
dis_number();
for(k=0;k<8;k++)
{
if(ddsd22j.power_gross[k]==0x30 && comp==k)
{
if((k==0 && x1_4 !=0x00)||(k==7 && cell != 0x00)) //latent the unused "0"
latent(0x00 | 0x80);
else
latent(0x00);
comp=comp+1;
}
else
{
mid1=(ddsd22j.power_gross[k] & 0x0F);//latent the high 4 bits
if((k==0 && x1_4 !=0x00) || k==5 || (k==7 && cell != 0x00))
write3566(str_table[mid1] | 0x80);
else
write3566(str_table[mid1]);
}
}
}
void dis_year_month_date()
{
unsigned char mid1;
unsigned char k;
dis_number();
for(k=0;k<8;k++)
{
mid1=ddsd22j.year_month_date[k] & 0x0F;//latent the high 4 bits
if((k==0 && x1_4 != 0x00) || (k==7 && cell != 0x00))
write3566(str_table[mid1] | 0x80);
else if((k==3) || (k==5))
write3566(str_table[mid1] | 0x80);
else
write3566(str_table[mid1]);
}
}
void dis_time()
{
unsigned char h;
unsigned char mid1;
if(sec==0x0A || sec==0x1A || sec==0x2A || sec==0x3A || sec==0x4A || sec==0x5A)
{
sec=sec & 0xF0;
sec=sec+0x10;
}
if(sec>=0x60)
{
sec=0x00;
min=min+1;
if(min==0x0A || min==0x1A || min==0x2A || min==0x3A || min==0x4A || min==0x5A)
{
min=min & 0xF0;
min=min+0x10;
}
if(min>=0x60)
{
min=0x00;
hour=hour+1;
if(hour==0x0A || hour==0x1A)
{
hour=hour & 0xF0;
hour=hour+0x10;
}
if(hour>=0x24)
hour=0x00;
}
}
dis_number();
if(x1_4 !=0x00)
latent(0x00 | 0x80);
else
latent(0x00);
latent(0x00);
mid1=hour;
h=hour;
mid1=mid1>>4;
write3566(str_table[mid1 & 0x0F]);
write3566(str_table[h & 0x0F] | 0x80);
mid1=min;
h=min;
mid1=mid1>>4;
write3566(str_table[mid1 & 0x0F]);
write3566(str_table[(h & 0x0F)] | 0x80);
mid1=sec;
h=sec;
mid1=mid1>>4;
write3566(str_table[mid1 & 0x0F]);
if(cell != 0x00)
write3566(str_table[h & 0x0F] | 0x80 );
else
write3566(str_table[h & 0x0F]);
}
void dis_ammeter_number()
{
unsigned char k;
unsigned char mid1;
dis_number();
for(k=0;k<8;k++)
{
mid1=(ddsd22j.ammeter_number[k] & 0x0F);//latent the high 4 bits
if((k==0 && x1_4 !=0x00) ||(k==7 && cell !=0x00))
write3566(str_table[mid1] | 0x80);
else
write3566(str_table[mid1]);
}
}
void dis_error()
{
unsigned char k;
unsigned char mid1;
unsigned char err1=error;
unsigned char err2=error;
err1=err1>>4;
err1=err1 & 0x0F;
err2=err2 & 0x0F;
mid1=turn;
if(x1_4 != 0x00)
write3566(0x5F | 0x80);//display the first NO. and "OFF"
else
write3566(0x5F);
mid1=mid1 & 0x0F;
write3566(str_table[mid1] | 0x80);//display the second and NO.
for(k=0;k<8;k++)
{
if((k==0 && x1_4 !=0x00)||(k==2))
latent(0x00 | 0x80);
else if(k==6)
write3566(str_table[err1]);
else if(k==7 && cell!=0x00)
write3566(str_table[err2] | 0x80);
else if(k==7 && cell==0x00)
write3566(str_table[err2]);
else
latent(0x00);
}
}
void display()
{
start3566(); //condition of start
write3566(0x7C);// address of controller: 01111100
write3566(0xC8);//1:4 duo ji,1/3 pian zhi 11001000
write3566(0x80);//display from s0 10000000
write3566(0xE0);//A2/A1/A0:000 11100000
write3566(0x70);//colse lcd-fre. 01110000
switch(turn)
{
case 00: dis_power_gross();break;
case 01: dis_year_month_date();break;
case 02: dis_time();break;
case 03: dis_ammeter_number();break;
case 04: dis_error();break;
default : dis_power_gross();break;
}
stop3566(); //condition of stop
}
void main()
{
TMOD=0x01;
TH1=0x3c;
TL1=0x7b0;
IEN0=0x88;
TCON=0x40;
timer1=200;
turn=0x02;
error=0x00;
x1_4=0x01;
cell=0x01;
hour=0x23;
min =0x59;
sec =0x50;
while(1)
display();
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -