📄 main.lst
字号:
C51 COMPILER V7.50 MAIN 08/08/2008 17:59:50 PAGE 1
C51 COMPILER V7.50, COMPILATION OF MODULE MAIN
OBJECT MODULE PLACED IN main.OBJ
COMPILER INVOKED BY: D:\Keil\C51\BIN\C51.EXE main.c BROWSE DEBUG OBJECTEXTEND
line level source
1 /****************************************************************************************************
2 * 文件名: main.c *
3 * Copyright (c) 2008 *********武汉理工大学信息工程学院电信系 *
4 * 创建人: 王康 *
5 * 日 期: 2008.8.8 *
6 * 修改人: 王康 *
7 * 日 期: *
8 * 描 述: 本工程完成了相位发生器的作用,能产生频率和相位均步进可调的两相方波信号,并对频率和相位进 *
9 * 行数码管显示.用定时计数器0来产生方波的频率值,用定时计数器1来产生相位值,4个按键用来调 *
10 * 频率和相位,频率步进1Hz,相位步进1度 *
11 * 接口定义: P1.0---frequency up *
12 * P1.1---frequency down *
13 * P1.2---phase up *
14 * P1.3---phase down *
15 * P0---Data Bus *
16 * P2---Bit choose *
17 * 版 本: KEIL uV2 *
18 ****************************************************************************************************/
19
20
21 //头文件
22 #include "reg52.h"
23
24
25 //宏定义
26 #define uchar unsigned char
27 #define uint unsigned int
28 #define ulong unsigned long
29
30
31 //接口定义
32 sbit freq_up = P1^0; //频率增加
33 sbit freq_down = P1^1; //频率减少
34 sbit phase_up = P1^2; //相位增加
35 sbit phase_down = P1^3; //相位减少
36 sbit OUT0 = P3^0; //波形输出1
37 sbit OUT1 = P3^1; //波形输出2
38
39
40 //变量声明
41 bit g_KeyFlg; //有键按下标志位
42
43 uchar g_KeyVal; //键值
44 uint g_FreqVal; //方波的频率值
45 uint g_PhsVal; //相位值
46 uchar g_TH0; //频率值缓存
47 uchar g_TL0;
48 uchar g_TH1; //相位值缓存
49 uchar g_TL1;
50 uchar g_cor; //计数器校正值
51 uchar dis_buf[8]; //显示缓冲
52
53 uchar code num[] = //数码管数据定义
54 {0x28,0x7E,0xA2,0x62,0x74,0x61,0x21,0x7A,0x20,0x60,0x30,0x25,0xA7,0x26,0xA1,0xB1,0xFF};
55 // 0 1 2 3 4 5 6 7 8 9 a b c d e f 空显
C51 COMPILER V7.50 MAIN 08/08/2008 17:59:50 PAGE 2
56
57
58 //延时子函数,1ms
59 void Delay(uchar z)
60 {
61 1 uchar x;
62 1 uchar y;
63 1 for(x = z; x > 0; x--)
64 1 for(y = 72; y > 0 ; y--);
65 1 }
66
67
68 //初始化子函数
69 void Initiate(void)
70 {
71 1 g_KeyFlg = 1; //有键按下标志位
72 1 g_KeyVal = 0; //键值
73 1 g_FreqVal = 100; //方波的初始频率值
74 1 g_PhsVal = 45; //初始相位值
75 1 OUT0 = 0;
76 1 OUT1 = 0;
77 1 TMOD = 0x11; //T0,T1均工作在定时方式1
78 1 IE = 0x8a; //开T0,T1和总中断
79 1 TR0 = 1; //打开T0定时
80 1 }
81
82
83 //显示子函数
84 void Display(void)
85 {
86 1 uchar i;
87 1 for(i = 0; i < 8; i++)
88 1 {
89 2 P2 = 0xff;
90 2 P2 = ~(0x01 << i);
91 2 P0 = num[dis_buf[i]];
92 2 Delay(5);
93 2 P2 = 0xff;
94 2 }
95 1 }
96
97
98 //键盘扫描子函数
99 void ScanKey()
100 {
101 1 uchar key;
102 1 P1 = 0xff;
103 1 key = P1;
104 1 if((P1 & 0x0f) < 0x0f)
105 1 {
106 2 Delay(5);
107 2 if((P1 & 0x0f) < 0x0f)
108 2 {
109 3 g_KeyFlg = 1;
110 3 while(P1 != 0xff)
111 3 {
112 4 Display();
113 4 }
114 3 switch(key & 0x0f)
115 3 {
116 4 case 0x0e: g_KeyVal = 1;
117 4 break;
C51 COMPILER V7.50 MAIN 08/08/2008 17:59:50 PAGE 3
118 4 case 0x0d: g_KeyVal = 2;
119 4 break;
120 4 case 0x0b: g_KeyVal = 3;
121 4 break;
122 4 case 0x07: g_KeyVal = 4;
123 4 break;
124 4 default: break;
125 4 }
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -