📄 main.lst
字号:
C51 COMPILER V8.08 MAIN 07/02/2012 22:54:48 PAGE 1
C51 COMPILER V8.08, COMPILATION OF MODULE MAIN
OBJECT MODULE PLACED IN main.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE main.c BROWSE DEBUG OBJECTEXTEND
line level source
1 //main.c
2 #include <reg51.h>
3
4 //定义端口寄存器
5 sfr P0M0 = 0X93;
6 sfr P0M1 = 0X94;
7 sfr P1M0 = 0X91;
8 sfr P1M1 = 0X92;
9 sfr P2M0 = 0X95;
10 sfr P2M1 = 0X96;
11 sfr P3M0 = 0Xb1;
12 sfr P3M1 = 0Xb2;
13
14 #define fosc 11059200L
15 #define T0_50ms (65536 - 50000 * ( fosc / 12000000L)) //50ms定时参数
16 //以下是各音符对应的T1初值
17 unsigned char th1[7] = {0xDD,0xE0,0xE4,0xE6,0xE9,0xEB,0xED};
18 unsigned char tl1[7] = {0x9A,0xE0,0xB2,0x3A,0x0A,0x8C,0xC7};
19
20 unsigned char cnt_int0;//拍子定时计数
21 unsigned char current_pitch;//当前输出的音调
22
23 sbit voice=P0^0; //蜂鸣器发声
24
25 void init_port()
26 {
27 1 //配置P0.0模式为开漏输出
28 1 P0M1 = 0x01;
29 1 P0M0 = 0x01;
30 1 }
31
32 void init_timer()
33 {
34 1 TMOD = 0X01; //定时器0模式1,16bit
35 1 TH0 = T0_50ms >> 8; //TH0 = T0_50ms / 256
36 1 TL0 = T0_50ms; //TL0 = T0_50ms % 256
37 1 ET0 = 1; //允许T0中断
38 1
39 1 TMOD |= 0X10; //定时器1模式1,16bit
40 1 TH1 = th1[0]; //do的频率
41 1 TL1 = tl1[0];
42 1 ET1 = 1; //允许T1中断
43 1 }
44
45 //定义延时函数
46 void ms_delay(unsigned int t)
47 {
48 1 unsigned int i;
49 1 for (t; t > 0; t--) //外层循环t次
50 1 for (i = 110;i > 0; i--) //内层循环110次
51 1 ;
52 1 }
53
54 void Timer0_interrupt() interrupt 1
55 {
C51 COMPILER V8.08 MAIN 07/02/2012 22:54:48 PAGE 2
56 1 TH0 = T0_50ms >> 8; //重装初值
57 1 TL0 = T0_50ms;
58 1
59 1 cnt_int0++;
60 1
61 1 if (cnt_int0 >=12) //600ms到
62 1 {
63 2 cnt_int0=0;
64 2 current_pitch++;//音调 +1
65 2 if (current_pitch >=7) //1~7循环
66 2 current_pitch = 1;
67 2 }
68 1 }
69
70 void Timer1_interrupt() interrupt 3
71 {
72 1 TH1 = th1[current_pitch-1]; //装载音调的频率
73 1 TL1 = tl1[current_pitch-1];
74 1
75 1 voice =~voice;
76 1 }
77
78 main()
79 {
80 1 ms_delay(100);
81 1 cnt_int0 = 0;
82 1 current_pitch=1;
83 1 voice=0;
84 1
85 1 init_port();
86 1 init_timer();
87 1
88 1 EA = 1;//开总中断
89 1 TR0 = 1;//启动T0
90 1 TR1 = 1;//启动T1
91 1
92 1 while(1)
93 1 {
94 2
95 2 }
96 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 160 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 16 ----
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 + -