📄 wavegen.lst
字号:
C51 COMPILER V6.12 WAVEGEN 04/04/2009 15:07:09 PAGE 1
C51 COMPILER V6.12, COMPILATION OF MODULE WAVEGEN
OBJECT MODULE PLACED IN .\WaveGen.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE .\WaveGen.c DEBUG OBJECTEXTEND
stmt level source
1 /***************************PROGRAM FUNCTION*******************************/
2 // TLV5618产生从0-5V变化的电压(锯齿波),DA数据每次变化1位,即电压增量=1.22mV //
3 // 数码管显示预期电压值 //
4 // 预期电压值和万用表测得的电压值有出入 //
5 // 待改进:小数显示时的四舍五入问题,尝试其它小数显示的算法 //
6 // 模式设置:R1=1,SPD=1,PWR=0,R0=0--使用OUTPUT A进行输出 //
7 #include<reg52.h>
8 #define uCHAR unsigned char
9 #define uint unsigned int
10 sbit DACS1 = P2^5; //5618/5617 CHIP SELECT
11 sbit DASDA = P1^1;
12 sbit DASCL = P1^0;
13 sbit seg_latch=P2^6;
14 sbit bit_latch=P2^7;
15
16 uCHAR code table[]={0x3f,0x03,0x6D,0x67,
17 0x53,0x76,0x7E,0x23,
18 0x7F,0x77,0x7B,0x5E,
19 0x3C,0x4F,0x7C,0x78};//my code
20 void SendDA(uCHAR data0,uCHAR data1,bit data2); //发送待进行DA转换的数据
21 void delay(uint z);
22 void SendDA(uCHAR data0,uCHAR data1,bit data2) //bit变量只取0或1
23 {
24 1 unsigned char i;
25 1 DASDA=1;
26 1 DASCL=1;
27 1 DACS1 = 0;
28 1 if(data2)
29 1 {
30 2 data0|=0x40; //SPD=1:fast mode
31 2 }//data2决定工作模式
32 1 else
33 1 {
34 2 data0|=0xc0; //R1=1,SPD=1
35 2 }
36 1 //data0中高四位为模式设置位,低四位为数据位
37 1 for (i=0;i<8;i++)
38 1 {
39 2 DASDA=(bit)(data0&0x80);//给一位数据
40 2 DASCL=1;
41 2 DASCL=0; //给一个脉冲
42 2 data0<<=1;//移到下一位
43 2 }
44 1 //data1为12位数据的低8位
45 1 for (i=0;i<8;i++)
46 1 {
47 2 DASDA=(bit)(data1&0x80);
48 2 DASCL=1;
49 2 DASCL=0;
50 2 data1<<=1;
51 2 }
52 1 DASDA= 1; //为下次作准备
53 1 DACS1= 1; //为下次作准备
54 1 }
55 void DA(uint outputa)
C51 COMPILER V6.12 WAVEGEN 04/04/2009 15:07:09 PAGE 2
56 {
57 1 SendDA(outputa/256,outputa%256,0);//输出a
58 1 //sendda(outputb/256,outputb%256,1);//输出b
59 1 }
60 void display(unsigned int num) //显示程序 1024->1.25V
61 {
62 1 float temp;
63 1 uCHAR qianwei,baiwei,shiwei,gewei;
64 1 temp=(5.0/4096)*1000;//放大1000倍,基本量1.22mV
65 1 temp*=num;
66 1 num=(uint)(temp); //强制类型转换
67 1
68 1 qianwei=num/1000;
69 1 baiwei=num%1000/100;
70 1 shiwei=num%100/10;
71 1 gewei=num%10;
72 1
73 1 P0=table[qianwei]|0x80; //添加小数点
74 1 seg_latch=1;
75 1 seg_latch=0;
76 1 P0=0xfe; //led1有效,显示千位
77 1 bit_latch=1;
78 1 bit_latch=0;
79 1 delay(5);
80 1
81 1 P0=table[baiwei];
82 1 seg_latch=1;
83 1 seg_latch=0;
84 1 P0=0xfd; //led2有效,显示百位
85 1 bit_latch=1;
86 1 bit_latch=0;
87 1 delay(5);
88 1
89 1 P0=table[shiwei];
90 1 seg_latch=1;
91 1 seg_latch=0;
92 1 P0=0xfb; //led3有效,显示十位
93 1 bit_latch=1;
94 1 bit_latch=0;
95 1 delay(5);
96 1
97 1 P0=table[gewei];
98 1 seg_latch=1;
99 1 seg_latch=0;
100 1 P0=0xf7; //led4有效,显示个位
101 1 bit_latch=1;
102 1 bit_latch=0;
103 1 delay(5);
104 1 }
105
106 void delay(uint z)
107 {
108 1 uint x,y;
109 1 for(x=z;x>0;x--)
110 1 for(y=113;y>0;y--);
111 1 }
112 void main()
113 {
114 1 while(1)
115 1 {
116 2 unsigned int i;
117 2 uCHAR k;
C51 COMPILER V6.12 WAVEGEN 04/04/2009 15:07:09 PAGE 3
118 2 for(i=0;i<4096;i++)
119 2 {
120 3 DA(i);//12位的,范围0-4096
121 3 for(k=0;k<20;k++)
122 3 {
123 4 display(i); //显示预期电压值
124 4 }
125 3 }
126 2 //delay(10); //这儿不用延时,不然会造成显示闪烁
127 2 }
128 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 370 ----
CONSTANT SIZE = 16 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = ---- 12
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 + -