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仿真
利用51单片机,4个数码管设计一个计时器,要求在数码管上显示的数据从0开始每1秒钟加1。