-
2021-05-22 02:16:23
/*
8位数码管显示 时间格式 05—50—00 标示05点50分00秒
S1 用于小时加1操作
S2 用于小时减1操作
S3 用于分钟加1操作
S4 用于分钟减1操作
*/
#includesbit KEY1=P3^0; //定义端口参数
sbit KEY2=P3^1;
sbit KEY3=P3^2;
sbit KEY4=P3^3;
sbitLED=P1^2; //定义指示灯参数
code unsigned char tab[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; //共阴极数码管0—9
unsigned char StrTab[8]; //定义缓冲区
unsigned char minute=19,hour=23,second; //定义并初始化为 12:30:00
void delay(unsigned int cnt)
{
while(--cnt);
}
/******************************************************************/
/* 显示处理函数 */
/******************************************************************/
void Displaypro(void)
{
StrTab[0]=tab[hour/10]; //显示小时
StrTab[1]=tab[hour%10];
StrTab[2]=0x40; //显示"-"
StrTab[3]=tab[minute/10]; //显示分钟
StrTab[4]=tab[minute%10];
StrTab[5]=0x40; //显示"-"
StrTab[6]=tab[second/10]; //显示秒
StrTab[7]=tab[second%10];
}
main()
{
TMOD |=0x01; //定时器0 10ms inM crystal 用于计时
TH0=0xd8; //初值
TL0=0xf0;
ET0=1;
TR0=1;
TMOD |=0x10; //定时器1用于动态扫描
TH1=0xF8; //初值
TL1=0xf0;
ET1=1;
TR1=1;
EA =1;
Displaypro(); //调用显示处理函数
while(1)
{
if(!KEY1) //按键1去抖以及动作
{
delay(10000);
if(!KEY1)
{
hour++;
if(hour==24)
hour=0; //正常时间 小时 加1
Displaypro();
}
}
if(!KEY2) //按键2去抖以及动作
{
delay(10000);
if(!KEY2)
{
hour--;
if(hour==255)
hour=23; //正常时间 小时减1
Displaypro();
}
}
if(!KEY3) //按键去抖以及动作
{
delay(10000);
if(!KEY3)
{
minute++;
if(minute==60)
minute=0; //分加1
Displaypro();
}
}
if(!KEY4) //按键去抖以及动作
{
delay(10000);
if(!KEY4)
{
minute--;
if(minute==255)
minute=59; //分减1
Displaypro();
}
}
}
}
/******************************************************************/
/* 定时器1中断 */
/******************************************************************/
void time1_isr(void) interrupt 3 using 0 //定时器1用来动态扫描
{
statICunsigned char num;
TH1=0xF8; //重入初值
TL1=0xf0;
switch (num)
{
case 0:P2=0;P0=StrTab[num];break; //分别调用缓冲区的值进行扫描
case 1:P2=1;P0=StrTab[num];break;
case 2:P2=2;P0=StrTab[num];break;
case 3:P2=3;P0=StrTab[num];break;
case 4:P2=4;P0=StrTab[num];break;
case 5:P2=5;P0=StrTab[num];break;
case 6:P2=6;P0=StrTab[num];break;
case 7:P2=7;P0=StrTab[num];break;
default:break;
}
num++; //扫描8次,使用8个数码管
if(num==8)
num=0;
}
/******************************************************************/
/* 定时器0中断 */
/******************************************************************/
void tim(void) interrupt 1 using 1
{
static unsigned char count; //定义内部局部变量
更多相关内容 -
51单片机数码管时钟程序
2018-07-17 21:56:10在51单片机上实现数码管时钟程序,程序的开发环境是keil软件。 -
51单片机数码管时钟程序,注释详细
2019-03-21 20:26:57本例程适用于共阴数码管 段选锁存器与位选锁存器都接P0 -
51单片机数码管时钟电路+代码+hex文件+报告+演示视频
2021-06-19 13:07:59全套集合:51单片机数码管时钟电路+代码+hex文件+报告+演示视频,全套齐活包满意 -
51单片机数码管时钟
2015-05-07 11:17:41at89c51单片机 8位数码管电子时钟显示 -
十分详细的数码管电子时钟(基于51单片机)
2021-01-06 04:31:57数码管由于内部由多段LED灯构成,也被称为多段式LED数码管。 从数码管里面包含的LED个数来分,可以分为七段式、八段式、十四段式等。 七段式数码管: 八段式数码管(比七段式右下角多了一个小点): 十四段式... -
基于51单片机数码管时钟显示与仿真原理图
2020-10-27 19:12:06这是基于51或者51单片机数码管显示时钟与仿真原理图的资源; 其中包括c语言源程序与keil仿真生成的hex文件可以直接烧录到单片机上进行看实物效果,其中还包括preteus仿真的电路图 此资源用与验证数码管定时显示时钟... -
51单片机数码管动态时钟电路图
2020-07-14 15:25:00本文主要为51单片机数码管动态时钟电路图,下面一起来学习一下 -
51(52)单片机 定时器实现数码管时钟
2022-04-12 12:53:4751(52)单片机 定时器实现数码管时钟(按键实现时.分加及时钟启动)单片机小白,主页第一篇文章有共通代码详解。
独立按键一:按下数码管显示小时增加(>23变00)
独立按键二:按下数码管显示分钟增加(>59变00)
独立按键三:长按关闭时钟自增后,可使用按键一.二对数码管显示时间进行更改
独立按键四:按下时钟启动运行效果:
代码:
#include <reg52.h> #define u8 unsigned char #define u16 unsigned int sbit button1=P3^1; sbit button2=P3^0; sbit button3=P3^2; sbit button4=P3^3; sbit add_1=P2^2; sbit add_2=P2^3; sbit add_3=P2^4; u16 n=0; u8 x,y,z; u8 code table[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; //DingshiQi YanShi void delay_ds(u8 ms) { u8 T=0; TMOD=0x01; TH0=0xfb; TL0=0x80; TR0=1; while(T<ms) { if(TF0==1) { TF0=0; TH0=0xfb; TL0=0x80; T++; } } }//1.25*ms //shuaxin void shuaxin() { add_1=0; add_2=0; add_3=0; P0=table[z%10]; delay_ds(1); P0=0x00; //01 add_1=1; add_2=0; add_3=0; P0=table[z/10%10]; delay_ds(1); P0=0x00; //02 add_1=0; add_2=1; add_3=0; P0=0x40; delay_ds(1); P0=0x00; //03 add_1=1; add_2=1; add_3=0; P0=table[y%10]; delay_ds(1); P0=0x00; //04 add_1=0; add_2=0; add_3=1; P0=table[y/10%10]; delay_ds(1); P0=0x00; //05 add_1=1; add_2=0; add_3=1; P0=0x40; delay_ds(1); P0=0x00; //06 add_1=0; add_2=1; add_3=1; P0=table[x%10]; delay_ds(1); P0=0x00; //07 add_1=1; add_2=1; add_3=1; P0=table[x/10%10]; delay_ds(1); P0=0x00; //08 } //11.25ms //1 s void Ding_shi() { u8 T=0; TMOD=0x01; TH0=0xf7; TL0=0x00; //2.5ms shuaxin(); TR0=1; while(T<80) { if(TF0==1) { TF0=0; TH0=0xf7; TL0=0x00; //2.5 shuaxin(); //10 12.5ms*79=987.5ms T++; } } } // void Ding_shi01() { u8 T=0; TMOD=0x01; TH0=0xf7; TL0=0x00; //1.25ms TR0=1; while(T<20) { if(TF0==1) { TF0=0; TH0=0xf7; TL0=0x00; //1.25 shuaxin(); //20 12.5ms*79=987.5ms T++; } } } void main() { u8 k,j; k=j=0; button1=0xff; button2=0xff; button3=0xff; button4=0xff; while(1) { shuaxin(); if(button1==0) { delay_ds(2); if(button1==0) { while(!button1) { x++; if(x>23) x=0; Ding_shi01(); } } } if(button2==0) { delay_ds(2); if(button2==0) { while(!button2) { y++; if(y>59) y=0; Ding_shi01(); } } } if(button3==0) { delay_ds(3); if(button3==0) { while(!button3) { shuaxin(); } } } if(button4==0) { delay_ds(2); if(button4==0) { while(!button4) { while(1) { z++; if(z>59) { y++; z=0;} if(y>59) { x++; y=0;} if(x>23) x=0; Ding_shi(); if(button3==0) break; } } } } } }
-
基于51单片机的数码管时钟设计——按键修改时间
2020-12-16 17:51:18reg51.h> typedef unsigned char uchar; typedef unsigned int uint; //按键定义 sbit key_stop = P3^0; sbit key_star = P3^1; sbit key_fen = P3^2; sbit key_shi = P3^3; //0~9的十六进制数码 uchar code ...视频演示
Proteus 仿真图
代码:
#include<reg51.h> typedef unsigned char uchar; typedef unsigned int uint; //按键定义 sbit key_stop = P3^0; sbit key_star = P3^1; sbit key_fen = P3^2; sbit key_shi = P3^3; //0~9的十六进制数码 uchar code num[10] = {0xC0, 0xF9, 0xA4, 0xB0, 0x99, 0x92, 0x82, 0xF8, 0x80, 0x90}; // 0~9 //秒、分、时标志 uchar miao = 0, fen = 0, shi = 0; //秒、分、时高位低位 uchar miao_L, miao_H, fen_L, fen_H, shi_L, shi_H; //计数 uint counter = 0; void delay(uint x){ //延时函数 while(x--) ; }//delay void key_delay(int xms){ //按键延时函数 x ms unsigned int i, j; for(i=0; i<xms; ++i) for(j=0; j<110; ++j) ; }//key_delay void T0_Init(){ //定时器初始化 TMOD = 0x01; TH0 = 0x3c; TL0 = 0xb0; EA = 1; //开总中断 ET0 = 1; TR0 = 1; }//T0_Init void display(){ //显示函数 P2 = 0x20; P0 = 0xbf; delay(50); P2 = 0x04; P0 = 0xbf; delay(50); P2 = 0x80; // 1000 0000 P0 = num[miao_L]; delay(50); P2 = 0x40; // 0100 0000 P0 = num[miao_H]; delay(50); P2 = 0x10; // 0001 0000 P0 = num[fen_L]; delay(50); P2 = 0x08; // 0000 1000 P0 = num[fen_H]; delay(50); P2 = 0x02; // 0000 0010 P0 = num[shi_L]; delay(50); P2 = 0x01; // 0000 0001 P0 = num[shi_H]; delay(50); }//display void keyscan(){ //按键函数 if(key_stop == 0){ key_delay(20); if(key_stop == 0){ EA = 0; //关总中断,即停止 while(!key_stop); } }//key_stop if(key_star == 0){ key_delay(20); if(key_star == 0){ EA = 1; //开总中断 while(!key_star); } }//key_star if(key_fen == 0){ key_delay(20); if(key_fen == 0){ fen++; while(!key_fen); } }//key_fen++ if(key_shi == 0){ key_delay(20); if(key_shi == 0){ shi++; while(!key_shi); } }//key_shi++ } void main(){ T0_Init(); while(1){ display(); keyscan(); } }//main void timer0_Init() interrupt 1{ //中断函数 counter++; if(counter == 20){ counter = 0; miao++; //i = 100 if(miao == 60){ miao = 0; fen++; if(fen == 60){ fen = 0; shi++; if(shi == 24){ shi = 0; fen = 0; miao = 0; } } } miao_L = miao%10; miao_H = miao/10; fen_L = fen%10; fen_H = fen/10; shi_L = shi%10; shi_H = shi/10; } }//timer0_Init
完整工程
-
51单片机数码管时钟c语言,51单片机8位数码管电子时钟(完结)
2021-05-22 02:17:5951单片机8位数码管电子时钟(完结)2015-07-09 10:48:07来源:51heidisp10: mov 34h,#0bfh ;"-"显示mov a,34hmov p0,aclr p2.5lcall del1mssetb p2.5disp11: mov 35h,#0bfh ;"-"显示mov a,35hmov p0,aclr p2.2lcall del...51单片机8位数码管电子时钟(完结)
2015-07-09 10:48:07 来源:51hei
disp10: mov 34h,#0bfh ;"-"显示
mov a,34h
mov p0,a
clr p2.5
lcall del1ms
setb p2.5
disp11: mov 35h,#0bfh ;"-"显示
mov a,35h
mov p0,a
clr p2.2
lcall del1ms
setb p2.2
ret
display1:mov a,38h ;闹钟分显示
mov b,#10
div ab
mov 26h,a
mov 27h,b
d1:mov a,26h ;闹钟分十位显示
mov dptr,#table
movc a,@a+dptr
mov p0,a
clr p2.3
lcall del1ms
setb p2.3
d2:mov a,27h ;闹钟分个位显示
mov dptr,#table
movc a,@a+dptr
mov p0,a
clr p2.4
lcall del1ms
setb p2.4
dispnz: mov a,39h ;闹钟时显示
mov b,#10
div ab
mov 28h,a
mov 29h,b
d5: mov a,28h ;闹钟时十位显示
mov dptr,#table
movc a,@a+dptr
mov p0,a
clr p2.0
lcall del1ms
setb p2.0
d6: mov a,29h ;闹钟时个位显示
mov dptr,#table
movc a,@a+dptr
mov p0,a
clr p2.1
lcall del1ms
setb p2.1
mov 35h,#0bfh ;"-"显示
mov a,35h
mov p0,a
clr p2.2
lcall del1ms
setb p2.2
ret
table:db 0c0h,0f9h,0a4h,0b0h,99h,92h,82h,0f8h,80h,90h ;数字0—9
del1ms:mov r7,#10 ;1ms延时子程序
del1: mov r6,#50
del2:djnz r6,del2
djnz r7,del1
ret
del20ms:mov r5,#40 ;20ms延时子程序
del3: mov r4,#250
del4: djnz r4,del4
djnz r5,del3
ret
keysan:jnb p3.1,key1 ;秒加1按钮
jnb p3.2,key2 ;分加1按钮
jnb p3.3,key3 ;时加1按钮
sjmp keyout
key1: lcall del20ms
jb p3.1,keyout
jnb p3.1,$
inc 31h ;秒加1
mov a,31h
cjne a,#60,keyout
mov 31h,#00
sjmp keyout
key2:lcall del20ms
jb p3.2,keyout
jnb p3.2,$
inc 32h ;分加1
mov a,32h
cjne a,#60,keyout
mov 32h,#00
sjmp keyout
key3:lcall del20ms
jb p3.3,keyout
jnb p3.3,$
inc 33h ;时加1
mov a,33h
cjne a,#24,keyout
mov 33h,#00
sjmp keyout
keyout:ret
keynz:jnb p3.4,keynz4 ;显示闹钟并可修改和显示当前时间
jnb p3.7,keynz5
jnb p3.5,nz3
jnb p3.6,nz4
sjmp nzout
nzout:ret
nz2:lcall display1
jnb p3.5,nz3
jnb p3.6,nz4
keynz4:jnb p3.4,nz2
sjmp nzout
nz3:lcall del20ms
jb p3.5,nzout
jnb p3.5,$
inc 38h
mov a,38h
cjne a,#60,nzout
mov 38h,#00
sjmp nzout
nz4:lcall del20ms
jb p3.6,nzout
jnb p3.6,$
inc 39h
mov a,39h
cjne a,#24,nzout
mov 39h,#00
sjmp keyout
keynz5:jb p3.7,nzout
jnb p3.7,$
setb p1.0
sjmp nzout
end
[1] [2]
404-电子工程世界
北京市海淀区知春路23号集成电路设计园量子银座1305
电话:(010)82350740
邮编:100191
电子工程世界版权所有
京ICP证060456号
Copyright © 2005-2021 EEWORLD.com.cn, Inc. All rights reserved
-
51单片机数码管时钟 并可以通过串口修改接收时间
2010-07-20 16:58:55可以通过独立按键修改时钟 也可以通过串口通讯修改接收时间 已经测试并且成功 -
单片机四位数码管时钟程序
2020-07-20 16:30:00本文章是关于单片机四位数码管时钟程序。 -
51单片机数码管显示时钟
2017-08-05 15:43:5551单片机实现了数码管和时钟芯片ds1302显示时间 -
51单片机做八位数码管时钟
2021-06-15 21:31:1751单片机做八位数码管时钟 -
51单片机七段数码管显示时钟——直接引脚控制版
2020-12-22 20:23:531.使用七段数码管显示一个时钟 2.编写程序让接在P0口的数码管显示时分秒,秒数每秒加一 3.要求1秒时间间隔使用定时器中断实现 4.七段数码管的位选通过P0口八位引脚控制 5.七段数码管的段选通过74LS138 (3-8译码器)... -
51单片机数码管时钟,proteus模拟,两套程序 带对表程序
2009-12-13 02:24:26对表程序 protues 时钟 51单片机 proteus模拟 -
51单片机七段数码管显示时钟加按键控制——74HC595版的所有文件
2020-12-22 20:15:341.使用七段数码管显示一个时钟 2.编写程序让接在P0口的数码管显示时分秒,秒数每秒加一 3.要求1秒时间间隔使用定时器中断实现 4.七段数码管的位选和段选通过[74HC595] -
[单片机]ACT89C51数码管时钟程序
2021-05-22 14:08:07该楼层疑似违规已被系统折叠隐藏此楼查看此楼#include #define uchar unsigned char#define uint unsigned int#define data P0sbit wr=P3^0;sbit cs1=P3^1;sbit cs2=P3^2;sbit m=P2^0;sbit add=P2^1;... -
基于51单片机的电子时钟(数码管显示)
2018-05-20 08:30:59首先我们先进行原理图的讲解,这里我们直接使用的开发板,其原理连接图如下: 从图中,我们可以看到,第一个74HC573是来控制8个数码管的位选的,就是说我要选种哪个数码管,这里的WE是低电平有效,比如说我想选中... -
基于51单片机的扫描数码管时钟
2021-12-22 21:14:59利用51单片机实现动态扫描数码管的时钟。 -
51单片机矩阵键盘实现时钟
2020-12-08 10:17:49数码管矩阵键盘实现时钟功能 -
基于51单片机电子时钟的设计(含程序和仿真图)_51单片机_电子时钟_
2021-09-29 13:15:13本设计主要设计了一个基于AT89C51单片机的电子时钟。在数码管通过一个控制键转换来显示相应的时间和日期。并通过多个控制键用来实现时间和日期的调节。 -
51单片机7种常见时钟电路图
2020-07-14 02:37:2101在MCS-51单片机片内有一个高增益的反相放大器,反相放大器的输入端为XTAL1,输出端为XTAL2,由该放大器构成的振荡电路和时钟电路一起构成了单片机的时钟方式。根据硬件电路的不同,单片机的时钟连接方式可分为内部... -
使用51单片机实现动态数码管类时钟计数【原创】
2022-05-14 00:24:56文章目录效果图一、BUG说明二、原理图三、代码1....COM口与74h138译码器短接 ,这里注意数码管阳极与74hc245连接顺序 三、代码 1.计数函数 void time() //从最内层while循环开始看 即while(k<10)