历史上的今天
今天是:2025年08月06日(星期三)
2021年08月06日 | 用51单片机实现的简易秒表
2021-08-06 来源:eefocus
设计思路:
(1)在main函数中不停的控制数码管显示时、分、秒
(2)用定时器0控制时间的递增
(3)用外部中断0(KEY3)实现秒表的暂停/开始
(4)用外部中断1(KEY4)实现秒表的停止
开发板:普中科技开发板
代码如下:
1 #include "reg52.h"
2 #define led P0
3 typedef unsigned char u8;
4 typedef unsigned int u16;
5
6 sbit LSA = P2^2;
7 sbit LSB = P2^3;
8 sbit LSC = P2^4;
9 sbit k3 = P3^2;
10 sbit k4 = P3^3;
11 static u8 hour = 0;
12 static u8 min = 0;
13 static u8 sec = 0;
14
15 u8 code smgz[] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
16 0x7f,0x6f,0x40};
17
18 u8 code location[8][3] = {1, 1, 1,
19 0, 1, 1,
20 1, 0, 1,
21 0, 0, 1,
22 1, 1, 0,
23 0, 1, 0,
24 1, 0, 0,
25 0, 0, 0};
26 //位置表 从左到右
27
28 void delay(u16 j){
29 while(j--);
30 }
31
32 char nol(char loc){
33 switch(loc){
34 case 7:
35 return sec % 10 ;
36 case 6:
37 return sec / 10;
38 case 5:
39 return 10;
40 case 4:
41 return min % 10;
42 case 3:
43 return min / 10;
44 case 2:
45 return 10;
46 case 1:
47 return hour % 10;
48 case 0:
49 return hour / 10;
50 }
51 }
52
53 void Timer0Init()
54 {
55 TMOD |= 0X01;
56 TH0 = 0XFC;
57 TL0 = 0X18;
58 ET0 = 1;
59 IT0=1;//跳变沿出发方式(下降沿)
60 EX0=1;//打开INT0的中断允许。
61 IT1=1;
62 EX1=1;
63 EA = 1;
64 TR0 = 1;
65 }
66 void main(){
67
68 Timer0Init();
69 while(1)
70 {
71 u8 i;
72 for(i = 0; i <= 7; i++){
73
74 LSA = location[i][0];
75 LSB = location[i][1];
76 LSC = location[i][2];
77 led = smgz[nol(i)];
78 delay(50);
79 led = 0;//消隐
80 }
81 }
82 }
83 void Timer0() interrupt 1
84 {
85 static int Timer0_times = 0;
86 TH0 = 0XFC;
87 TL0 = 0X18;
88 Timer0_times++;
89 if(Timer0_times == 987)
90 {
91 if(sec < 59)
92 sec++;
93 else if(min < 59)
94 {
95 min++;
96 sec = 0;
97 }
98 else
99 {
100 hour++;
101 min = sec = 0;
102 }
103 Timer0_times = 0;
104 }
105 }
106
107 void Int0() interrupt 0 //外部中断0的中断函数
108 {
109 delay(1000); //延时消抖
110 if(k3==0)
111 {
112 TR0 = ~TR0;
113 }
114 }
115
116 void Int1() interrupt 2 //外部中断1的中断函数
117 {
118 delay(1000); //延时消抖
119 if(k4==0)
120 {
121 TR0 = 0;
122 hour = min = sec = 0;
123
124 }
125 }
上一篇:基于51单片机的电子秒表设计
下一篇:改变高低电平占空比的一种方式
史海拾趣
|
不好意思了,刚好出去工作去了,没及时发帖,今早回来赶紧补,要不对不住SOSO姐了,上传几张图,器件是飞思卡尔的MMA7260,具有量程选择和睡眠使能引脚, X Y Z 三个方向的电压 &nb ...… 查看全部问答> |
|
公司想在开发板的基础上对嵌入式主板做些改动,主要是裁剪掉一些不必要的东西,然后换个LCD显示屏,有没有谁认识成都做嵌入式主板的团队或个人给推荐一下。顺便问问。这种项目一般收费是多少?… 查看全部问答> |
|
我想用EVC操作ACCESS数据库,使它能接收检测到的电流电压等值,并将值保存到数据库里面,要怎样做呢?我是新手,拜托各位指点,要是能说得详细点就更好了呵呵… 查看全部问答> |
|
我是一名交通控制研究生,我们实验室主要做交通控制方面的东西,最近老师让我做zigbee通信,而别的同学都在学习vxworks等对找工作很有帮助的东西,我们学校的学术才两年半,我不想浪费时间啊,想学成熟的技术,实用的,对找工作十分有帮助的。我不 ...… 查看全部问答> |
|
msp430f149 usart 谁能告诉我这个程序是什么意思啊 //***************************************************************************** // MSP-FET430P140 Demo - USART0, Ultra-Low Pwr UART 19200 Echo ISR, 32kHz ACLK // // Description: Echo a received character, ...… 查看全部问答> |
|
430也能玩嵌入式:Contiki内核在IAR+MSP430下移植(四) 但__volatile__不是IAR的关键字,还是有问题,索性改成这样(没加volatile会不会有副作用?): #ifdef __IAR_SYSTEMS_ICC__ #define asmv(arg) __asm(arg) #elif #define asmv(arg) __asm__ __volatile__(arg) #endif ...… 查看全部问答> |




