51单片机+4位数码管利用定时器秒计数

Posted perseverance52

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了51单片机+4位数码管利用定时器秒计数相关的知识,希望对你有一定的参考价值。

51单片机+4位数码管利用定时器秒计数

  • 仿真图
    在这里插入图片描述

  • 程序源码:

#include<reg51.h>

unsigned int number =0;
unsigned char qian,bai,shi,ge;
 unsigned char code Seg_Tab[]  = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
					  //共阴0-F段码,加code是存在rom里面
void delay(unsigned int n);//@12MHz晶振
 void Seg_display(unsigned int val);
void init();
//void jishu();


void main (){
	init();
	//jishu();
	while(1)
	{
		Seg_display(number);
	}
}

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

//void jishu(){
//	qian = number/1000;
//	bai = number%1000/100;
//	shi = number%1000%100/10;
//	ge = number%1000/100%10;
//}

//定时器0函数
void time0() interrupt 1 using 1
{	char i;
	TL0 =(65536-50000)%256;
	TH0 =(65536-50000)/256;
	i++;
	if(i==20)
	{//1秒钟=50ms*20=1000ms,20次计数为1秒钟
		i=0;
		number++;
	}
}
//延时n毫秒
void delay(unsigned int n)//@12MHz晶振
{
    unsigned int i=0,j=0;
    for(i=0;i<n;i++)
        for(j=0;j<123;j++);
}

void Seg_display(unsigned int val){
 unsigned char i,dia_data;

	for(i=0;i<4;i++){
	dia_data = val % 10;
		val =val/10 ;
		P0 = Seg_Tab[dia_data];
		P1 = i;
delay(5);
		P0=0;//消隐作用
	}
}



以上是关于51单片机+4位数码管利用定时器秒计数的主要内容,如果未能解决你的问题,请参考以下文章

51单片机定时器累加计数(000-999)+4位数码管(循环显示)+Proteus仿真

Proteus仿真51单片机利用定时器倒计数(99-0)

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

51单片机+4位数码管计时器按键可调节

51单片机定时器累加计数+2位数码管(循环显示00-99)+Proteus仿真

基于51单片机定时器计数+74HC595移位寄存器+8位数码管时钟