51单片机可调时钟(闪烁)

b1为选择时分秒的个位和十位的选择键;b2为加时键;b3为减时键;b4为完成键(即停止闪烁);

#include<reg52.h>
#define u8 unsigned int 
#define u16 unsigned char
#define duan P1
sbit c=P0^0;
sbit b=P0^1;
sbit a=P0^2;
sbit b1=P2^0;
sbit b2=P2^1;
sbit b3=P2^2;
sbit b4=P2^3;
sbit b5=P2^4;
sbit b6=P2^5;
u16 code table[]={0x3f,
 0x06,0x5b,0x4f,0x66,
 0x6d,0x7d,0x07,0x7f,
 0x67,0x00};
u8 shi=0,fen=0,miao=0,timer=0,i=0,x=0,temp1=0,y=1,z=1;
u8 a1=0,a2=0,a3=0,a4=0,a5=0,a6=0;
void shine()//每隔500ms闪烁一次
{
if(z==1)
{
  if(timer<=500&&timer>=0)
 {
  y=0;
 }
 else y=1;
 }
}

```c
int exchange()//每按一次独立按键向向左移动选择
{ 
 if(b1==0)
 {
  delay(10);
  if(b1==0)
  {
   temp1=0;
   x++; 
  }
  while(!b1);
 }
 if(x>6)
 x-=6;
 return x;
}

```c
void display()//动态数码管动态扫描展示
{
  i=timer%8;
  switch(i)
   {
    case(0):a=1,b=1,c=1;if(y==0&&x==1)duan=0x00;else duan=table[a1];break;
    case(1):a=1,b=1,c=0;if(y==0&&x==2)duan=0x00;else duan=table[a2];break;
    case(2):a=1,b=0,c=1;duan=0x40;break;
    case(3):a=1,b=0,c=0;if(y==0&&x==3)duan=0x00;else duan=table[a3];break;
    case(4):a=0,b=1,c=1;if(y==0&&x==4)duan=0x00;else duan=table[a4];break;
    case(5):a=0,b=1,c=0;duan=0x40;break;
    case(6):a=0,b=0,c=1;if(y==0&&x==5)duan=0x00;else duan=table[a5];break;
    case(7):a=0,b=0,c=0;if(y==0&&x==6)duan=0x00;else duan=table[a6];break;  
   }
   sdelay(10);
   duan=0x00;
}

心得:1.用一个变量记录选择的位置;
2.若要在选择时闪烁,用两个变量分别记录是否要闪烁和在哪一位闪烁;
以上为部分部分部分代码,希望与大家一起讨论!


  • 4
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值