51 单片机:利用数码管显示数字

  1. 1. 实验 1 利用数码管显示数字

这学期我开了单片机的课,之后会将我的一些作业发自己网站上,希望能有用。

实验 1 利用数码管显示数字

本实验利用“共阳数码管”显示一串数字,利用中断方式每隔 1 秒更换一个数字。

代码如下,对其中的一些语句做出了标注。

说明:我所用的 STC 实验板中,p21 是“4 位共阳数码管”的第一位数字的控制引脚,P0 是数码管的公共极。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
// 数码管显示数字
//#include"head.h"
#include<reg51.h>
sbit P21=P2^1;
int i=0;
int j=0;
//int led[11]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};// 共阴 0~9
int led[11]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};// 共阳 0~9
int num[13]={1,2,3,4,5,6,7,8,9};
int counter=0;// 更换的数字
void main()
{
P21=0;

TMOD=0x01;//50ms
TH0=0x3c;// 高八位时间初值
TL0=0xb0;// 低八位时间初值

EA=1;// 中断总开关
ET0=1;//T0 中断子开关
TF0=0;//T0 溢出标志置 0
TR0=1;// 打开计时器
while(1);
}
void Timer0() interrupt 1
{
// 清除中断标志
TH0=0x3c;
TL0=0xb0;
// 进行 1s 的计数
counter++;
if(counter==20)
{
counter=0;
i=num[j++];
P0=led[i];
if(j>=9) j=0;
}
}