📄 ad114read2.lst
字号:
C51 COMPILER V7.09 AD114READ2 08/02/2005 08:59:55 PAGE 1
C51 COMPILER V7.09, COMPILATION OF MODULE AD114READ2
OBJECT MODULE PLACED IN AD114Read2.OBJ
COMPILER INVOKED BY: c:\Keil\C51\BIN\C51.EXE AD114Read2.c BROWSE DEBUG OBJECTEXTEND
line level source
1 /*AD114单片机从cpld读取ad114转化的数据,显示到led,enter键控制*/
2 //软件滤波:连续采样20次,取平均值
3 #include<reg51.h>
4 #include<absacc.h>
5 #include <intrins.h>
6 #define unchar unsigned char
7 #define unint unsigned int
8 #define DisCmd XBYTE [0xC100] //7218控制字地址
9 #define DisData XBYTE [0xC000] //7218数据口地址
10 #define scode 0xb0 //7218软件译码方式命令字
11 #define bcode 0x90 //B码译码方式命令字
12 #define hexcode 0xd0 //软件译码方式命令字
13 #define unchar unsigned char
14 //MAX191工作在ROM Mode 方式
15 //对外中断1采用了查询方式,中断方式还得再试验
16 //12位AD精度有了,可是速度是一个问题,
17 //按现在的用法,转换时间为12uS,再算上数据处理时间(包括数据存储、显示等),对模拟信号的采样频率估计最快也
-就是
18 //几十KHz(只考虑转换时间和存储在RAM中所需时间)
19 sbit P3_3=P3^3;
20 sbit P3_7=P3^7;
21 unchar xdata *AD;
22 unint voltage;
23 unchar keynum;
24 unchar flag=0;
25 unchar dot=0; //小数点显示位置
26 char distab[8]={0x13,0x13,0x14,0x00,0x12,0x12,0x0e,0x11} ; // 要显示的内容 hello-pp
27
28 char code ledtab[]={ 0xfb,0xb0,0xed,0xf5,0xb6,0xd7,0xdf,0xf0,
29 //0, 1, 2, 3, 4, 5, 6, 7
30 0xff,0xf7,0xfe,0x9f,0xcb,0xbd,0xcf,0xce,
31 //8 ,9 ,a ,b ,c ,d ,e ,f
32 0x80,0xbe,0x8b,0xee,0x84,0xbb };
33 //熄灭 H L P - u
34 void delay1s()
35 {
36 1 unint i=1000,j=5000;
37 1 for(i;i>0;i--)
38 1 for(j;j>0;j--);
39 1 }
40 void delay20ms()
41 {
42 1 unint i=1000;
43 1 for(i;i>0;i--);
44 1
45 1 }
46 void display()
47 {
48 1 unchar i;
49 1 DisCmd=scode; //采用软件译码
50 1 for(i=0;i<8;i++) //将distab中的数据送如7218
51 1 {
52 2 if((i==dot)&dot)
53 2 DisData=ledtab[distab[i]]+0x80; //查表转化并将字型送入7218
54 2 else
C51 COMPILER V7.09 AD114READ2 08/02/2005 08:59:55 PAGE 2
55 2 DisData=ledtab[distab[i]]; //查表转化并将字型送入7218
56 2 }
57 1 for(i=1000;i>0;i--);
58 1 }
59 AD114Start()
60 {
61 1
62 1 long adin=0;
63 1 unint d;
64 1 unchar xdata *AD;
65 1 unchar i=10;
66 1 for(i;i>0;i--) //连续采样十次,取平均值
67 1 {
68 2 AD=0xA000;
69 2 d=*AD;
70 2 adin+=d;
71 2 //delay1s();
72 2 }
73 1 // adin=*AD;
74 1 adin=adin/10;
75 1 d=(adin*5000)/255; //实际电压值为4.935v;左边参考电压如为2.375,就换成2375
76 1 voltage=d;
77 1 distab[3]=d/1000;
78 1 d=d%1000;
79 1 distab[2]=d/100;
80 1 d=d%100;
81 1 distab[1]=d/10;
82 1 d=d%10;
83 1 distab[0]=d;
84 1 //distab[7]=0x10;
85 1 distab[6]=0x10;
86 1 distab[5]=0x10;
87 1 distab[4]=0x10;
88 1 //distab[0]=0x15;
89 1 AD=0xA000;
90 1 }
91 //**************************************************************************************
92 void intt0() interrupt 0
93 {
94 1 EX0=0; //关键盘中断,禁止相应其他按键
95 1 dot=3;
96 1 keynum=P1; //从p1口读入键盘值
97 1 keynum=keynum&0x0f; //取低四位;
98 1 if(keynum==0x0f)
99 1 flag=!flag;
100 1 if(flag)
101 1 distab[7]=0x00;
102 1 else
103 1 distab[7]=0x13;
104 1
105 1 EX0=1; //开中断
106 1 }
107
108 void main()
109 {
110 1 EX0=1;
111 1 EA=1;
112 1 display();
113 1 while(1)
114 1 {
115 2 if(flag)
116 2 AD114Start();
C51 COMPILER V7.09 AD114READ2 08/02/2005 08:59:55 PAGE 3
117 2 display();
118 2 delay1s();
119 2 }
120 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 423 ----
CONSTANT SIZE = 22 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 15 6
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 + -