|
像這個(gè)好像是數(shù)碼管顯示的,怎么改成LCD1602顯示啊,有人幫改一下代碼嗎?
#include"reg52.h"
#define uchar unsigned char
#define uint unsigned int
sbit Key_up=P3^4; //分鐘調(diào)節(jié)按鍵+
sbit Key_down=P3^5; //分鐘調(diào)節(jié)按鍵-
sbit Key_enter=P3^6;//開(kāi)始、暫停按鍵
sbit Key_esc=P3^7; //清除按鍵
sbit beep=P2^3; //蜂鳴器
sbit wela=P2^7; //位鎖存器
sbit dula=P2^6; //段鎖存器
uint cnt,min,sec; //中斷計(jì)數(shù)、分、秒
bit flag; //開(kāi)始位
uchar dsp[6]; //數(shù)碼管內(nèi)容
uchar dsp_du[17]={0x3f , 0x06 , 0x5b , 0x4f , 0x66 , 0x6d ,
0x7d , 0x07 , 0x7f , 0x6f , 0x77 , 0x7c ,
0x39 , 0x5e , 0x79 , 0x71 , 0x00};//段編碼
uchar dsp_we[6]={0xfe, 0xfd, 0xfb, 0xf7, 0xef, 0xdf};//位編號(hào)
//延時(shí)
void delay(uint z)
{
uint t1,y;
for(t1=z;t1>0;t1--)
for(y=110;y>0;y--);
}
//鍵盤(pán)控制
void key()
{
if(!Key_up) //向上
{
delay(200);
if(!Key_up) min++;
min=min%100;
}
if(!Key_down) //向下
{
delay(200);
if(!Key_down) min--;
min=min%100;
}
if(!Key_enter) //開(kāi)始位
{
delay(50);
if(!Key_enter) flag=~flag;
while(!Key_enter);
}
if(!Key_esc) //停止位
{
flag=0;
min=0;
sec=0;
}
}
void run()
{
if(cnt>199) //秒計(jì)數(shù)
{
cnt=0;
if(sec==0) //分鐘計(jì)數(shù)
{
sec=60;
if(min==0) //分鐘復(fù)位
{
min=100;
flag=0; //停止運(yùn)行
beep=0;//響聲提示
delay(2000);
beep=1;
}
min--;
}
sec--;
}
}
//定時(shí)器初始化
void init()
{
TMOD=0x11;
TR0=1; //啟動(dòng)定時(shí)器0
ET0=1; //打開(kāi)定時(shí)器0中斷
TR1=1; //啟動(dòng)定時(shí)器1
ET1=1; //打開(kāi)定時(shí)器1中斷
TH1=0xfd; //寫(xiě)入定時(shí)器1初始值
TL1=0x77;
TH0=0xee;
TL0=0;
EA=1; //打開(kāi)總中斷
min=20; //預(yù)置時(shí)間
}
//主函數(shù)
void main()
{
init();
while(1)
{
if(flag)
{run();}
key();
//數(shù)字拆分成個(gè)位和十位
dsp[0]=min/10;
dsp[1]=min%10;
dsp[2]=sec/10;
dsp[3]=sec%10;
}
}
//定時(shí)器0,用于計(jì)時(shí)
timer0() interrupt 1 // 定時(shí)器0中斷是1號(hào)
{
TH0=0xee; //5ms
TL0=0;
cnt++;
}
//定時(shí)器1,用于LED動(dòng)態(tài)掃描
timer1() interrupt 3 // 定時(shí)器1中斷是3號(hào)
{
uchar wei; //數(shù)碼管顯示位計(jì)數(shù)
TH1=0xf0; //定時(shí)器初始值
TL1=0x00;
wela=1;
P0=dsp_we[wei];
wela=0;
dula=1;
P0=dsp_du[dsp[wei]];
if(wei==1) P0=P0|0x80; //第二位加點(diǎn)
dula=0;
wei++;
wei=wei%4;
}
|
|