求 单片机程序 要求数码管显示时间 1-60 显示一秒响一次

供稿:hz-xin.com     日期:2025-01-14
求51单片机控制一个数码管显示程序!

帮你是害了你, 你搜索下 基本会有现成的,,有的只需要调试下,。
但不管怎么样。 自己经历一次,就会了解些,有所长进,增加自信!

#include
#define uint unsigned int
#define uchar unsigned char
sbit PRESS1=P1^0;
sbit PRESS2=P1^1;
sbit PRESS3=P1^2;
uint a[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};//0到9
uint b[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};
int miao=45,fen=58,shi=15;
uint jishu;
uint miaog,miaos,feng,fens,shig,shis;
int ji;
void init()//初始化函数设置中断寄存器的值。
{
jishu=0;
TMOD=0x01;
TR0=1;
ET0=1;
EA=1;
TH0=0x3c;
TL0=0xb0;

}
void delay(x)//延时函数。
{
uint i,j;
for(i=x;i>0;i--)
for(j=120;j>0;j--);
}
void xian()//把时分秒送到数码管显示。
{
uint i;
miaog=miao%10;
miaos=miao/10;
feng=fen%10;
fens=fen/10;
shig=shi%10;
shis=shi/10;
for(i=0;i<8;i++)
{
switch(i)
{
case 0:P3=b[7];P2=a[miaog];break;
case 1:P3=b[6];P2=a[miaos];break;
case 2:P3=b[5];P2=0x40;break;
case 3:P3=b[4];P2=a[feng];break;
case 4:P3=b[3];P2=a[fens];break;
case 5:P3=b[2];P2=0x40;break;
case 6:P3=b[1];P2=a[shig];break;
case 7:P3=b[0];P2=a[shis];break;
}
delay(1);
};
}
void jiance()//检测键是否按下按不同键实现不同的处理。
{
if(PRESS1==0)
{
delay(2);
if(PRESS1==0)
{
while(!PRESS1);
ji++;
if(ji>=4)
ji=0;
}
}
if(ji==1)
{
if(PRESS2==0)
{
delay(1);
while(!PRESS2);
miao++;
if(miao>=60)
{
miao=0;
fen++;
}
}
if(PRESS3==0)
{
delay(1);
while(!PRESS3);
miao--;
if(miao<0)
{
miao=59;

}
}
}
if(ji==2)
{
if(PRESS2==0)
{
delay(1);
while(!PRESS2);
fen++;
if(fen>=60)
{
fen=0;
shi++;
}
}
if(PRESS3==0)
{
delay(1);
while(!PRESS3);
fen--;
if(fen<0)
{
fen=59;

}
}
}
if(ji==3)
{
if(PRESS2==0)
{
delay(1);
while(!PRESS2);
shi++;
if(shi>=24)
{
shi=0;

}
}
if(PRESS3==0)
{
delay(1);
while(!PRESS3);
shi--;
if(shi<0)
{
shi=23;

}
}
}
if(ji==0)
EA=1;
else
EA=0;
}


void main()
{
init();
while(1)
{
xian();
jiance();

}
}
void duan() interrupt 1 //计时中断0工作方式1函数。
{
TH0=0x3c;
TL0=0xb0;
jishu++;
if(jishu==20)
{
jishu=0;
miao++;
if(miao==60)
{
miao=0;
fen++;
if(fen==60)
{
fen=0;
shi++;
if(shi==24)
shi=0;
}
}
}
}

Count EQU 40H
TimeCount EQU 42H
BEEP EQU P3.7
;**********************************************************
ORG 0000H
JMP MAIN
ORG 000BH
JMP TIMER0
ORG 0030H
;**********************************************************
MAIN:
MOV SP,#60H
MOV TMOD,#01
SETB EA
SETB ET0
SETB TR0
MOV TH0,#4CH ;50ms定时
MOV TL0,#00H
MOV Count,#00
LOOP:
MOV A,Count
MOV B,#10
DIV AB
MOV DPTR,#TABLE
MOVC A,@A+DPTR
MOV P0,A
SETB P2.7
CLR P2.6
CALL DELAY2MS
MOV A,B
MOVC A,@A+DPTR
MOV P0,A
SETB P2.6
CLR P2.7
CALL DELAY2MS
SETB P2.7
SETB P2.6
JMP LOOP
;**********************************************************
TIMER0:
PUSH ACC
MOV TH0,#4CH
MOV TL0,#00H
INC TimeCount
MOV A,TimeCount
CJNE A,#20,T_END
MOV TimeCount,#00H
INC Count
MOV A,Count

CALL FENGM
CJNE A,#61,T_END
MOV Count,#00H
T_END:
POP ACC
RETI
;**********************************************************
DELAY2MS:
MOV R6,#04
DEL1:
MOV R7,#248
DJNZ R7,$
DJNZ R6,DEL1
RET

FENGM:
MOV R6,#50
BL2: CALL DEX1
CPL BEEP
DJNZ R6,BL2
MOV R5,#15
CALL DELAY_BL
RET
DEX1: MOV R7,#90
DE2: NOP
DJNZ R7,DE2
RET
;-------------------------------------------
DELAY_BL:
MOV R6,#10
DL1: MOV R7,#30
DJNZ R7,$
DJNZ R6,DL1
DJNZ R5,DELAY_BL
RET
DELAY:
MOV R7,#02H
DEL11:
MOV R6,#10
DEL21:
MOV R5,#50
DEL31:
NOP
NOP
DJNZ R5,DEL31
DJNZ R6,DEL21
DJNZ R7,DEL11
RET

;**********************************************************
TABLE:
DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H
DB 80H ,90H,88H,83H,0C6H,0A1H,86H,8EH
;**********************************************************
END

不知道要什么语言的
#include<reg52.h>
#include<stdlib.h>

unsigned char code TABLE[]={0xd7,0x11,0xcd,0x5d,0x1b,0x5e,0xde,0x15,0xdf,0x5f};
#include<stdlib.h>
sbit P2_7= P2^7;
sbit P2_6= P2^6;
sbit P2_5= P2^5;
sbit P2_4= P2^4;
sbit P0_5= P0^5;
sbit P3_4= P3^4;

unsigned char s,a,g,sf,bf,m,b,c,d,e,f;
void jishu ( ) interrupt 1
{
TH0=(65536-6363)/256;
TL0=(65536-6363)%256;
TR0=1;
a++;b++;
s=f/10;
g=f%10;/*f代表1s*/
sf=e/10;
bf=e%10;/*e代表0.01s*/

P2_7=1;
P2_6=1;
P2_5=1;
P2_4=1;
if (a>4)
a=1;
switch(a)
{
case(1):P0=TABLE[bf];P2_7=0;break;
case(2):P0=TABLE[s];P2_6=0;break;
case(3):P0=TABLE[g];P2_5=0;P0_5=1;break;
case(4):P0=TABLE[sf];P2_4=0;break;
}

if(b>10)
{
e++;
b=0;
}
if(f<=58)
P3_4=1;
else if(s>60)
P3_4=1;

if(e>99)
{
f++;
e=0;
P3_4=0;
}
if(f>59)
{
f=0;
P3_4=0;
}
}
void main()
{ a=0;
b=0;
e=0;
g=0;
s=0;
sf=0;
bf=0;
EA=1;
ET0=1;
TH0=(65536-6363)/256;
TL0=(65536-6363)%256;
TR0=1;

P2_7=1;
P2_6=1;
P2_5=1;
P2_4=1;
while(1){};
}

编个单片机程序,按键控制动态数码管显示00-32,位码是P1-6,P1-7,段码...
在51单片机上编写一个程序,实现按键控制数码管显示00到32,位码使用P1-6和P1-7,段码使用P0口。程序中定义了数码管显示和按键控制的函数。程序包含主函数main和两个子函数YS和XS。主函数中通过while循环不断检查按键状态,若按键被按下则调用YS函数去抖动后更新显示值,若数值超过99则置为0,若数值...

用单片机做个时间闹钟,用4位数码管显示。分钟和小时的进制要这么弄...
;m表示分钟,h表示小时 if(m>59) {m=m-60;h=h+1;} if(h>23) h=h-24;

单片机数码管动态扫描显示,时间这样设置才能更好的显示一连串数在屏幕...
要根据数码管的数量来定的。但是,一般来说,每一位数码管需要一定的显示时间,也就是说,你输出一位数码管的数据点亮这个数码管之后,需要一定的时间才能熄灭它并点亮下一个数码管,而不能一输出就马上熄灭它,否则亮度会非常低。另外,全部数码管全部扫描一遍的总时间最好不要超过25mS,否则闪烁会...

实现实时时钟在数码管上显示时间
实现实时时钟在数码管上显示时间的实验涉及到DS1302实时时钟模块的应用,DS1302是一种串行接口的实时时钟芯片,其内部具备日历时钟功能。芯片通过简单的串行接口与微处理器通信,提供秒数、分钟、小时、星期、日期、月份和年份信息。该芯片设计为低功耗运行,数据和时钟信息在1μs内保留。DS1302芯片使用同步...

求一个简单的单片机用数码管显示计时60秒的C语言程序,程序一定要带有解...
define uchar unsigned char uchar code num[12]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff,0xbf}; \/\/共阳极数码管0-9数组以及全灭和“-”符号 uchar data da[2]; \/\/定义显示缓存 uint sec; \/\/定义秒 uchar a; \/\/显示位选择 \/\/延时子程序 void d(uint i){...

51单片机控制DS1302,时间显示在数码管上。
打算用51单片机控制DS1302时钟芯片,做一个显示时间和日期的钟表。三个独立按键(“M”“+”“-”)直接连接在单片机的三个引脚上,用四位数码管显示时间(小时+分钟)秒不显示,按一... 打算用51单片机控制DS1302时钟芯片,做一个显示时间和日期的钟表。三个独立按键(“M” “+”“-”)直接连接在单片机的三个引脚...

【单片机程序】能让数码管动态显示“0123”一秒后再显示“4567”以此循...
include <reg52.h> typedef unsigned char u8;typedef unsigned int u16;void display(u8 x);\/\/声明显示子函数 u8 t0n; \/\/定时器中断次数 void main()\/\/主程序 { u8 n;TMOD=0x01;TH0 =0x3C;\/\/晶振12M,定时50ms TL0 =0xB0;IE =0x82;TR0 =1;while(1){ display(n);if(t0n>=20...

用c语言编写程序,用于c51单片机四位共阴数码管显示,显示分秒的计时器...
用proteus做的时钟 可以显示年月日时分秒 可调整时间 有图 \/ includereg52.h> defineuchar unsigned char define uint unsigned int define timh 0xee define timl 0x00 sbit K1=P1^0;sbit K2=P1^1;sbit K3=P1^2;sbit K4=P1^3;sbit K5=P1^4;sbit K6=P1^5;sbit poit=P0^7;uint ...

求助单片机0-60秒可调数码管显示程序
\/\/问题说的不太清楚,只能给你做这些了,有问题再问我(发消息给我)\/\/功能描述:实现秒,分,时功能,并可进行时间的调整 \/\/根据你的需要加减部分程序就OK了,这个程序已经在硬件上测试通过了 include <reg52.h> include <intrins.h> define uchar unsigned char define TURE 1 define FALSE 0 void ...

用c语言循环语句怎么写一个51单片机的时钟啊,用8个数码管显示时间。
include<reg51.h> define uchar unsigned charuchar code ledtab[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x40};\/\/0-9unsigned char sec=0,min=0,hour=12,scanled;unsigned char key,flashbit,mode,time; unsigned char disdat[8];sbit led=P1^0;void delay(...