矜持233 2022-12-03 20:50 采纳率: 0%
浏览 81
已结题

51单片机c语言制作数字电子时钟

用51单片机开发板实现电子数字时钟功能,整点报时蜂鸣器发出响声,显示效果如图,用按键调时,调整时间时秒表不跳

img


代码如下,想使调时间时秒表不走
#include <REGX51.H>
#define uc unsigned char
#define ui unsigned int

sbit key0=P3^0; //定义按键
sbit key1=P3^2;
sbit key2=P3^3;
sbit key3=P3^1;

sbit L1=P2^2; //定义数码管位驱运位
sbit L2=P2^3;
sbit L3=P2^4;
sbit beep=P1^5;
uc min,hour,sec,num,set,x_min,x_hour,x_sec,n_min,n_hour,n_sec,xx,kk; //变量
bit bdata zhi,sz,nl;
uc code tab[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};/0,1,2,3,4,5,6,7,8,9,./ //显示数码
void clock();
void delay(ui x) //延时
{
ui i,j;
for(i=0;i<x;i++)
for(j=0;j<100;j++);
}

void delayn(unsigned int i) //延时
{
while(i--);
}

void display() //显示程序
{
if(set==0)
{
x_hour=hour;
x_min=min;
x_sec=sec;
xx=0;
}
else if((set>0)&&(set<4)){
x_hour=hour;
x_min=min;
x_sec=sec;
}
else
{
x_hour=n_hour;
x_min=n_min;
x_sec=0;
}

if((sz==0)&&(xx==1))
P0=0;
else P0=tab[x_hour/10];
L1=1;
L2=1;
L3=1;
delay(1);
P0=0;
L1=1;
L2=1;
L3=1;

if((sz==0)&&(xx==1))
P0=0;
else P0=(tab[x_hour%10]);
L1=0;
L2=1;
L3=1;
delay(1);
P0=0;
L1=1;
L2=1;
L3=1;

P0= 0x40;
L1=1;
L2=0;
L3=1;
delay(1);
P0=0;
L1=1;
L2=1;
L3=1;


if((sz==0)&&(xx==2))
P0=0;
else P0=tab[x_min/10];
L1=0;
L2=0;
L3=1;
delay(1);
P0=0;
L1=1;
L2=1;
L3=1;

if((sz==0)&&(xx==2))
P0=0;
else P0=(tab[x_min%10]);
L1=1;
L2=1;
L3=0;
delay(1);
P0=0;
L1=1;
L2=1;
L3=1;

P0= 0x40;
L1=0;
L2=1;
L3=0;
delay(1);
P0=0;
L1=1;
L2=1;
L3=1;

if((sz==0)&&(xx==3))
P0=0;
else P0=tab[x_sec/10];
L1=1;
L2=0;
L3=0;
delay(1);
P0=0;
L1=1;
L2=1;
L3=1;

if((sz==0)&&(xx==3))
P0=0;
else P0=tab[x_sec%10];    
L1=0;
L2=0;
L3=0;
delay(1);
P0=0;
L1=1;
L2=1;
L3=1;

}

void keyscan() //按键处理程序
{
if(key0==0)
{
delay(5);;
while(key0==0);
set++;
if(set>5)
set=0;
}
if(key3==0)
{
delay(5);;
while(key3==0);
nl=1;
}
switch(set)
{
case 1:{
xx=1;
if(key1==0)
{
delay(5);;
while(key1==0);
hour++;
if(hour==24)
hour=0;
}
if(key2==0)
{
delay(5);;
while(key2==0);
hour--;
if(hour==0)
hour=24;
}
};break;

    case 2:{    
                xx=2;     
                if(key1==0)    
                {
                    delay(5);;
                    while(key1==0);
                    min++;    
                    if(min==60)             
                    min=0;                
                }
                if(key2==0)                    
                {
                    delay(5);;
                    while(key2==0);
                    min--;    
                    if(min==0)             
                    min=59;                
                }                      
           };break;
    
    case 3:{    
                xx=3;     
                if(key1==0)    
                {
                    delay(5);;
                    while(key1==0);     
                    sec=0;                
                }
                if(key2==0)                    
                {
                    delay(5);;
                    while(key2==0);     
                    sec=0;                
                }                      
           };break;
    
    case 4:{     
                xx=1;    
                if(key1==0)    
                {
                    delay(5);;
                    while(key1==0);
                    n_hour++;    
                    if(n_hour==24)             
                    n_hour=0;                
                }
                if(key2==0)                    
                {
                    delay(5);;
                    while(key2==0);
                    n_hour--;    
                    if(n_hour==0)             
                    n_hour=24;                
                }                      
           };break;
    
    case 5:{         
                xx=2;
                if(key1==0)    
                {
                    delay(5);;
                    while(key1==0);
                    n_min++;    
                    if(n_min==60)             
                    n_min=0;                
                }
                if(key2==0)                    
                {
                    delay(5);;
                    while(key2==0);
                    n_min--;    
                    if(n_min==0)             
                    n_min=59;                
                }                      
           };break;
           case 0:
           break;
    }

}

void init() //初始货程序
{
sec=50;
min=0;
hour=12;
n_min=1;
n_hour=12;

TMOD=0x01;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;    
EA=1;                   
ET0=1;                   
TR0=1;                   

}

void clock() //蜂鸣器程序
{
unsigned int i;
for(i=20;i>0;i--)
{
beep=~beep;
delayn(80); //延时大约1ms 通过修改此延时时间达到不同的发声效果
}
}//蜂鸣器发声函数
void main() //主程序
{
init();
set=0;
nl=1;
while(1)
{
// display();
keyscan();
if((min==n_min)&&(hour==n_hour)&&sec==0)
{
nl=0;
}
if((nl==0)&&(sz==0))
clock();

}

}
void time0() interrupt 1 //中断计时程序
{
TH0=(65536-10000)/256;
TL0=(65536-10000)%256;
num++;
kk++;
display();
if(kk>20)
{
sz=~sz;
kk=0;
}
if(num==100)
{
num=0;

    sec++;           
    if(sec==60)       
    {
        sec=0;       
        min++;       
        if(min==60)
        {
            min=0; 
            hour++;
        }
    }
}

}

  • 写回答

4条回答

      报告相同问题?

      相关推荐 更多相似问题

      问题事件

      • 已结题 12月6日
      • 修改了问题 12月4日
      • 修改了问题 12月4日
      • 修改了问题 12月3日
      • 展开全部

      悬赏问题

      • ¥20 b站私信完整导出的方法
      • ¥15 边界图中的x、y轴解释
      • ¥30 如何用matlab求解复杂方程
      • ¥15 VUE TS中怎么调用第三方js
      • ¥15 Activiti如何将值传入textValue
      • ¥20 在linux里安装lummps时 在make mpi里找不到rpc
      • ¥25 python先到先得调度和轮询调度
      • ¥15 SDK Manager闪退
      • ¥15 intel i219v mac地址修改问题
      • ¥15 leetcode上面的题,求解