📄 2.lst
字号:
C51 COMPILER V8.02 2 08/07/2008 10:26:29 PAGE 1
C51 COMPILER V8.02, COMPILATION OF MODULE 2
OBJECT MODULE PLACED IN 2.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE 2.c BROWSE DEBUG OBJECTEXTEND
line level source
1 #include<reg51.h>
2 #define uchar unsigned char
3 #define uint unsigned int
4
5
6 //寄存器地址宏定义
7 #define DECODE_MODE 0x09 //译码控制寄存器
8 #define INTENSITY 0x0A //亮度控制寄存器
9 #define SCAN_LIMIT 0x0B //扫描界限寄存器
10 #define SHUT_DOWN 0x0C //关断模式寄存器
11 #define DISPLAY_TEST 0x0F //测试控制寄存器
12
13
14 //数码管位定义
15 #define D0 0x01 //Digit0
16 #define D1 0x02 //Digit1
17 #define D2 0x03 //Digit2
18 #define D3 0x04 //Digit3
19 #define D4 0x05 //Digit4
20 #define D5 0x06 //Digit5
21 #define D6 0x07 //Digit6
22 #define D7 0x08 //Digit7
23 //数组定义
24 uint Ad_Value[5];
25
26 //数码管不译码按段显示定义 七段+点格式 D7-D0 DP-A-B-C-D-E-F-G
27
28 //不带点 0 0x7e 1 0x30 2 0x6d 3 0x79 4 0x33
29 // 5 0x5b 6 0x5f 7 0x70 8 0xff 9 0x7c
30 // - 0x01 E 0x4f H 0x37 L 0x0e P 0x67 blank 0x00
31
32
33 //MAX7219管脚定义
34 sbit CLK=P1^0; //MAX7219串行时钟 13脚
35 sbit LOAD=P1^1; //MAX7219片选 ( CS ) 12脚
36 sbit DIN=P1^2; //MAX7219串行数据 1脚
37
38
39
40
41 //TLC2543定义四线制接口
42
43 sbit clk = P3^4; //时钟 18
44 sbit din = P3^5; //数据入口 17
45 sbit dout = P3^6; //数据出口 16
46 sbit cs = P3^7; //片选 15
47
48 //函数声明
49 void Initial(void); //MAX7219初始化函数
50 void Write7219(uchar address,uchar dat); //数码管
51
52 void delay(); //延时函数
53 uint AD_Conver(uchar channel); //AD转换
54
55
C51 COMPILER V8.02 2 08/07/2008 10:26:29 PAGE 2
56 //主函数
57 void main()
58 {
59 1 uint j;
60 1 uchar d0,d1,d2,d3;
61 1
62 1 Initial(); //MAX7219初始化
63 1
64 1 delay();
65 1 while(1)
66 1 {
67 2
68 2 Ad_Value[0] = AD_Conver(1); //0通道,转换数据12位,高位在前,低位在后
69 2
70 2 d3=Ad_Value[0]/1000;
71 2 d2=(Ad_Value[0]%1000)/100;
72 2 d1=Ad_Value[0]%100/10;
73 2 d0=Ad_Value[0]%10;
74 2
75 2 Write7219(D3,d3);
76 2 Write7219(D2,d2);
77 2 Write7219(D1,d1);
78 2 Write7219 (D0,d0);
79 2
80 2 for(j=0;j<45000;j++);
81 2
82 2 }
83 1 }
84 //--------------------------------------------------
85 // 函数名称: delay
86 // 函数功能: 延时55us
87 // 入口参数: 无
88 // 出口参数: 无
89 //--------------------------------------------------
90 void delay()
91 {
92 1 uchar i = 5;
93 1 while(i--);
94 1 }
95 //--------------------------------------------------
96 // 函数名称: AD_Conver
97 // 函数功能: AD转换
98 // 入口参数: 地址命令字
99 // 出口参数: AD值
100 //--------------------------------------------------
101 uint AD_Conver(uchar channel)
102 {
103 1 uchar i;
104 1 uint ad_value = 0;
105 1
106 1 clk = 0;
107 1 cs = 1;
108 1 delay();
109 1 cs = 0;
110 1
111 1 channel <<=4;
112 1 for (i = 0; i < 12; i++) //注意:在12个时钟周期的下降沿产生了数据输出
113 1 { //在前4个时钟周期内,TLC2543已经知道下一次将
114 2 if (dout) ad_value |= 1; //哪个通道做转换,在后8个时钟内就一直对此通道
115 2 din = (bit)(channel & 0x80); //进行采样,并保持到第12个时钟周期结束,此后才
116 2 clk = 1; //开始进行A/D转换,转换时间需要10us.
117 2 delay(); //在第4-8个时钟周期内输入的是命令控制字
C51 COMPILER V8.02 2 08/07/2008 10:26:29 PAGE 3
118 2 clk = 0; //可根据需要输入
119 2 channel<<=1;
120 2 ad_value<<=1;
121 2
122 2 }
123 1
124 1 clk =1;
125 1 ad_value>>=1;
126 1
127 1 return ad_value;
128 1
129 1 }
130
131
132
133
134
135 //地址、数据发送子程序
136
137 void Write7219(uchar address,uchar dat)
138 {
139 1 uchar i;
140 1 LOAD=0; //拉低片选线,选中器件
141 1 //发送地址
142 1 for (i=0;i<8;i++) //移位循环8次
143 1 {
144 2 CLK=0; //清零时钟总线
145 2 DIN=(bit)(address&0x80); //每次取高字节
146 2 address<<=1; //左移一位
147 2 CLK=1; //时钟上升沿,发送地址
148 2 }
149 1 //发送数据
150 1 for (i=0;i<8;i++)
151 1 {
152 2 CLK=0;
153 2 DIN=(bit)(dat&0x80);
154 2 dat<<=1;
155 2 CLK=1; //时钟上升沿,发送数据
156 2 }
157 1 LOAD=1; //发送结束,上升沿锁存数据
158 1 }
159
160
161 //MAX7219初始化,设置MAX7219内部的控制寄存器
162 void Initial(void)
163 {
164 1 Write7219(SHUT_DOWN,0x01); //开启正常工作模式(0xX1) 关断状态(0xX0)
165 1 Write7219(DISPLAY_TEST,0x00); //选择工作模式(0xX0) 测试状态(0xX1)
166 1 Write7219(DECODE_MODE,0xff); //选用全译码模式 (0xff) 不译码(0x00)
167 1 //只Digit0译码 (0x01) 只Digit0-3(0x0f)
168 1 Write7219(SCAN_LIMIT,0x03); //8只LED全用 (0xX7) 0xXN 用Digit0--DigitN
169 1 Write7219(INTENSITY,0x04); //设置初始亮度(0xX0--0xXF )
170 1 }
171
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 295 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 10 3
C51 COMPILER V8.02 2 08/07/2008 10:26:29 PAGE 4
IDATA SIZE = ---- ----
BIT SIZE = ---- ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -