2 xwh1533487022 xwh1533487022 于 2015.06.18 21:45 提问

以51单片机为核心的时钟,在LED显示器上显示当前的时间:

显示格式为“时时:分分:秒秒”。
用4个功能键操作来设置当前时间。功能键K1~K4功能如下。
K1—进入设置现在的时间。
K2—设置小时(按一次,小时增1)。
K3—设置分钟(按一次,分钟增1)。
K4—确认完成设置。
程序执行后工作指示灯闪动,表示程序开始执行,LED显示“00:00:00”,然后开始计时。
本题可以考虑用LCD(比如:LCD1602)来实现显示,则显示更加清楚。

2个回答

autocyz
autocyz   2015.06.19 10:38

首先这个程序很容易实现,你要注意的有以下几点:1,设置51的定时器,将其设置为1s;2、在1602上显示时间,其实显示也很简单,你网上搜一下1602的编码 3、至于按键,你可以值扫描,来检查是否有按键按下,或者使用外部中断也行

signsw
signsw   2015.06.21 22:01

#include
#include
#define uchar unsigned char
#define uint unsigned int
#define shuju P0
#define bus P1
//#define lcdbus P3
sbit rs=P2^7;
sbit rw=P2^6;
sbit e=P2^5;
sbit sda=P2^0; //IO口定义
sbit scl=P2^1;
uchar r;
void delayms(int i)
{
int j;
for(j=0;j<i;j++);
}
void enable()
{
rs=0;
rw=0;
e=0;
delayms(65000);
e=1;
}
void write()
{
rs=1;
rw=0;
e=0;
delayms(65000);
e=1;
}
void chushi()
{
sda=0;
scl=0;
shuju=0x01;
enable();
shuju=0x38;
enable();
shuju=0x0f;
enable();
shuju=0x06;
enable();
shuju=0x80;
enable();
}
void display(uchar i)
{
shuju=i;
write();
}
void jianpan()
{

uchar a;
uchar k;
bus=0xff;
bus=0xef; //扫描第一行
delayms(6000);
a=bus;
a=a&0x0f;
if(a!=0x0f)
{
delayms(2000);
if(a!=0x0f)
{
switch(a)
{
case 0x0e:
k=0x41;

      break;
 case 0x0d:
      k=0x42;

      break;
 case 0x0b:
      k=0x43;

      break;
 case 0x07:
      k=0x44;

      break;
}
  display(k);
   r=r-1;
 while(a!=0x0f)
 {
  bus=0x0f;
  delayms(2000);
  a=bus;      
 }

}
}

bus=0xdf; //扫描第二行
delayms(6000);
a=bus;
a=a&0x0f;
if(a!=0x0f)
{
delayms(2000);
if(a!=0x0f)
{
switch(a)
{
case 0x0e:
k=0x45;
break;
case 0x0d:
k=0x46;
break;
case 0x0b:
k=0x47;
shuju=0x07;
break;
case 0x07:
k=0x48;
break;
}
display(k);
r=r-1;
while(a!=0x0f)
{
bus=0x0f;
delayms(2000);
a=bus;

  }
 }  
}     
bus=0xbf;        //扫描第3行

delayms(6000);
a=bus;
a=a&0x0f;
if(a!=0x0f)
{
 delayms(2000);
 if(a!=0x0f)
 {
 switch(a)
 {
  case 0x0e:
       k=0x49;

       break; 
  case 0x0d:
       k=0x4a;

       break;
  case 0x0b:
      k=0x4b;
       break;
  case 0x07:
       k=0x4c;
       break;
 }
 display(k);
  r=r-1;
 while(a!=0x0f)
  {
  bus=0x0f;
   delayms(2000);
   a=bus;

  }
 }  
}     
 bus=0x7f;        //扫描第4行
 delayms(6000);
a=bus;
a=a&0x0f;
if(a!=0x0f)
{
 delayms(2000);
 if(a!=0x0f)
 {
 switch(a)
 {
  case 0x0e:
       k=0x4d;
       break; 
  case 0x0d:
       k=0x4e;
       break;
  case 0x0b:
       k=0x4f;
       break;
  case 0x07:
       k=0x50;
       break;
 }
 display(k);
  r=r-1;
 while(a!=0x0f)
  {
   bus=0x0f;
   delayms(2000);
   a=bus;      
  }
 }  
}     

}
void main()
{
while(1)
{
chushi();
r=0x10;
while(r>0)
{
jianpan();
}
shuju=0xc0;
enable();
r=0x10;
while(r>0)
{
jianpan();
}
}
}

Csdn user default icon
上传中...
上传图片
插入图片