pca_lcd.lst
来自「c8051f020单片机的例程」· LST 代码 · 共 322 行 · 第 1/2 页
LST
322 行
C51 COMPILER V7.20 PCA_LCD 09/14/2008 19:58:08 PAGE 1
C51 COMPILER V7.20, COMPILATION OF MODULE PCA_LCD
OBJECT MODULE PLACED IN ..\..\..\程序\PCA_LCD.obj
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE ..\..\..\程序\PCA_LCD.c BROWSE DEBUG OBJECTEXTEND PRINT(.\PCA_LCD.lst) OBJE
-CT(..\..\..\程序\PCA_LCD.obj)
line level source
1 #include <c8051f020.h> // SFR declarations
2 #include <intrins.h>
3 #include <stdio.h>
4 #define ulong unsigned long
5 #define uchar unsigned char
6 #define uint unsigned int
7
8
9
10 void SYSCLK_Init (void); /*时钟初始化*/
11 void handle(void);
12 void PORT_Init (void); //I/O口初始化
13 void PCA_Init (void); //PCA初始化
14 void PCA_ISR (void); //PCA中断服务子程序
15
16 void delay(ulong i); //延时
17 void disp (float f);
18 void LCD_Init(void);
19
20
21 unsigned int ii, jj ;
22 float data0,ti,freq; //ti(周期);freq(频率);
23
24 void main (void)
25 {
26 1 uint i;
27 1
28 1 /*关看门狗*/
29 1 WDTCN = 0xde;
30 1 WDTCN = 0xad;
31 1
32 1 SYSCLK_Init (); /*时钟初始化*/
33 1 PORT_Init (); /*IO口初始化*/
34 1 delay(1000);
35 1 for(i=0;i<100;i++);
36 1
37 1 while (1)
38 1 {
39 2
40 2 ii=0;
41 2 jj=0;
42 2 EA = 1; /*开中断*/
43 2 PCA_Init (); /*PCA初始化*/
44 2 while (jj<0x65); /*PCA发生中断100次 到否?;*/
45 2 PCA0CN=0x00; /*禁止PCA定时器/计数器*/
46 2 EIE1 = 0x00; /*禁止PCA0中断*/
47 2 handle(); /*处理数据*/
48 2 delay(1000);
49 2 disp(freq);
50 2 delay(385000);
51 2 delay(385000);
52 2 delay(385000);
53 2
54 2 }
C51 COMPILER V7.20 PCA_LCD 09/14/2008 19:58:08 PAGE 2
55 1 }
56
57 void handle(void)/*处理数据*/
58 {
59 1
60 1 data0=(PCA0CPH0*256+PCA0CPL0); /*处理来自PCA0CPH0,CA0CPL0的数据*/
61 1 ti=(data0+ii*65535)/2211.84; //单位 us
62 1 freq=(1000000)/ti; /*计算被测波形的频率*/
63 1
64 1 }
65 void PORT_Init (void) //I/O口初始化
66 {
67 1 XBR0 = 0x4c; //CEX0-->P0.3
68 1 XBR1 = 0X00;
69 1 XBR2 = 0x40; // Enable crossbar and weak pull-ups
70 1 // P0MDOUT |= 0x01; // enable TX0 as a push-pull output
71 1 P1MDOUT = 0xff; // P1口设为推挽方式
72 1 P2MDOUT = 0xff; // P2口设为推挽方式
73 1 P3MDOUT = 0xff; // P3口设为推挽方式
74 1 P74OUT = 0xC0; // P7口设为推挽方式
75 1
76 1 // P74OUT = 0XFF;
77 1 }
78 void PCA_Init (void) //PCA初始化
79 {
80 1 EIE1 = 0x08; /*使能PCA0中断*/
81 1 PCA0MD = 0x09; /*PCA定时器时钟源SYSCLK选择:01(1/12),03(1/4),09(1)*/
82 1 PCA0L = 0x00;
83 1 PCA0H = 0x00;
84 1 PCA0CPL0 = 0x00;
85 1 PCA0CPH0 = 0x00;
86 1 PCA0CPM0 = 0x21; /*PCA0正边沿捕捉方式,CCF0=1,允许辅捉/比较标志的中断申请*/
87 1 PCA0CN = 0x40; /*允许PCA定时器/计数器*/
88 1 }
89
90 /*PCA中断服务子程序*/
91 void PCA_ISR (void) interrupt 9
92 {
93 1 if (CCF0==1)
94 1 {
95 2 jj++; /*计中断次数*/
96 2 CCF0 = 0; /*清匹配中断标志*/
97 2 }
98 1 if (CF==0) //记时钟溢出次数,标志位
99 1 {
100 2 ii++;
101 2 CF = 0;
102 2 }
103 1
104 1 }
105
106
107 //-----------------------------------------------------------------------------
108 // SYSCLK配置
109 //-----------------------------------------------------------------------------
110 // 配置系统时钟使用外部晶振22.1184MHz
111
112 void SYSCLK_Init (void)
113 {
114 1 int a; // delay counter
115 1
116 1 OSCXCN = 0x67; // start external oscillator with
C51 COMPILER V7.20 PCA_LCD 09/14/2008 19:58:08 PAGE 3
117 1 // 22.1184MHz crystal
118 1 for (a=0; a < 256; a++) ; // XTLVLD blanking interval (>1ms)
119 1
120 1 while (!(OSCXCN & 0x80)) ; // Wait for crystal osc. to settle
121 1
122 1 OSCICN = 0x88; // select external oscillator as SYSCLK
123 1 // source and enable missing clock
124 1 // detector
125 1 }
126
127
128 /********************************************************
129 * 延时程序 *
130 ********************************************************/
131 void delay(ulong i)
132 {
133 1 while(i--);
134 1 }
135
136
137 //------LCD显示----------------
138 void disp (float f)
139 {
140 1 uint i,b1,b2;
141 1 ulong b,temp;
142 1 uchar c[8],d[6];
143 1 //"Temperature "
144 1 uchar xdata onedata[16]={"Frequency: "}; //第一行
145 1 //"温度值 "
146 1 uchar xdata twodata[16]={" "};//第二行
147 1 static unsigned char lcddata;
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?