📄 digital key.c
字号:
#include<reg51.h>
#include<absacc.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
#define IN0 XBYTE[0x9000]
#define COM XBYTE[0x9801]
#define DAT XBYTE[0x9800]
#define W_C_GLCD XBYTE[0xA000]
#define W_D_GLCD XBYTE[0xA001]
#define R_B_GLCD XBYTE[0xA002]
#define R_D_GLCD XBYTE[0xA003]
sbit flag=ACC^7;
uchar xdata TAB0[32][32];
uchar xdata TAB1[32][32];
uchar TAB[]={0xC5,0xC4,0xC3,0xC2,0xC1,0xC0,0xD5,0xD4,0xD3,0xD2,0xD1,0xD0,0xCD,0xCC,0xCB,0xCA,0xC9,0xC8,0xDA,0xD9,0xD8};
uchar code DHZTAB1[]={"全国大学生电子大"};
uchar code DHZTAB2[]={"赛题目: "};
uchar code DHZTAB3[]={" 信号检测台"};
uchar code DHZTAB4[]={"指导教师: 申芳"};
uchar code DHZTAB5[]={"学生: 吴凡 胡军"};
uchar code DHZTAB6[]={" 杨玉杰 "};
uchar code DHZTAB7[]={" 王文生 "};
uchar code DHZTAB8[]={" 秒: "};
uchar code DHZTAB9[]={"时间到! 报警! "};
uint idata a,b;
uchar keyin();
void keygo();
void initial_GLCD();
void command_GLCD(uchar ord);
void chkbusy_GLCD();
void write_GLCD(uchar dat);
void AD197();
void delay0();
void delay1();
void delay2();
uint ASCII(uint i);
void display1();
void display2();
void clear_GLCD();
void clock();
void clear_TAB();
void show_TAB(uchar *p);
void digital();
void dispclock(unsigned int count);
void clostop() interrupt 3 using 0
{
uchar i,temp,j,k;
unsigned int count;
TMOD=0x01;
TCON=0x10;
count++;
if(count==600)
{
TMOD=0x00;
TCON=0x00;
temp=0x08;
command_GLCD(temp|0x80);
for(j=0;j<8;j++)
{
write_GLCD(DHZTAB9[i]);
i++;
write_GLCD(DHZTAB9[i]);
i++;
}
}
dispclock(count);
k=COM;
k&=0x07;
if(k!=0)
{
COM=0x40;
i=DAT;
if(i==0xDA)
{
TMOD=0x00;
TCON=0x00;
}
}
}
void main()
{
uchar i=0;
initial_GLCD();
COM=0x01;
COM=0x3A;
COM=0xD3;
COM=0x40;
do
{
ACC=COM;
}
while(flag==1);
while(1)
{
keygo();
}
}
void keygo()
{
uint i;
uchar j,k;
k=keyin();
for(i=0;i<21;i++)
if(k==TAB[i])
{
if(i<16)
{
j=(uchar)ASCII(i);
write_GLCD(j);
}
else
switch(i)
{
case 16: //F1
clear_GLCD();
clock();
break;
case 17: //F2
clear_GLCD();
display1();
break;
case 18: //F5
clear_GLCD();
break;
case 19: //F4
clear_GLCD();
digital();
break;
case 20: //F3
clear_GLCD();
display2();
break;
}
break;
}
}
uchar keyin()
{
uchar i;
uchar k;
do
{
k=COM;
k&=0x07;
}while(k==0);
COM=0x40;
i=DAT;
return i;
}
uint ASCII(uint i)
{
if(i<=9)
i+=0x30;
else
i+=0x37;
return i;
}
void digital()
{
while(1)
{
uint xx;
uchar count=0,x,y;
uchar i,j,k;
uchar data0;
initial_GLCD();
clear_TAB();
while(count<128)
{
AD197();
xx=a;
data0=0x80;
x=count/8;
data0>>=(count%8);
if(xx<2048)
{
y=15-xx*15/2048;
TAB0[y][x]=data0;
}
if(xx>2048)
{
y=(0xFFFF-xx+1)*15/2048+15;
TAB0[y][x]=data0;
}
count++;
}
show_TAB(&TAB0[0][0]);
delay2();
k=COM;
k&=0x07;
if(k!=0)
{
COM=0x40;
i=DAT;
if(i==0xD8)
{
initial_GLCD();
show_TAB(&TAB1[0][0]);
break;
}
}
for(i=0;i<32;i++)
for(j=0;j<32;j++)
TAB1[i][j]=TAB0[i][j];
}
}
void clear_TAB()
{
uchar i,j;
for(i=0;i<32;i++)
for(j=0;j<32;j++)
TAB0[i][j]=0x00;
}
void show_TAB(uchar *p)
{
uchar i,j;
command_GLCD(0x34);
for(i=0;i<32;i++)
{
command_GLCD(i|0x80);
command_GLCD(0|0x80);
for(j=0;j<32;j++)
{
write_GLCD(*p);
p++;
}
}
command_GLCD(0x36);
}
void AD197()
{
uchar xdata *ad_adr;
ad_adr=&IN0;
*ad_adr=0x4A;
delay0();
a=(uint)*ad_adr;
ad_adr++;
b=(uint)*ad_adr;
b=b*256;
a+=b;
}
void initial_GLCD()
{
command_GLCD(0x30); //功能设定
delay1();
command_GLCD(0x30); //功能设定
delay1();
command_GLCD(0x30); //功能设定
delay1();
command_GLCD(0x06); //显示器控制:游标不显示;
delay1();
command_GLCD(0x01); //清屏幕
delay1();
command_GLCD(0x0c); //进入模式设定
delay1();
}
void command_GLCD(uchar ord)
{
chkbusy_GLCD();
W_C_GLCD=ord;
}
void chkbusy_GLCD()
{
do
{
ACC=R_B_GLCD;
}
while(flag==1);
}
void write_GLCD(uchar dat)
{
chkbusy_GLCD();
W_D_GLCD=dat;
}
void display1()
{
uchar temp,j,i;
temp=0x00;
command_GLCD(temp|0x80);
for(j=0;j<8;j++)
{
write_GLCD(DHZTAB1[i]);
i++;
write_GLCD(DHZTAB1[i]);
i++;
}
i=0;
temp=0x10;
command_GLCD(temp|0x80);
for(j=0;j<8;j++)
{
write_GLCD(DHZTAB2[i]);
i++;
write_GLCD(DHZTAB2[i]);
i++;
}
i=0;
temp=0x08;
command_GLCD(temp|0x80);
for(j=0;j<8;j++)
{
write_GLCD(DHZTAB3[i]);
i++;
write_GLCD(DHZTAB3[i]);
i++;
}
i=0;
}
void display2()
{
uchar temp,j,i;
temp=0x00;
command_GLCD(temp|0x80);
for(j=0;j<8;j++)
{
write_GLCD(DHZTAB4[i]);
i++;
write_GLCD(DHZTAB4[i]);
i++;
}
i=0;
temp=0x10;
command_GLCD(temp|0x80);
for(j=0;j<8;j++)
{
write_GLCD(DHZTAB5[i]);
i++;
write_GLCD(DHZTAB5[i]);
i++;
}
i=0;
temp=0x08;
command_GLCD(temp|0x80);
for(j=0;j<8;j++)
{
write_GLCD(DHZTAB6[i]);
i++;
write_GLCD(DHZTAB6[i]);
i++;
}
i=0;
temp=0x18;
command_GLCD(temp|0x80);
for(j=0;j<8;j++)
{
write_GLCD(DHZTAB7[i]);
i++;
write_GLCD(DHZTAB7[i]);
i++;
}
}
void clear_GLCD()
{
command_GLCD(0x01);
}
void clock()
{
uchar i,temp,j;
initial_GLCD();
temp=0x10;
command_GLCD(temp|0x80);
for(j=0;j<8;j++)
{
write_GLCD(DHZTAB8[i]); //秒:
i++;
write_GLCD(DHZTAB8[i]); //
i++;
}
TMOD=0x01;
TCON=0x10;
IE=0x88;
while(1)
{
if(TF0==1)
{
TH1=0x97;
TL1=0xFA;
TMOD=0x10;
TCON=0x40;
}
if(TMOD==0)
break;
}
}
void dispclock(unsigned int count)
{
uchar d0,d1,d2,temp,firs;
d0=count/100;
d1=count/10%10;
d2=count%10;
temp=0x10;
command_GLCD(temp|0x80);
firs=0x30+d0;
write_GLCD(firs);
firs=0x30+d1;
write_GLCD(firs);
temp=0x13;
command_GLCD(temp|0x80);
firs=0x30+d2;
write_GLCD(firs);
}
void delay0()
{
uchar i;
for(i=0;i<100;i++)
{;}
}
void delay1()
{
uchar i;
for(i=0;i<25;i++)
{;}
}
void delay2()
{
uchar i,j,k;
for(i=0;i<255;i++)
for(j=0;j<255;j++)
for(k=0;k<5;k++)
{;}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -