利用51单片机,4个数码管设计一个计时器,要求在数码管上显示的数据从0开始每1秒钟加1。

供稿:hz-xin.com     日期:2025-01-13
利用51单片机,4个数码管设计一个计时器,要求在数码管上显示的数据从0开始每1秒钟加1。

共阳数码管中断程序:
#include
#define uint unsigned int
#define uchar unsigned char
uchar code table[]=
{
0xc0,0xf9,0xa4,0xb0,
0x99,0x92,0x83,0xf8,
0x80,0x90,0x88,0x83,
0xc6,0xa1,0x86,0x8e};
uint num,a;
uchar bai,shi,ge;
void init();
void delay(uint);
void display(ucharbai,ucharshi,ucharge);
uint fb();
uint fs();
uint fg();
void main()
{
init();
while(1)
{
display(fb(),fs(),fg());
}
}
void init()
{
num=0;
a=0;
TMOD=0x01;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
EA=1;
ET0=1;
TR0=1;
}
void display(ucharbai,ucharshi,ucharge)
{
P1=0xfd;
P0=table[bai];
delay(1);
P1=0xfb;
P0=table[shi];
delay(1);
P1=0xf7;
P0=table[ge];
delay(1);
}
void timeoff() interrupt 1
{
TH0=(65536-50000)/256;
TL0=(65526-50000)%256;
a++;
if(a%20==0)
{
num++;
if(num==999)
{
num=0;
}
}
}void delay(uint z){
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
uint fb()
{
bai=num/100;
return bai;
}
uint fs()
{
shi=num%100/10;
return shi;
}
uint fg()
{
ge =num%100%10;
return ge;
}

扩展资料
2个可编程定时/计数器·5个中断源,2个优先级(52有6个)
一个全双工串行通信口
外部数据存储器寻址空间为64kB
外部程序存储器寻址空间为64kB
逻辑操作位寻址功能·双列直插40PinDIP封装
单一+5V电源供电
CPU:由运算和控制逻辑组成,同时还包括中断系统和部分外部特殊功能寄存器;
RAM:用以存放可以读写的数据,如运算的中间结果、最终结果以及欲显示的数据;
ROM:用以存放程序、一些原始数据和表格;
I/O口:四个8位并行I/O口,既可用作输入,也可用作输出
T/C:两个定时/记数器,既可以工作在定时模式,也可以工作在记数模式;
五个中断源的中断控制系统;
一个全双工UART(通用异步接收发送器)的串行I/O口,用于实现单片机之间或单片机与微机之间的串行通信;
片内振荡器和时钟产生电路,石英晶体和微调电容需要外接。最佳振荡频率为6M—12M。
参考资料来源:百度百科-51单片机


这就是做一个计数器和一个BCD译码器啊

现成的有与之差不多的,功能是倒计时,到一定值后停止

#include <reg52.h>

#include <intrins.h>

#define uchar unsigned char 

#define uint unsigned int 

uchar code table[]={0x3F,  0x06,  0x5B,  0x4F,   0x66,  0x6D,   0x7D,  0x07,   0x7F,  0x6F,   0x77,  

0x7C,   0x39,   0x5E,  0x79,  0x71, 0x76,   0x38,  };




sbit duan=P2^0;

sbit wei=P2^1;

uchar temp,tem,flag,chu;

uint dsec;

void init ();

void delay (uchar );

void display ();


void main ()

{

init ();

while (1)

{

display();


}

}


void init ()

{


flag=0;

temp=0xfe;

tem=0x01;

chu=0xff;

dsec=432;

TMOD=0x11;

TH0=(65535-10000)/256;

TL0=(65535-10000)%256;

TH1=(65535-50000)/256;

TL1=(65535-50000)%256;

P1=0x00;

EA=1;

ET0=1;

TR0=1;

ET1=1;

TR1=1;


}


void delay (uchar x)

{

uchar y;

for ( ;x>0;x--)

for (y=50;y>0;y--);

}


void display ()

{

uchar shu ,j,zi;

wei=1;

P0=temp;

wei=0;

duan=1;

P0=table[zi];

delay(2);

duan=0;

P0=0xff;


shu++;

if (shu==6) {shu=0 ;}

switch (shu)

{

case 0 : zi=7; break;

case 1 : zi=6 ;break ;

case 2 : zi=5; break;

case 3 : zi=dsec/100;break ;

case 4 :zi=dsec%100/10; break ;

case 5 :zi=dsec%10 ;break;

default : break ;

}

temp=_crol_(temp,1);

j++;

if(j==6) 

{

j=0;

temp=0xfe;

}

}

void tr0 () interrupt 1

{

uchar ms;

TH0=(65535-10000)/256;

TL0=(65535-10000)%256;

ms++;

if (ms==10)

{

ms=0;

dsec--;

if (dsec==398)

{

TR0=0;

flag=1;

}


}



}

void tr1 () interrupt 3

{

uchar tt,time;

TH1=(65535-50000)/256;

TL1=(65535-50000)%256;

tt++;

if(tt==10)

{

tt=0;

if (flag==0)

{

P1=tem;

tem=_crol_(tem,1);

}

else 

{

P1=chu;

chu=~chu;

time++;

if(time==6)

{

TR1=0;

}

}

}

}



利用单片机内部计时器来做可以的,计时1秒刷新一次。

利用51单片机,4个数码管设计一个计时器,要求在数码管上显示的数据从0开...
void tr0 () interrupt 1 {

c51编写一个四位数码管,共阴
在编写一个四位数码管共阴电路程序时,首先需要定义段码数组。段码数组如下:unsigned char leddata[] = { 0x3F, \/\/ "0"0x06, \/\/ "1"0x5B, \/\/ "2"0x4F, \/\/ "3"0x66, \/\/ "4"0x6D, \/\/ "5"0x7D, \/\/ "6"0x07, \/\/ "7"0x7F, \/\/ "8"0x6F \/\/ "9"};接着定义位选...

利用51单片机,4个数码管设计一个计时器,要求在数码管上显示的数据从0开...
利用51单片机,4个数码管设计一个计时器,要求在数码管上显示的数据从0开始每1秒钟加1。  我来答 5个回答 #活动# 参与造句大挑战,答题瓜分万元豪礼 zlzskddj2602 推荐于2017-09-27 知道答主 回答量:19 采纳率:0% 帮助的人:0 我也去答题访问个人页 关注 展开全部 没有定时器的不过有数字钟的...

利用51单片机,4个数码管设计一个计时器,要求在数码管上显示的数据从0开...
TL0=(65536-50000)%256;EA=1;ET0=1;TR0=1;} void display(ucharbai,ucharshi,ucharge){ P1=0xfd;P0=table[bai];delay(1);P1=0xfb;P0=table[shi];delay(1);P1=0xf7;P0=table[ge];delay(1);} void timeoff() interrupt 1 { TH0=(65536-50000)\/256;TL0=(65526-50000)%256;a++...

51单片机如何用汇编语言让4个共阴数码管同时显示1234 P3口是片选 P0是...
在进行51单片机的编程时,利用汇编语言实现四个共阴数码管同时显示数字1234是一个有趣的实验。实验中,P3口被用作片选信号,而P0口则负责段选,即控制数码管的点亮状态。要实现这一功能,可以使用proteus软件进行仿真。在proteus中,创建一个四位一体的共阴数码管模型,并将其连接到51单片机的P0和P3口。

51单片机用C语言如何写四个数码管的流水灯程序?
在使用51单片机的C语言编程中,实现四个数码管的流水灯程序可以通过移位操作来简化代码。具体而言,我们首先定义一个函数set(void),该函数用于控制数码管的显示。在该函数中,我们使用了一个静态变量cnt来跟踪当前数码管的显示顺序。每当调用set函数时,cnt会递增,以此来改变数码管的显示内容。同时,为了...

51单片机 编写4个LED数码管同时循环显示0—9的数字 的程序。
0xc0, 0xf9, 0xa4, 0xb0, 0x99, \/\/0-4 0x92, 0x82, 0xf8, 0x80, 0x90};\/\/5-9 while(1) { P0 = SEG[n1]; \/\/P0口,外接共阳数码管的段选端 delay(2000);n1++; if(n1 > 9) n1 = 0;} } 4个(任意个)共阳数码管的段选端,接在 P0,其位选,都接电源即可。

利用51单片机,用按键和数码管组成一个控制系统,要求四个数码管显示四...
include<reg51.h> define uchar unsigned char uchar temp;int key1,key,disbuf;\/\/ 此表为 LED 的字模 0 1 2 3 4 5 6 7 8 9 a b c d e f unsigned char code LED7Code[] = {0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0x77,0x7C,0x39,0x5E,0x79,0x71};...

用51单片机控制4位一体数码管实现1234轮流显示的程序代码是什么,求!pro...
下面是使用AT89S51单片机控制4位一体数码管轮流显示1234的程序代码:```c include <reg51.h> \/\/ 数码管显示字型码表 unsigned char code LEDDisplay[] = { 0x3F, \/\/ 0 0x06, \/\/ 1 0x5B, \/\/ 2 0x4F \/\/ 3 };sbit DIO = P1^0; \/\/ 串行数据输入 sbit RCLK = P1^1; \/...

哪位高手帮帮忙帮我编个程序,用8051单片机控制4位LED共阳数码管。。
sbit LED=P1^2; \/\/定义led输出端口,一个四个都是一样的定义方法 void main (void){ KEY=1; \/\/按键输入端口电平置高 while (1) \/\/主循环 { if(!KEY) \/\/如果检测到低电平,说明按键按下 LED=0;else LED=1; \/\/这里使用if判断,如果按键按下led点亮,否则熄灭 \/\/如果需要四个...