导航:首页 > 操作系统 > 单片机四位led数字时钟

单片机四位led数字时钟

发布时间:2022-12-07 14:52:39

① 运用51单片机实现4位8段LED数码管的动态数字显示,写出C语言程序

#include<reg51.h>
#define uchar unsigned char;
uchar distab[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0x00}; //0到f
uchar number,nn=0;
uchar dat[]={2,0,1,2,1,1,4,5,8,2};
void t0isr() interrupt 1
{
TH0=(65536-5000)/256;
TL0=(65536-5000)%256;
number++;
number%=4;
switch(number)
{
case 0:P2=0x08;P0=distab[nn];
break;
case 1:P2=0x04;P0=distab[nn+1];
break;
case 2:P2=0x02;P0=distab[nn+2];
break;
case 3:P2=0x01;P0=distab[nn+3];
break;
default:break;
}
nn++;
nn%=7;
}
main()
{
TMOD=0x01;
TH0=(65536-5000)/256;
TL0=(65536-5000)%256;
TR0=1;
ET0=1;
EA=1;
while(1);
}

② 51单片机实现数字时钟,用四位数码管实现分计时,显示分和秒,可以任意设置时间。

1、将分(秒)中的数字位分离
2、控制显示在相应数码管
3、数码管如果采用动态扫描实现,要注意位选和段选
4.更多交流参考我空间文章。

③ 用单片机控制4位LED数码显示,先从左到右慢速动态扫描显示数字“1357”,“2468”,然后在从

#include<reg52.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
uchar code dis_code_[]={0xf9,0xb0,0x92,0xf8,0xa4,0x99,0x82,0x80,0x88,0x83,0xc6,0xa1,0x86,0x8e,0x89,0x8c};
void delay(uint t)
{
uchar i;
while (t--)
{
for(i=0;i<200;i++);
}
}
void main()
{
uchar i,j=0x80;
while(1)
{
for(i=0;i<4;i++)
{j=_crol_(j,1);
P0=dis_code_[i];
P2=j;
delay(200);
}
}
while(1)
{for(i=4;i<8;i++)
{j=_crol_(j,1);
P0=dis_code_[i];
P2=j;
delay(180);
}
}
while(1)
{for(i=8;i<12;i++)
{j=_crol_(j,1);
P0=dis_code_[i];
P2=j;
delay(100);
}
}
while(1)
{for(i=12;i<16;i++)
{j=_crol_(j,1);
P0=dis_code_[i];
P2=j;
delay(100);
}
}
}

④ STC单片机四位数码管怎么显示时间

这个程序有你要的功能 给你参考一下 电路可能和你的不一样
#include<AT89X51.H>

#define uchar unsigned char
#define uint unsigned int

#define LedDisp_Port P0
sbit smg1=P1^0;
sbit smg2=P1^1;
sbit smg3=P1^2;
sbit smg4=P1^3;
sbit Led1=P2^7;

unsigned char t0IntCnt=0x00; //定义变量
unsigned char second,minute,hour,x,y;

void display(); //声明函数
void key_detect();
void delay_ms(uchar);
void system_init();

sbit key1=P3^7; //端口定义
sbit key2=P3^6;
sbit key3=P3^5;
sbit key4=P3^4; //端口定义
sbit key5=P3^3;
sbit key6=P3^2;

unsigned char code tab[10]=
{
0xC0,/*0*/ //共阳
0xF9,/*1*/
0xA4,/*2*/
0xB0,/*3*/
0x99,/*4*/
0x92,/*5*/
0x82,/*6*/
0xF8,/*7*/
0x80,/*8*/
0x90,/*9*/ //共阳

//0x3f, /*0*/ // 共阴
//0x06, /*1*/
//0x5b, /*2*/
//0x4f, /*3*/
//0x66, /*4*/
//0x6d, /*5*/
//0x7d, /*6*/
//0x07, /*7*/
//0x7f, /*8*/
//0x6f, /*9*/ // 共阴
};
/*--------------------------------
主程序
--------------------------------*/
void main()
{
system_init();
while(1)
{
display();
key_detect();

}
}
/*--------------------------------
初始化程序
--------------------------------*/
void system_init()
{
TMOD=0x01;
TR0=1;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
EA=1;
ET0=1;
t0IntCnt=0x00;
second=0x00;
minute=0x00;
hour=0x00;

}
/*--------------------------------
定时器0中断程序
--------------------------------*/
void timer0_ISR() interrupt 1
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
t0IntCnt++;
if(t0IntCnt==20)
{
t0IntCnt=0x00;
P1_0=!P1_0;
second++;

if(second==60)
{
second=0x00;
minute++;
if(minute==60)
{
minute=0x00;
hour++;
if(hour==24)
{
hour=0x00;
}
}
}
}
}
/*--------------------------------
毫秒延时程序
--------------------------------*/
void delay_ms(uchar no)
{
uchar i,j;
for(i=0;i<no;i++)
{
for(j=0;j<164;j++);
for(j=0;j<164;j++);
}
}
/*--------------------------------
动态扫描显示程序
--------------------------------*/
void display()
{
/*======显示秒和分=======
LedDisp_Port=tab[minute/10];
LedDisp_com1=0;
delay_ms(1);
LedDisp_com1=1;

LedDisp_Port=tab[minute%10];

if(t0IntCnt<11 )
{ LedDisp_dp=0; }
else
{ LedDisp_dp=1; }
LedDisp_com2=0;
delay_ms(1);
LedDisp_com2=1;

LedDisp_Port=tab[second/10];
LedDisp_com3=0;
delay_ms(1);
LedDisp_com3=1;

LedDisp_Port=tab[second%10];
LedDisp_com4=0;
delay_ms(1);
LedDisp_com4=1;
*/

/*=======显示小时和分钟=========*/
if(key==0)
{
P0=tab[x/10];
smg1=0;
delay_ms(1);
smg1=1;

P0=tab[x%10];

if(t0IntCnt<11 ) //定义dp点闪烁
{ LedDisp_dp=0; }
else
{ LedDisp_dp=1; } //定义dp点闪烁
LedDisp_com2=0;
delay_ms(1);
LedDisp_com2=1;

LedDisp_Port=tab[y/10];
LedDisp_com3=0;
delay_ms(1);
LedDisp_com3=1;

LedDisp_Port=tab[y%10];

if(t0IntCnt<11 ) //定义dp点闪烁
{ LedDisp_dp=0; }
else
{ LedDisp_dp=1; } //定义dp点闪烁
LedDisp_com4=0;
delay_ms(1);
LedDisp_com4=1;

LedDisp_Port=tab[0/10];
LedDisp_com5=0;
delay_ms(1);
LedDisp_com5=1;

LedDisp_Port=tab[0%10];

LedDisp_com6=0;
delay_ms(1);
LedDisp_com6=1;

}
else
{LedDisp_Port=tab[hour/10];
LedDisp_com1=0;
delay_ms(1);
LedDisp_com1=1;

LedDisp_Port=tab[hour%10];

if(t0IntCnt<11 ) //定义dp点闪烁
{ LedDisp_dp=0; }
else
{ LedDisp_dp=1; } //定义dp点闪烁
LedDisp_com2=0;
delay_ms(1);
LedDisp_com2=1;

LedDisp_Port=tab[minute/10];
LedDisp_com3=0;
delay_ms(1);
LedDisp_com3=1;

LedDisp_Port=tab[minute%10];

if(t0IntCnt<11 ) //定义dp点闪烁
{ LedDisp_dp=0; }
else
{ LedDisp_dp=1; } //定义dp点闪烁
LedDisp_com4=0;
delay_ms(1);
LedDisp_com4=1;

LedDisp_Port=tab[second/10];
LedDisp_com5=0;
delay_ms(1);
LedDisp_com5=1;

LedDisp_Port=tab[second%10];
LedDisp_com6=0;
delay_ms(1);
LedDisp_com6=1;
}
}
/*--------------------------------
按键检测程序
--------------------------------*/
void key_detect()
{
if(!key_hour) //判断键是否按下
{
hour++;
hour%=24;
while(!key_hour) //等待按键释放
{
display();
}
}

if(!key_h) //判断键是否按下
{
if(hour>0)
{
hour--;
hour%=24;
}
else
{
hour=23;
}
while(!key_h) //等待按键释放
{
display();
}
}

if(!key_minute) //判断键是否按下
{
minute++;
minute%=60;
while(!key_minute) //等待按键释放
{
display();
}
}

if(!key_m) //判断键是否按下
{
if(minute>0)
{
minute--;
minute%=60;
}
else
{
minute=59;
}
while(!key_m) //等待按键释放
{
display();
}

}

if(!key_clr) //判断键是否按下
{
hour=0x00;
minute=0x00;
second=0x00;
while(!key_clr) //等待按键释放
{
display();
}
}
if(!key_a) //判断键是否按下

{while(!key_a){display();}
x++;
if(x==24){x=0;}
}
if(!key_b) //判断键是否按下
{while(!key_b){display();}
y++;
if(y==60)
{y=0;}
}

}

⑤ 51单片机的4位数码管做简易秒表C语言程序

#include"dz110306140.h"这是什么头文件

阅读全文

与单片机四位led数字时钟相关的资料

热点内容
dvd光盘存储汉子算法 浏览:757
苹果邮件无法连接服务器地址 浏览:962
phpffmpeg转码 浏览:671
长沙好玩的解压项目 浏览:144
专属学情分析报告是什么app 浏览:564
php工程部署 浏览:833
android全屏透明 浏览:736
阿里云服务器已开通怎么办 浏览:803
光遇为什么登录时服务器已满 浏览:302
PDF分析 浏览:484
h3c光纤全工半全工设置命令 浏览:143
公司法pdf下载 浏览:381
linuxmarkdown 浏览:350
华为手机怎么多选文件夹 浏览:683
如何取消命令方块指令 浏览:349
风翼app为什么进不去了 浏览:778
im4java压缩图片 浏览:362
数据查询网站源码 浏览:150
伊克塞尔文档怎么进行加密 浏览:892
app转账是什么 浏览:163