|
50黑幣
首先,P0口控制的是8個數碼管的段選(正極),138譯碼器控制的是數碼管的位選(負極),然后我寫的這個電子時鐘只能看時間,不能改時間,我想用三顆按鍵來控制時間的修改,第一顆按鍵為選中按鍵,按第一下,小時的個位和十位停止,然后通過第二顆按鍵增加,第三顆按鍵減少,可以0-59數字的操作,修改完成后,繼續按第一顆鍵保存剛才的修改數據并跳到分鐘修改,然后在按一次第一顆按鍵跳到秒鐘修改,在按一次第一顆按鍵自動退出修改,同理,修改分鐘和秒鐘也是,按第二顆增加,按第三顆減少,改完后,繼續按第一顆直到退出!
我想請大家幫我大致從下面這個程序修改一下,增加三顆按鍵來實現可修改的功能,按鍵和管腳大家都可以隨便定義,小弟c語言基礎淺薄,能不要用指針就盡量不要用指針吧,謝謝大家!以下是程序和原理圖:
#include<reg52.h>
#define uint unsigned int
#define uchar unsigned char
uchar duan[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; //數碼管位選數據
sbit LSA=P2^2; //38譯碼器A0腳
sbit LSB=P2^3; //38譯碼器A1腳
sbit LSC=P2^4; //38譯碼器A2腳
uint miao=0; //秒
uint fen=0; //分
uint shi=0; //時
static uint n=0; //計數
uint dizhi[6]={0,0,0,0,0,0}; //定義一個有6個地址的數組,分別存時,分,秒的個位和十位。void delay(uint z) //延時函數
{
uint x,y; for(x=z;x>0;x--)
for(y=50;y>0;y--);
}
void write_date(uint n) //寫數據函數,送入段選信號
{
P0=duan[n];
}
void display() //顯示函數
{
LSA=0; LSB=0; LSC=0; write_date(dizhi[0]);
delay(1);
P0=0x00;
LSA=1; LSB=0; LSC=0; write_date(dizhi[1]);
delay(1);
P0=0x00;
LSA=1; LSB=1; LSC=0; write_date(dizhi[2]);
delay(1);
P0=0x00;
LSA=0; LSB=0; LSC=1; write_date(dizhi[3]);
delay(1);
P0=0x00;
LSA=0; LSB=1; LSC=1; write_date(dizhi[4]);
delay(1);
P0=0x00;
LSA=1; LSB=1; LSC=1; write_date(dizhi[5]);
delay(1);
P0=0x00;
}
void time_init() //定時器初始化函數
{
TMOD=0x02; //選擇方式2 TH0=156; //重裝初值為156 TL0=156; //運行值為156 EA=1; //開總中斷
ET0=1;
TR0=1; //開定時器0
}
void main()
{
time_init();
while(1)
{
display();
}
}
void timer() interrupt 1 //定時器0中斷
{
n++;
if(n==10000) //當n=10000時,表示1s到了
{
n=0; miao++;
if(miao==60)
{ miao=0;
fen++;
if(fen==60)
{
fen=0;
shi++;
if(shi==24)
{
shi=0;
}
}
}
dizhi[0]=miao%10;
dizhi[1]=miao/10;
dizhi[2]=fen%10;
dizhi[3]=fen/10;
dizhi[4]=shi%10;
dizhi[5]=shi/10;
}
}
|
|