51单片机-定时器数码管
Posted clam-hao
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了51单片机-定时器数码管相关的知识,希望对你有一定的参考价值。
1 /************************************************************************************** 2 * 定时器秒表(查询方式)实验 * 3 实现现象:下载程序后数码管最后两位实现秒表功能。 4 注意事项:如果不想让点阵模块显示,可以将74HC595模块上的JP595短接片拔掉。 5 ***************************************************************************************/ 6 7 #include "reg52.h" //此文件中定义了单片机的一些特殊功能寄存器 8 9 typedef unsigned int u16; //对数据类型进行声明定义 10 typedef unsigned char u8; 11 12 sbit LSA=P2^2; 13 sbit LSB=P2^3; 14 sbit LSC=P2^4; 15 16 u8 code smgduan[17]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07, 17 0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};//显示0~F的值 18 u16 s; 19 u8 sec,mb[2]; 20 21 /******************************************************************************* 22 * 函 数 名 : Timer0Init 23 * 函数功能 : 定时器0初始化 24 * 输 入 : 无 25 * 输 出 : 无 26 *******************************************************************************/ 27 void Timer0Init() 28 { 29 TMOD|=0X01;//选择为定时器0模式,工作方式1,仅用TR0打开启动。 30 TH0=0XFC; //给定时器赋初值,定时1ms 31 TL0=0X18; 32 TR0=1;//打开定时器 33 } 34 35 /******************************************************************************* 36 * 函 数 名 : delay 37 * 函数功能 : 延时函数,i=1时,大约延时10us 38 *******************************************************************************/ 39 void delay(u16 i) 40 { 41 while(i--); 42 } 43 44 45 /******************************************************************************* 46 * 函 数 名 : DigDisplay 47 * 函数功能 : 数码管动态扫描函数,循环扫描2个数码管显示 48 *******************************************************************************/ 49 void DigDisplay() 50 { 51 u8 i; 52 for(i=0;i<2;i++) 53 { 54 switch(i) //位选,选择点亮的数码管, 55 { 56 case(0): 57 LSA=0;LSB=0;LSC=0; break;//显示第0位 58 case(1): 59 LSA=1;LSB=0;LSC=0; break;//显示第1位 60 } 61 P0=smgduan[mb[i]];//发送段码 62 delay(1); //间隔一段时间扫描 63 P0=0x00;//消隐 64 } 65 } 66 67 68 /******************************************************************************* 69 * 函 数 名 : main 70 * 函数功能 : 主函数 71 * 输 入 : 无 72 * 输 出 : 无 73 *******************************************************************************/ 74 void main() 75 { 76 Timer0Init(); 77 while(1) 78 { 79 if(TF0==1) 80 { 81 TF0=0; 82 TH0=0XFC; //给定时器赋初值,定时1ms 83 TL0=0X18; 84 s++; 85 } 86 if(s==1000) //到达1s时间 87 { 88 s=0; 89 sec++; 90 if(sec==100)sec=0; //计时到100秒后重新开始 91 } 92 mb[0]=sec%10; //秒表个位 93 mb[1]=sec/10; //秒表十位 94 DigDisplay(); 95 } 96 }
以上是关于51单片机-定时器数码管的主要内容,如果未能解决你的问题,请参考以下文章
51单片机定时器累加计数+2位数码管(循环显示00-99)+Proteus仿真
51单片机定时器累加计数(000-999)+4位数码管(循环显示)+Proteus仿真
单片机STC15定时器(1)中断,数码管自动加1的电子钟,为啥不自动加1