代码改变世界

基于tx-1c 51单片机中断使用及数码管显示的使用方法

2010-08-07 17:32  李龙江  阅读(2005)  评论(0编辑  收藏  举报

初学51单片机,中断快把我弄晕了,终于明白点了,怕忘了,贴在这里需要时方便自己找

锁存器电路

LED显示器连接电路

数码表编制方式:共8位从低4位到高4位,显示送高电平,如数字2二进制是0101 1011即16进制为:0x5B

C语言程序代码如下:

 1 #include <REG52.H>
 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 }