📄 0832.lst
字号:
C51 COMPILER V7.50 0832 09/04/2008 19:29:05 PAGE 1
C51 COMPILER V7.50, COMPILATION OF MODULE 0832
OBJECT MODULE PLACED IN 0832.OBJ
COMPILER INVOKED BY: D:\Program Files\keil\C51\BIN\C51.EXE 0832.c BROWSE DEBUG OBJECTEXTEND
line level source
1 #include<reg52.h>
2 #define uchar unsigned char
3 #define uint unsigned int
4 #define waitus 1
5
6 sbit ADCLK=P1^5;
7 sbit ADIO=P1^4;
8 sbit ADCS=P1^6;
9 sbit D=P2^4;
10 sbit CLK=P2^5;
11 sbit STR=P2^6;
12
13 uchar adread(uchar ch);
14 void datacov(uchar recdata, uchar disnumber[]);
15 void delayms(uint ms);
16 void delayus(uchar us);
17 void display(uchar number[4]);
18
19 uchar segcode[18]={0x81,0xB7,0xC2,0x92,0xB4,0x98,0x88,0xB3,0x80,0x90,0xA0,0x8C,0xC9,0x86,0xC8,0xE8,0xFF,0x
-FE}; //0~F,全灭,负号
20 uchar segcode_com[18]={0x7E,0x48,0x3D,0x6D,0x4B,0x67,0x77,0x4C,0x7F,0x6F,0x5F,0x73,0x36,0x79,0x37,0x17,0x0
-0,0x01}; //0~F,全灭,负号
21
22 void main(void)
23 {
24 1 uchar recdata;
25 1 uchar disnumber[4];
26 1 while(1)
27 1 {
28 2 recdata=adread(0);
29 2 datacov(recdata,disnumber);
30 2 display(disnumber);
31 2 delayms(1000);
32 2 }
33 1 }
34
35 uchar adread(uchar ch)
36 {
37 1 uchar recdata;
38 1 uchar verifydata;
39 1 uchar i;
40 1 bit onebit;
41 1
42 1 ADCS=1;
43 1 ADIO=0;
44 1 ADCLK=0;
45 1
46 1 ADCS=0;
47 1 ADIO=1; //片选有效
48 1 delayus(waitus);
49 1
50 1 ADCLK=1; //第一个上升沿IO为高,起始信号
51 1 delayus(waitus);
52 1 ADCLK=0;
53 1
C51 COMPILER V7.50 0832 09/04/2008 19:29:05 PAGE 2
54 1 if(!ch)
55 1 {
56 2
57 2 ADIO=0;
58 2 delayus(waitus);
59 2 ADIO=1;
60 2 ADCLK=1;
61 2 delayus(waitus);
62 2 ADCLK=0;
63 2 delayus(waitus);
64 2 ADIO=0;
65 2 ADCLK=1; //依次在第2,3个上升沿发送1,0,选择通道0
66 2 delayus(waitus);
67 2 ADCLK=0;
68 2 }
69 1 else
70 1 {
71 2 ADCLK=0;
72 2 delayus(waitus);
73 2 ADIO=1;
74 2 ADCLK=1;
75 2 delayus(waitus);
76 2 ADCLK=0;
77 2 delayus(waitus);
78 2 ADIO=1;
79 2 ADCLK=1; //依次在第2,3个上升沿发送1,1,选择通道1
80 2 delayus(waitus);
81 2 ADCLK=0;
82 2 }
83 1
84 1 delayus(waitus);
85 1
86 1 for(i=0;i<8;i++)
87 1 {
88 2 ADCLK=1;
89 2 delayus(waitus);
90 2 ADIO=1; //不要忘了先赋1再读数!!!
91 2 ADCLK=0;
92 2 recdata=recdata<<1;
93 2 onebit=ADIO;
94 2 if(onebit)
95 2 recdata=recdata | 0x01;
96 2 }
97 1
98 1 if(onebit)
99 1 verifydata=verifydata | 0x80;
100 1
101 1 for(i=0;i<7;i++)
102 1 {
103 2 ADCLK=1;
104 2 delayus(waitus);
105 2 ADIO=1;
106 2 ADCLK=0;
107 2 verifydata=verifydata>>1;
108 2 onebit=ADIO;
109 2 if(onebit)
110 2 verifydata=verifydata | 0x80;
111 2 }
112 1
113 1 while(recdata != verifydata);
114 1
115 1 return(recdata);
C51 COMPILER V7.50 0832 09/04/2008 19:29:05 PAGE 3
116 1
117 1 }
118
119 void display(uchar number[4])
120 {
121 1 uchar i;
122 1 uchar j;
123 1 uchar temp;
124 1 STR=0;
125 1 for(i=0;i<4;i++) //四个数码管
126 1 {
127 2 temp=segcode[number[i]];
128 2 if(i==3)temp=temp & 0x7F; //为在3位上显示小数点
129 2 for(j=0;j<8;j++) // 每个数码管有8位,均显示为0;
130 2 {
131 3 D=temp & 0x01;
132 3 temp=temp>>1;
133 3 CLK=1;
134 3 CLK=0;
135 3 }
136 2 }
137 1 STR=1;
138 1 }
139
140 void delayus(uchar us) //延时5+2*N个机器周期
141 {
142 1 while(--us);
143 1 }
144
145 void delayms(uint ms)
146 {
147 1 uchar j;
148 1 while(ms--)
149 1 {
150 2 for(j=0;j<125;j++);
151 2 }
152 1 }
153
154 void datacov(uchar recdata,uchar disnumber[])
155 {
156 1 uint temp;
157 1 temp=recdata; //注意!这个地方必须先把recdata(uchar类型)的先赋给temp(uint类型)
158 1 temp=195*temp/10; //否则直接用recdata进行运算会造成数据的丢失!因为结果已经超出了uchar类型的范围!!!
159 1 disnumber[3]=temp/1000;
160 1 disnumber[2]=(temp-(disnumber[3]*1000))/100;
161 1 disnumber[1]=(temp-(disnumber[3]*1000)-(disnumber[2]*100))/10;
162 1 disnumber[0]=(temp-(disnumber[3]*1000)-(disnumber[2]*100)-(disnumber[1]*10));
163 1 }
164
165
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 485 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 36 17
IDATA SIZE = ---- ----
BIT SIZE = ---- 1
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -