基于tx-1c 51单片机中断使用及数码管显示的使用方法
扫描二维码
随时随地手机看文章
初学51单片机,中断快把我弄晕了,终于明白点了,怕忘了,贴在这里需要时方便自己找
锁存器电路
LED显示器连接电路
数码表编制方式:共8位从低4位到高4位,显示送高电平,如数字2二进制是0101 1011即16进制为:0x5B
C语言程序代码如下:
1 #include
2 #define uint unsigned int
3 #define uchar unsigned char
4
5 sbit dula = P2^6; //段选
6 sbit wela = P2^7; //位选
7 uchar time,num; //定时器0计数次数,数码管显示字符
8
9 void init(); //初始函数化定义
10 void desplay(); //显示函数定义
11 void delay(uint); //延时函数定义
12
13 //数字字码表 0-F
14 uchar code table[]={
15 0x3f,0x06,0x5b,0x4f,
16 0x66,0x6d,0x7d,0x07,
17 0x7f,0x6f,0x77,0x7c,
18 0x39,0x5e,0x79,0x71};
19
20 //主函数
21 void main()
22 {
23 init(); //初始化
24 desplay(); //显示
25 }
26
27 //初始化
28 void init()
29 {
30 TMOD = 1; //工作方式
31 TH0 = 0xEE;
32 TL0 = 0x00;
33 ET0 = 1; //打开定时器0中断
34 EA = 1; //打开总中断
35 TR0 = 1; //开始计时(数)
36 num = 1;
37 }
38 //数码管显示
39 void desplay()
40 {
41 wela = 1;
42 P0 = 0xFE;
43 wela = 0;
44 P0 = 0xff;
45 dula = 1;
46 P0 = 0x3F;
47 dula = 0;
48 while (1)
49 {
50 if (time==200)
51 {
52 time=0;
53 dula=1;
54 P0=table[num];
55 dula=0;
56 num++;
57 if(num==16)
58 num=0;
59 delay(10);
60 }
61 }
62 }
63 //定时器0中断
64 void time0() interrupt 1
65 {
66 TH0 = 0xEE;
67 TL0 = 0x00;
68 time++;
69 }
70 //显示延时
71 void delay(uint x)
72 {
73 uchar i;
74 while (x--)
75 for (i=0;i<110;i++);
76 }