问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

谁能告诉我51单片机简单的led数码管时钟程序 24小时制的(c语言版的)

发布网友 发布时间:2022-05-09 19:52

我来回答

3个回答

热心网友 时间:2023-10-16 05:28

#include "reg52.h"
#define uint unsigned int
#define uchar unsigned char
uchar code tab[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
uchar shi,fen,miao;
uchar time;
void delay(uint x)
{
uint y;
for(;x>0;x--)
{
for(y=0;y<124;y++);
}
}
void display(uchar shi,uchar fen,uchar miao)
{
P2=0; //位码
P0=(tab[shi/10]); //段码
delay(2);
P2=1;
P0=(tab[shi%10]);
delay(2);
P2=2; //位码
P0=0x40; //段码
delay(2);
P2=3; //位码
P0=(tab[fen/10]); //段码
delay(2);
P2=4;
P0=(tab[fen%10]);
delay(2);
P2=5; //位码
P0=0x40; //段码
delay(2);
P2=6; //位码
P0=(tab[miao/10]); //段码
delay(2);
P2=7;
P0=(tab[miao%10]);
delay(2);

}
void main()
{
TMOD=0x01;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
EA=1;
ET0=1;
TR0=1;
while(1)
{

if(time==20)
{
time=0;
miao++;
if(miao==60)
{
miao=0;
fen++;
if(fen==60)
{
fen=0;
shi++;
if(shi==24)
shi=0;
}

}

}
display(shi,fen,miao);
}
}
void timer0() interrupt 1
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
time++;
}

/*还有什么不明白继续追加*/

热心网友 时间:2023-10-16 05:28

好久没有用51编程了,有可能有错误,你试一下,有问题告诉我再改正。
P2.0秒的个位的数码管的共阴极
P2.1秒的十位的数码管的共阴极

P2.2分的个位的数码管的共阴极

P2.3分的十位的数码管的共阴极

P2.4时的个位的数码管的共阴极

P2.5时的十位的数码管的共阴极

#include <reg52.h>// 晶振为12MHz,
#include <stdio.h>
void IT0_Init(void);
void xianshi(void);
uchar tab[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
int miao=0,fen=0,shi=0;
int main(void){
IT0_Init();
Timer0_Overflow();
while(1){
if(miao>59){
fen++;
miao=0;
if(fen>59){
shi++;
fen=0;
if(shi>24)
shi=0;
xianshi();
}}}}
void IT0_Init(void)
{
TMOD=0x01;//设置T0在方式1下工作
TH0=0x3C;
TL0=0xAF;//这两个寄存器存的是计数器的计数开始的值,计算发现这两个值累加至溢出后正好是50ms
ET0=1;//使T0中断可以溢出
EA=1;//开启总中断
TF0=0;//溢出位清零
TR0=1;//开启T0
}
void xianshi(void)
{
P2=0x01;
P1=tab[(miao%10)];
P2=0x02;
P1=tab[(miao/10)];
P2=0x04;
P1=tab[(fen%10)];
P2=0x08;
P1=tab[(fen/10)];
P2=0x10;
P1=tab[(shi%10)];
P2=0x20;
P1=tab[(shi/10)];
}
void Timer0_Overflow() interrupt 1
{
static unsigned char second=20;//用20次中断来判断1秒
TH0=0x3C;
TL0=0xAF;
second--;
if (second==0)//每隔一秒的操作
{
second=20;//重新赋值每秒计数器
miao++;
}
}

热心网友 时间:2023-10-16 05:29

/**************************************************
*
* 6位数码管显示电子钟
*
* 功能: 按键加,按键减, 按键,启动和停止。
*
*
***************************************************/
#include "REG52.H"

sbit SHUG_01 = P2^0; //数码管1
sbit SHUG_02 = P2^1; //数码管2
sbit SHUG_03 = P2^2; //数码管3
sbit SHUG_04 = P2^3; //数码管4
sbit SHUG_05 = P2^4; //数码管5
sbit SHUG_06 = P2^5; //数码管6
sbit LED0_01 = P2^6; //LED灯1
sbit LED0_02 = P2^7; //LED灯1
sbit LED0_03 = P3^0; //LED灯1
sbit LED0_04 = P3^1; //LED灯1
sbit KEY0_01 = P0^0; //按键 启动或停止
sbit KEY0_02 = P0^1; //按键 加
sbit KEY0_03 = P0^2; //按键减
sbit KEY0_04 = P0^3; //按键菜单
#define LED_DATA P1 //P1数据端口
unsigned char value_temp = 0;
unsigned char value_Date = 0;
unsigned char value_Outk = 0;
unsigned char value_shio = 8;
unsigned char value_feno = 4;
unsigned char value_miao = 0;
unsigned char value_Mume = 0;
unsigned char code value_tab0[]=
{
0xC0,
0xF9,
0xA4,
0xB0,
0x99,
0x92,
0x82,
0xF8,
0x80,
0x90
}; //共阳极0-9显示断码
unsigned char code value_tab1[]=
{
0x40,
0x79,
0x24,
0x30,
0x19,
0x12,
0x02,
0x78,
0x00,
0x10
}; //共阳极带点0-9显示断码

/*
* 延时1ms延时子函数
**/
void Delay_1ms(unsigned int Time)
{
unsigned int x, y;
for(x = Time; x > 0; x--)
for(y = 120; y > 0; y--);
}
/*
* 程序运行【启动和停止】子函数
**/
void Disp_layledketCmd(void)
{
/***小时***/
SHUG_01 = 1;
LED_DATA = value_tab0[value_shio / 10]; /*******小时的十位数显示***************/
Delay_1ms(5);
SHUG_01 = 0;
SHUG_02 = 1;
LED_DATA = value_tab1[value_shio % 10]; /*******小时的个位数显示***************/
Delay_1ms(5);
SHUG_02 = 0;
/***分钟***/
SHUG_03 = 1;
LED_DATA = value_tab0[value_feno / 10]; /*******分钟的十位数显示***************/
Delay_1ms(5);
SHUG_03 = 0;
SHUG_04 = 1;
LED_DATA = value_tab1[value_feno % 10]; /*******分钟的个位数显示***************/
Delay_1ms(5);
SHUG_04 = 0;
/***秒钟***/
SHUG_05 = 1;
LED_DATA = value_tab0[value_miao / 10]; /*******秒钟的十位数显示***************/
Delay_1ms(5);
SHUG_05 = 0;
SHUG_06 = 1;
LED_DATA = value_tab0[value_miao % 10]; /*******秒钟的个位数显示***************/
Delay_1ms(5);
SHUG_06 = 0;
}
/*
* 定时器初始化定时50ms
**/
void Tero_Init(void)
{
TMOD = 0x11;
TH0 = 0x3C;
TL0 = 0xB0;
TH1 = 0x4C;
TL1 = 0x00;
ET0 = 1;
ET1 = 1;
TR0 = 1;
TR1 = 1;
EA = 1;
}
/*
* 按键开关【启动和停止】子函数
**/
void Scan_keyoutCmd(void)
{
if(KEY0_01 == 0)
{
Delay_1ms(10);
if(KEY0_01 == 0)
{
value_Mume++;
if(value_Mume == 4)
{
value_Mume = 0;
}
while(KEY0_01 == 0);
}
}

if(value_Mume == 1)
{
TR0 = 0;
LED0_02 = 0;
if(KEY0_02 == 0)
{
Delay_1ms(10);
if(KEY0_02 == 0)
{
value_shio--;
if(value_shio == -1)
{
value_shio = 23;
}
while(KEY0_02 == 0);
}
}
if(KEY0_03 == 0)
{
Delay_1ms(10);
if(KEY0_03 == 0)
{
value_shio++;
if(value_shio == 24)
{
value_shio = 0;
}
while(KEY0_03 == 0); //检测松手
}
}
}

else if(value_Mume == 2)
{
LED0_02 = 1;
LED0_03 = 0;
if(KEY0_02 == 0)
{
Delay_1ms(10);
if(KEY0_02 == 0)
{
value_feno --;
if(value_feno == -1)
{
value_feno = 59;
}
while(KEY0_02 == 0);
}
}
if(KEY0_03 == 0)
{
Delay_1ms(10);
if(KEY0_03 == 0)
{
value_feno++;
if(value_feno == 60)
{
value_feno = 0;
}
while(KEY0_03 == 0); //检测松手
}
}
}

else if(value_Mume == 3)
{
LED0_03 = 1;
LED0_04 = 0;
if(KEY0_02 == 0)
{
Delay_1ms(10);
if(KEY0_02 == 0)
{
value_miao --;
if(value_miao == -1)
{
value_miao = 59;
}
while(KEY0_02 == 0);
}
}
if(KEY0_03 == 0)
{
Delay_1ms(10);
if(KEY0_03 == 0)
{
value_miao++;
if(value_miao == 60)
{
value_miao = 0;
}
while(KEY0_03 == 0); //检测松手
}
}
}
else
{
LED0_02 = 1;
LED0_03 = 1;
LED0_04 = 1;
TR0 = 1;
}
}
/*
* 函数主体
**/
int main(void)
{
P1 = P2 = P3 = 0x00;
Tero_Init();

while(1)
{
Scan_keyoutCmd();
Disp_layledketCmd(); //执行应运程序
}
}
/*
* 定时器T0中断服务程序
**/
void Tmero()interrupt 1
{
TH0 = 0x3C;
TL0 = 0xB0;
value_temp++;
if(value_temp == 20)
{
value_temp = 0;
value_miao++;
if(value_miao == 60)
{
value_feno++;
value_miao = 0;
if(value_feno == 60)
{
value_shio++;
value_feno = 0;
if(value_shio == 24)
{
value_shio = 0;
}
}
}
}
}
/*
* 定时器T1中断服务程序
**/
void Tmer1()interrupt 3
{
TH1 = 0x4C;
TL1 = 0x00;
value_Date++;
if(value_Date == 5)
{
value_Date = 0;
LED0_01 = ~ LED0_01;
}
}
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
找几本一流的小说。类型' 完结什么的无所谓. 不要幼稚就好 沈阳职高学校排名 沈阳哪个公办职高和中专好 沈阳有哪些职高学校比较好? gpw一代和二代的区别有哪些 罗技gpw一代和二代区别介绍 第一代和第二代的区别 gpw二代和一代有什么区别 二代和一代区别详情分享 设张举措的意思设张举措的解释设张举措接龙 设张的成语设张的成语是什么 人字地砖铺法怎么找平方 你好,请问51单片机怎么编写程序让8个数码管显示时间(时分秒)的程序可以让我看看么?? 阿修罗是什么, 51单片机 可编程作息时间控制器设计 火影忍者中的三大瞳术各有什么能力? 洛克王国怎么打镇狱修罗王 关于51单片机中的计时小编程问题 求助~关于邮政储蓄小额贷款的问题~~~ 如何用c语言编程51单片机程序,满足从0-4小时计时,有清零,开始,暂停功能? 洛克王国蝎王醒觉的封印怎么打 51单片机计时编程 本人想在邮政储蓄小额贷款!入了黑名单还可以贷款吗? 我在邮政银行有小额贷款可以去兴业银行申请房贷吗? 奥拉星修罗和凯撒谁厉害? 洛克王国英魂修罗怎么用? 《修罗の笔》《催眠の奏》《森の记忆 》可以给我发过一分来么? 重点是《修罗之笔》要游戏啊 洛克王国镇狱修罗王怎么打 洛克王国镇狱修罗王打法攻 奥拉星修罗凯撒谁更好 求修罗都市三,给大哥跪了,跪求 温州乐清 洛克王国英魂修罗能被催眠吗 51 单片机编程-按键按下时间控制LED 编程C51单片机程序 数字时钟 急求 急求!! 51单片机怎么用定时器记录两次外部中断的时间?C语言应该如何编程? 两位秒表 51单片机程序编程 51单片机4位LED电子钟怎么编程 golang 在Mac 上无法调试的问题,请问如何解决 golang有哪些不安全函数 陶瓷餐具什么牌子的比较好? 家里电脑QQ登不上去网页可以上这是怎么回事 问:陶瓷餐具那个品牌好? apm monaco品牌可以加盟吗 iPhone 7 Plus怎么设置uc浏览器不在锁屏时推送头条文章?和不在通知栏推送文章 手机里uc头条每天怎么不提醒消息了 怎么关闭uc浏览器通知栏的新闻。 哪些名人个子在1.8米以上 史上身高最高的皇帝是谁?有多高 贝多芬,托尔斯泰,米开朗基罗,各自经历了什么苦难?他们的伟大之处表现再什么地方? 北方战争取胜原因主要有哪些? 国家队乒乓球教练名单 为什么电话卡发不了信息,换手机也不行