首先,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;
}
}
|