电子时钟单片机c语言程序,一款51单片机电子钟制作(C语言)

//主程序/

void main()//主程序开始

{

chushi();//初始化

while(1)//大循环

{

if(g!=1)//如果g不等于1,就执行下一句,否则跳过下一句

disy(fen,shi);//调用走时显示子程序

key11();//调用按键子程序

bbbt();//调用闹钟子程序

}

}

/按键执行的子程序/

void key11()//按键子函数

{

if(a!=0)//如果a不等于0,则执行大括号语句,否则跳过

{

dian=0;//将中间两个小数点打开

delay(10);//延时一会儿

dian=1;//将点关掉

delay(10);//延时一会儿,以上即是动态显示

disy(fen,shi);//调用显示子程序

delay(4000);//延时,使它闪烁

}

if(b!=0)//如果b不等于0,则执行大括号语句

{

disy1(shi);//调用小时显示子程序,此程序在前面声明

delay(2000);//延时,即使它闪烁

if(key1==0)//如果+按键有按下,则执行大括号内容

{

delay(10);//去抖

if(key1==0)//再次判断

{

shi++;//确实按下了就将小时时间+1

disy1(shi);//加1后调用小时显示子程序

delay(10);//延时一会儿

if(shi==24)//如果小时加到了24就执行下一个语句,否则跳过

shi=0;//到了24就清0

}

}

if(key2==0)//如果-按键有按下,则执行大括号内容

{

delay(10);//去抖动

if(key2==0)//再次确认

{

shi--;//确实按下就将小时减1

disy1(shi);//调用显示程序

delay(10);//延时

if(shi==(0-1))//如果小时到了(0-1)时,就给23

shi=23;//给23

}

}

}

if(c!=0)//如果b不等于0,则执行大括号语句

{

disy2(fen);//调用调分分显示子程序

delay(2000);//使它闪动

if(key1==0)//判断+按键是否有按下

{

delay(10);//延时

if(key1==0)//再次确认按下情况

{

fen++;//将分加1

disy2(fen);//调用显示子程序

delay(10);//延时一会儿

if(fen==60)//如果分到了60,则执行下一语句

fen=00;//清0

}

}

if(key2==0)//如果减按键按下了执行下一语句

{

delay(10);//延时一会儿

if(key2==0)//再次判断

{

fen--;//将分减1

disy2(fen);//调用显示子程序

delay(10);//延时

if(fen==(0-1))//如果分等于(0-1),则给59

fen=59;//给59

}

}

}

if(d!=0)//如果b不等于0,则执行大括号语句

{

  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
非常感谢您的提问。以下是一个基于51单片机实现的C语言程序,可以在LCD1602上显示电子时钟。 ```c #include <REG51.H> #define LCD_DB P0 // 数据总线 sbit LCD_RS = P1^0; // 寄存器选择 RS sbit LCD_RW = P1^1; // 读/写选择 RW sbit LCD_E = P1^2; // 使能信号 E void delay(unsigned int t) // 延迟函数 { while(t--); } void write_cmd(unsigned char c) // 写命令 { LCD_RS = 0; LCD_RW = 0; LCD_DB = c; delay(10); LCD_E = 1; delay(10); LCD_E = 0; delay(10); } void write_data(unsigned char c) // 写数据 { LCD_RS = 1; LCD_RW = 0; LCD_DB = c; delay(10); LCD_E = 1; delay(10); LCD_E = 0; delay(10); } void init_lcd(void) // 初始化 LCD { write_cmd(0x38); // 功能设置: 8位数据总线,两行显示,5x8 点阵 write_cmd(0x0C); // 显示开启: 关闭光标,开启显示 write_cmd(0x06); // 显示设置: 光标自动右移,不移动屏幕 write_cmd(0x01); // 清屏 delay(1000); // 延迟 1s } void display_time(void) // 显示时间 { unsigned char hour, min, sec; // 时分秒 hour = 12; // 设定初始值为 12:00:00 min = 0; sec = 0; while(1) // 一直循环 { write_cmd(0x80); // 移动光标到第一行的左端 write_data((hour/10)+'0'); // 显示十位数 write_data((hour%10)+'0'); // 显示个位数 write_data(':'); write_data((min/10)+'0'); write_data((min%10)+'0'); write_data(':'); write_data((sec/10)+'0'); write_data((sec%10)+'0'); delay(500); // 每隔 500ms 刷新一次时间 if(++sec == 60) // 秒加 1 { sec = 0; if(++min == 60) // 分加 1 { min = 0; if(++hour == 24) // 时加 1 { hour = 0; } } } } } void main(void) { init_lcd(); display_time(); } ``` 希望这个程序对您有所帮助。如果您有其他问题,欢迎随时向我提问。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值