51单片机调时电子钟

本文详细讲解如何使用51单片机设计并调试一款电子钟,涵盖了单片机编程、时钟电路设计及显示技术。
摘要由CSDN通过智能技术生成

/**************************************************************************************

              
程序功能:在8个数码管上显示时间(24小时制),包含时、分、秒各2位,共6位,时分秒之间
用短横隔开,可以使用按键对各位进行调时校准,被调整的那位所对应的数码管会闪烁,被调整的
位循环方向可以左移也可以右移,调整的数值可加可减。  
***************************************************************************************/


#include "reg52.h"
typedef unsigned int u16;  //对数据类型进行声明定义
typedef unsigned char u8;


#define GPIO_KEY P1


sbit LSA=P2^2;
sbit LSB=P2^3;
sbit LSC=P2^4;


u8 KeyValue; //用来存放按键扫描读取到的键值


//预设时间各位数值,这里设置23:59:55是为了尽快观察进制变化是否正常
u8 a=2;     //小时,十位
u8 b=3;     //小时,个位
u8 c=5; //分钟,十位
u8 d=9; //分钟,个位
u8 e=5; //秒,十位
u8 f=5; //秒,个位


u16 smgwei[8]={2,3,10,5,9,10,5,5};//8位数码管对应的段码,10在smgduan数组中对应smgduan[10]=0x40,显示到数码管上是中间的一短横


u8 setwei=0; //调整时间各位的位置参数,默认为0,即不调整任何位。
u16 times[8];//循环次数累计,累计指令条数,粗略估算时间,控制被调整位闪烁频率。


u8 code smgduan[11]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,//数码管段选,显示0~9的值
0x40};//0x40数码管显示是短横


void delay(u16 i)  //延时子函数
{
while(i--);
}




void sub()      //调整时间数值,数值减小
{
switch(setwei)   //先判断调整时间中的哪一位,然后被选中位的数值自减
{ //减法可能越界,所以需要根据不同各位的进制来控制越界
case(1):smgwei[0]--;if(smgwei[0]==-1) smgwei[0]=2;break;
case(2):smgwei[1]--;if(smgwei[0]==0&&smgwei[1]==-1) 
{smgwei[1]=3;smgwei[0]=2;}
else if(smgwei[1]==-1)  
{smgwei[1]=9;smgwei[0]
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值