|
你原來(lái)的程序根本不能通過(guò)編輯,修改錯(cuò)誤后得到的結(jié)果如下,這就是你想要的顯示效果?
IMG_20180308_152953_看圖王.jpg (40.95 KB, 下載次數(shù): 44)
下載附件
2018-3-8 15:38 上傳
改后的程序:
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
sbit rs=P2^6;
sbit wr=P2^5;
sbit len=P2^7;
uchar annum,num,date;
uchar dis[16];
/*******100us延時(shí)程序********/
void delay(uint x)
{
uint a,b;
for(a=x;a>0;a--)
for(b=10;b>0;b--);
}
/*******1ms延時(shí)程序********/
/*
void delay(uint z)
{
uint x,y;
for(x=z;z>0;x--)
for(y=110;y>0;y--);
}*/
/*******液晶寫(xiě)指令程序**********/
void write_com(uchar com)
{
len=0;
rs=0;
P0=com;
delay(10);
len=1;
delay(10);
len=0;
}
/*******液晶寫(xiě)數(shù)據(jù)程序********/
void write_date(uchar date)
{
rs=1;
P0=date;
delay(10);
len=1;
delay(10);
len=0;
}
/*******液晶初始化程序********/
void init()
{
date=0;
wr=0;
write_com(0x38);
write_com(0x01);
// write_com(0x0c);
// write_com(0x06);
write_com(0x0f);
write_com(0x04);
write_com(0x80);
}
void keyscan() //按鍵掃描程序
{
static bit sign=0; //按鍵有效標(biāo)志
static uint count=0; //消抖計(jì)數(shù)變量
uchar num0=0; //臨時(shí)變量
P3=0xf0; //賦值P3 1111 0000
if(P3!=0xf0) //檢測(cè)有按鍵按下
{
count++; //消抖計(jì)數(shù)
if((count>=500)&&(sign==0))//100~1000,根據(jù)主循環(huán)周期調(diào)整約10~20ms
{
sign=1; //按鍵有效標(biāo)志置1,防止重復(fù)響應(yīng)
num0=P3; //保存P3值xxxx 0000,x為0或1
num0|=0x0f; //保存num按位或0x0f值xxxx 1111
P3=num0; //賦值P3 xxxx 1111
num0=P3; //保存P3值xxxx xxxx
switch(num0)
{
case 0xee: num= 0;annum++; break;
case 0xde: num= 1;annum++; break;
case 0xbe: num= 2;annum++; break;
case 0x7e: num= 3;annum++; break;
case 0xed: num= 4;annum++; break;
case 0xdd: num= 5;annum++; break;
case 0xbd: num= 6;annum++; break;
case 0x7d: num= 7;annum++; break;
case 0xeb: num= 8;annum++; break;
case 0xdb: num= 9;annum++; break;
case 0xbb: num=10; break;
case 0x7b: num=11; break;
case 0xe7: num=12; break;
case 0xd7: num=13; break;
case 0xb7: num=14; break;
case 0x77: num=15; break;
}
}
}
else //鍵抬起
{
sign=0; //按鍵有效標(biāo)志清0
count=0; //消抖計(jì)數(shù)清0
}
}
uchar keysuan(uchar date)
{
if(num==0)
date=date+(num*annum*10);
if(num==1)
date=date+(num*annum*10);
if(num==2)
date=date+(num*annum*10);
if(num==3)
date=date+(num*annum*10);
if(num==4)
date=date+(num*annum*10);
if(num==4)
date=date+(num*annum*10);
if(num==5)
date=date+(num*annum*10);
if(num==6)
date=date+(num*annum*10);
if(num==7)
date=date+(num*annum*10);
if(num==8)
date=date+(num*annum*10);
if(num==9)
date=date+(num*annum*10);
return date;
}
void jisuan()
{
write_com(0x80+0x40+16);
dis[0]=date%10+0x30;
dis[1]=date/10%10+0x30;
dis[2]=date/100%10+0x30;
dis[3]=date/1000%10+0x30;
dis[4]=date/10000%10+0x30;
dis[5]=date/100000%10+0x30;
dis[6]=date/1000000%10+0x30;
dis[7]=date/10000000%10+0x30;
dis[8]=date/100000000%10+0x30;
dis[9]=date/1000000000%10+0x30;
dis[10]=date/10000000000%10+0x30;
}
void display()
{
uchar i=0;
write_com(0x80+0x50);
while(dis!='\0')
{
write_date(dis);
i++;
}
i=0;
}
void main()
{
init();
while(1)
{
keyscan();
date=keysuan(num);
jisuan();
display();
}
}
|
|