📄 main.lst
字号:
C51 COMPILER V8.05a MAIN 08/08/2007 09:35:58 PAGE 1
C51 COMPILER V8.05a, COMPILATION OF MODULE MAIN
OBJECT MODULE PLACED IN main.obj
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE source\main.c BROWSE INCDIR(.\include) DEBUG OBJECTEXTEND PRINT(.\main.lst)
- OBJECT(main.obj)
line level source
1 //*************************************************************************************************
2 //*************************************************************************************************
3 //**<程序名>:简易函数发生器 **
4 //**<功能>:根据键盘控制产生10~500Hz的正弦信号。 **
5 //**<版本说明>:这是第1.3版,LCD显示的是采点变化时计时器溢出的次数。 **
6 //**<作者>:程沛 **
7 //**<完成时间>:2007年8月8日 **
8 //**<联系方式>:superyongzhe@163.com **
9 //*************************************************************************************************
10 //*************************************************************************************************
11
12
13 //*************************************************************************************************
14 //* *
15 //* ******************************头文件及宏定义************************** *
16 //* *
17 //*************************************************************************************************
18 #include "includes.h"
19
20 #define START P3_4 //0--开启DA转换;1--关闭DA转换。
21
22 #define TIME0H 0xFF //定时器0溢出时间:0.001ms
23
24 #define TIME1H 0x3C
25 #define TIME1L 0xB0 //定时器1溢出时间:50ms
26
27
28
29 //*************************************************************************************************
30 //* *
31 //* ********************************全局变量****************************** *
32 //* *
33 //*************************************************************************************************
34 //<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
35 //<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<DA转换>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
36 //<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
37 unsigned char uca_SinaCode[]={0x7F,0xA6,0xCA,0xE6,0xF8,0xFE,0xF8,0xE6,0xCA,0xA6,
38 0x7F,0x58,0x34,0x18,0x06,0x00,0x06,0x18,0x34,0x58};
39 //正弦函数采点。
40
41 unsigned char uc_DACount=0; //DA转换采点选择计数。
42
43 unsigned long ul_TimeCount=0; //DA转换定时器0计数。
44
45 unsigned long ul_TimeMax=50; //DA转换定时器0计数最大值,调整此值可以调整输出频率。
46
47
48
49 //<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
50 //<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<防抖动标志>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
51 //<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
52 bit b_KeyShock=0; //键盘防抖动标志位。
53 //当按键中断产生时,首先判断此位。
54 //0--执行键盘扫描及键码处理程序;1--不执行。
C51 COMPILER V8.05a MAIN 08/08/2007 09:35:58 PAGE 2
55
56 bit b_KillShock=0; //防抖标志清除位:0--不清除;1--清除。
57
58 unsigned char uc_KillCount=1; //抖动标志清除计数,使用定时器1。
59
60
61 //*************************************************************************************************
62 //* *
63 //* *****************************************主函数************************************* *
64 //* *
65 //*************************************************************************************************
66 void main()
67 {
68 1 vdInitialize(); //初始化LCD。
69 1 vWriteCMD(0x83); //输出提示信息。
70 1 vShowChar("Frequency:");
71 1 // vShowFrequency(ul_TimeMax);
72 1 vWriteCMD(0xC9);
73 1 vShowChar("Count");
74 1
75 1 P1=0x0F; //初始化键盘。
76 1
77 1 START=0; //开启AD转换。
78 1
79 1 //<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<外部中断0,用于开启键盘扫描及键码处理标志>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
80 1 IT0=1; // 中断方式:下降沿。
81 1 EX0=1; // 开启外部中断。
82 1 PX0=1;
83 1
84 1
85 1 //<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<初始化定时器>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
86 1 TMOD=0x02; //定时器0:模式2;定时器1:模式0。
87 1
88 1 //<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<定时器0,定时改变DA输出>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
89 1 TH0=TIME0H;
90 1 TR0=1;
91 1 ET0=1;
92 1
93 1 //<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<定时器1,用于防抖动标志清除>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
94 1 TH1=TIME1H;
95 1 TL1=TIME1L;
96 1 TR1=1; //开启定时器1。
97 1 ET1=1; //开定时器1中断。
98 1
99 1 EA=1; //开启总中断。
100 1
101 1 while(1);
102 1 }
103
104 //*************************************************************************************************
105 //* *
106 //* ****************************外部中断0,用于开启键盘扫描及键码处理******************** *
107 //* *
108 //*************************************************************************************************
109 void vINT0(void) interrupt 0
110 {
111 1 if(b_KeyShock==0)
112 1 {
113 2 vKeyProcess(ucKeyScan()); //开启键盘扫描标志。
114 2 b_KeyShock=1; //设置防抖动标志。
115 2 }
116 1 else b_KeyShock=0; //如果有抖动则不执行键扫描,恢复防抖动标志。
C51 COMPILER V8.05a MAIN 08/08/2007 09:35:58 PAGE 3
117 1
118 1 //<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<设置防抖动清除标志位 >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
119 1 if(b_KeyShock==1)
120 1 b_KillShock=1; //如果防抖动标志位开启则开启防抖动标志清除位,
121 1 //300ms后清除防抖动标志。
122 1
123 1 }
124
125
126 //*************************************************************************************************
127 //* *
128 //* **************************定时器0中断,定时改变DA输出***************************** *
129 //* *
130 //*************************************************************************************************
131 void vTimer0() interrupt 1
132 {
133 1 if(ul_TimeCount==ul_TimeMax) //此句,ul_TimeCount++;和ul_TimeCount=0;用于控制频率。
134 1 {
135 2 P0=uca_SinaCode[uc_DACount];
136 2
137 2 if(uc_DACount==19) //此句用于采点选择循环。
138 2 uc_DACount=0;
139 2 else
140 2 uc_DACount++;
141 2
142 2 ul_TimeCount=0;
143 2 }
144 1 else
145 1 ul_TimeCount++;
146 1 }
147
148
149 //*************************************************************************************************
150 //* *
151 //* ***************************定时器1中断,用于防抖动标志清除*************************** *
152 //* *
153 //*************************************************************************************************
154 void vTimer1(void) interrupt 3
155 {
156 1 if(b_KillShock==1)
157 1 {
158 2 if(uc_KillCount==5) //当防抖动标志位为1时,计时300ms后清除抖动标志位。
159 2 {
160 3 b_KeyShock=0;
161 3 b_KillShock=0;
162 3 uc_KillCount=1;
163 3 }
164 2 else uc_KillCount++;
165 2 }
166 1 //<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<恢复定时器1溢出时间>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
167 1 TH1=TIME1H;
168 1 TL1=TIME1L;
169 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 321 ----
CONSTANT SIZE = 17 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 30 ----
IDATA SIZE = ---- ----
C51 COMPILER V8.05a MAIN 08/08/2007 09:35:58 PAGE 4
BIT SIZE = 2 ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -