📄 yaoyao.lst
字号:
C51 COMPILER V8.18 YAOYAO 03/17/2010 16:04:46 PAGE 1
C51 COMPILER V8.18, COMPILATION OF MODULE YAOYAO
OBJECT MODULE PLACED IN yaoyao.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE yaoyao.c BROWSE DEBUG OBJECTEXTEND
line level source
1 /**********************************************************
2 程序名称:LED摇摇棒显示64*16像素
3 简要说明:外部中断方式INT0显示;取模方式:纵向取模、字节倒序,从上到下从左到右,纵向8点下高位
4
5 **********************************************************/
6 #include <AT89X52.h>
7 #define uchar unsigned char
8 #define uint unsigned int //宏定义
9 #define KEY P3_0 //定义画面切换按键
10 uchar KY; //KY作用在后面说明
11 uchar disp; //显示汉字指针
12 uchar pic=0,num=0,num1=0; //pic为按键次数;num为中断次数
13 void delay(uint z);//声明延时函数
14 uint a;//定义循环用变量
15 uchar code table[]={0xff,//全灭
16 0x00,0xff,0x00,0xff,0x00,0xff,0x00,0xff,
17 0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f,//依次逐个点亮
18 0xfe,0xfc,0xf8,0xf0,0xe0,0xc0,0x80,0x00,//依次逐个叠加
19 0x80,0xc0,0xe0,0xf0,0xf8,0xfc,0xfe,0xff,//依次逐个递减
20 0x7e,0xbd,0xdb,0xe7,0xe7,0xdb,0xbd,0x7e,//两边靠拢后分开
21 0x7e,0x3c,0x18,0x00,0x00,0x18,0x3c,0x7e,//两边叠加后递减
22 0x00,//全亮
23 };//定义循环用数据表格/*亮的现象:先是全灭,然后依次逐个点亮,然后依次逐个叠加,然后依次逐个递减,然后两边
-靠拢后分开,然后两边叠加后递减,最后全亮。循环!*/
24
25 void delay(uint z)//1ms延时子程序,通过z值改变延时时间
26 { uint x,y;
27 1 for(x=z;x>0;x--)
28 1 for(y=110;y>0;y--);
29 1 }
30
31
32 uchar code love[] = {
33 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
34 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFE,0x3F,0x00,0x20,0x00,0x20,0x00,0x20,
35 0x00,0x20,0x00,0x20,0x00,0x20,0x00,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0xF8,0x0F,
36 0x04,0x10,0x02,0x20,0x02,0x20,0x02,0x20,0x02,0x20,0x04,0x10,0xF8,0x0F,0x00,0x00,
37 0x00,0x00,0x00,0x00,0xFE,0x07,0x00,0x08,0x00,0x10,0x00,0x20,0x00,0x20,0x00,0x10,
38 0x00,0x08,0xFE,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0xFE,0x3F,0x82,0x20,0x82,0x20,
39 0x82,0x20,0x82,0x20,0x82,0x20,0x82,0x20,0x82,0x20,0x00,0x00,0x00,0x00,0x00,0x00,
40 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,/*LOVE*/
41 };
42
43 uchar code loveyou[] = {
44 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
45 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
46 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
47 0x78,0x00,0xFC,0x00,0xFE,0x01,0xFE,0x03,0xFE,0x07,0xFE,0x0F,0xFE,0x1F,0xFC,0x3F,
48 0xF8,0x7F,0xFC,0x3F,0xFE,0x1F,0xFE,0x0F,0xFE,0x07,0xFE,0x03,0xFE,0x01,0xFC,0x00,
49 0x78,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
50 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
51 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,/*心形图案*/
52 };
53
54 /*uchar code hehe[] = {
C51 COMPILER V8.18 YAOYAO 03/17/2010 16:04:46 PAGE 2
55 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
56 0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0x01,0x40,0x01,0xC0,0x01,0x00,0x00,0x00,0x00,
57 0xF0,0x0F,0x08,0x10,0x04,0x20,0x00,0x00,0x00,0x00,0xF0,0x3F,0x08,0x00,0x04,0x00,
58 0x04,0x00,0x04,0x00,0x08,0x00,0xF0,0x3F,0x00,0x00,0x00,0x00,0x00,0x20,0x00,0x20,
59 0x00,0x20,0x00,0x20,0x00,0x20,0x00,0x00,0x00,0x00,0xF0,0x3F,0x08,0x00,0x04,0x00,
60 0x04,0x00,0x04,0x00,0x08,0x00,0xF0,0x3F,0x00,0x00,0x00,0x00,0x04,0x20,0x08,0x10,
61 0xF0,0x0F,0x00,0x00,0x00,0x00,0xC0,0x01,0x40,0x01,0xC0,0x01,0x00,0x00,0x00,0x00,
62 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,/*呵呵o(∩_∩)o图案*/
63 //};
64 //*/
65 unsigned char code hanzi[] = {
66
67 //"徐",
68 0x00,0x02,0x10,0x01,0x88,0x00,0xC4,0xFF,
69 0x23,0x00,0x20,0x22,0x50,0x12,0x48,0x4A,
70 0x44,0x82,0xC3,0x7F,0x44,0x02,0x48,0x0A,
71 0x50,0x13,0x30,0x32,0x10,0x00,0x00,0x00,
72
73 //"红",
74 0x20,0x22,0x30,0x67,0xAC,0x22,0x63,0x12,
75 0x20,0x12,0x10,0x52,0x04,0x40,0x04,0x40,
76 0x04,0x40,0x04,0x40,0xFC,0x7F,0x04,0x40,
77 0x06,0x40,0x04,0x60,0x00,0x40,0x00,0x00,
78
79 //"霞",
80 0x10,0x00,0x0C,0x00,0xC4,0xFF,0x6D,0x15,
81 0x55,0x15,0x55,0x15,0xC5,0x95,0x3F,0x80,
82 0x45,0x4D,0x55,0x55,0x55,0x25,0x6D,0x55,
83 0xC4,0x4D,0x14,0xC0,0x0C,0x40,0x00,0x00,
84
85 //"我",
86 0x20,0x00,0x24,0x08,0x24,0x48,0x24,0x84,
87 0xFE,0x7F,0x23,0x02,0x22,0x21,0x20,0x10,
88 0xFF,0x09,0x20,0x06,0x22,0x1A,0xAC,0x61,
89 0x20,0x80,0x30,0xE0,0x20,0x00,0x00,0x00,
90
91 //"好",
92 0x10,0x40,0x10,0x22,0xF0,0x15,0x1F,0x08,
93 0x10,0x14,0xF0,0x63,0x80,0x00,0x82,0x00,
94 0x82,0x40,0x82,0x80,0xE2,0x7F,0x92,0x00,
95 0x8A,0x00,0xC6,0x00,0x80,0x00,0x00,0x00,
96
97 //"喜",
98 0x00,0x02,0x02,0x02,0x0A,0x02,0xEA,0xFA,
99 0xAA,0x4A,0xAA,0x4B,0xAA,0x4A,0xAF,0x4A,
100 0xAA,0x4A,0xAA,0x4B,0xAA,0x4A,0xEA,0xFE,
101 0x0B,0x0A,0x02,0x03,0x00,0x02,0x00,0x00,
102
103 //"欢",
104 0x04,0x10,0x34,0x08,0xC4,0x06,0x04,0x01,
105 0xC4,0x82,0x3C,0x8C,0x20,0x40,0x10,0x30,
106 0x0F,0x0C,0xE8,0x03,0x08,0x0C,0x08,0x10,
107 0x28,0x60,0x18,0xC0,0x00,0x40,0x00,0x00,
108
109 //"你",
110 0x40,0x00,0x20,0x00,0xF8,0xFF,0x07,0x00,
111 0x40,0x00,0x20,0x08,0x18,0x04,0x0F,0x43,
112 0x08,0x80,0xC8,0x7F,0x08,0x00,0x08,0x01,
113 0x28,0x06,0x18,0x0C,0x00,0x00,0x00,0x00,
114
115 //"!",
116 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
C51 COMPILER V8.18 YAOYAO 03/17/2010 16:04:46 PAGE 3
117 0x00,0x00,0x00,0x00,0x7C,0x10,0xFE,0x3B,
118 0xFE,0x3B,0x7C,0x10,0x00,0x00,0x00,0x00,
119 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
120 };
121
122 /*****函数声明*****/
123 void display1(void);
124 void display2(void);
125 void display3(void);
126 void display4(void);
127
128 /*****n(us)延时子程序*****/
129 void DelayUs(uint N)
130 {
131 1 uint x;
132 1 for(x=0; x<=N;x++);
133 1 }
134
135 /*****中断服务程序*****/
136 void intersvr0(void) interrupt 0 using 1
137 {
138 1 KY=~KY; //每个摇动来回水银开关会在摆幅两端分别产生下降沿中断,只提取其中一次(从左向右摇才显示)
139 1 if(KY==0)
140 1 {if(num==120) num=0;
141 2 num++; //计算中断次数
142 2 num1++;
143 2
144 2 switch(pic) //选择画面
145 2 {
146 3 case 0:{display1();}break;
147 3 case 1:{display2();}break;
148 3 case 2:{display3();}break;
149 3 // case 3:{display4();}break;
150 3 default:{display1();}
151 3 }
152 2 }
153 1 }
154
155 /*****显示子程序1(汉字)*****/
156 void display1(void)
157 {
158 1 uchar i;
159 1 if(num1>15){disp++;num1=0;} //12个汉字分为3次显示完(每次显示4个),每中断10次切换
160 1 if(disp>2)disp=0;
161 1 DelayUs(3500); //此处延时时间依各硬件差别而各不相同,试着调整使得显示内容居中即可
162 1 for(i=0;i<64;i++)
163 1 {
164 2 P0=~hanzi[disp*128+i*2];
165 2 P1=~hanzi[disp*128+i*2+1];
166 2 // P0=~hanzi[i*2];
167 2 //P1=~hanzi[i*2+1];
168 2 DelayUs(100);
169 2 }
170 1 }
171
172 /*****显示子程序2(LOVE)*****/
173 void display2(void)
174 {
175 1 uchar i;
176 1 DelayUs(3000);
177 1 for(i=0;i<64;i++)
178 1 {
C51 COMPILER V8.18 YAOYAO 03/17/2010 16:04:46 PAGE 4
179 2 P0=~love[i*2];
180 2 P1=~love[i*2+1];
181 2 DelayUs(120);
182 2 }
183 1 }
184
185 /*****显示子程序3(心形图案)*****/
186 void display3(void)
187 {
188 1 uchar i;
189 1 DelayUs(3000);
190 1 for(i=0;i<64;i++)
191 1 {
192 2 P0=~loveyou[i*2];
193 2 P1=~loveyou[i*2+1];
194 2 DelayUs(120);
195 2 }
196 1 }
197
198 /*****显示子程序4(呵呵o(∩_∩)o图案)*****/
199 /*void display4(void)
200 {
201 uchar i;
202 DelayUs(2000);
203 for(i=0;i<64;i++)
204 {
205 P0=~hehe[i*2];
206 P1=~hehe[i*2+1];
207 DelayUs(120);
208 }
209 }*/
210
211
212 void ceshi()
213 {
214 1 P1=table[a];//将a所在的table中的值赋给P1口
215 1 P0=table[a];
216 1 delay(200);//1S延时子程序
217 1 a++;//a的值加一
218 1 if(a==50)//测试a是否等于42
219 1 a=0;//给a赋值
220 1 }
221
222 /*****主函数*****/
223 void main(void)
224 {
225 1 IT0=1;
226 1 EX0=1;
227 1 EA=1; //开中断,下降沿中断
228 1 KY=0;
229 1 while(1) //主程序中只检测按键
230 1
231 1 { ceshi();
232 2 if(num<50) pic=0;
233 2 else if(50<num&&num<100) pic=1; //画面切换键按下
234 2 else if(100<num&&num<150) pic=2;
235 2 //else if(90<num&&num<120) pic=3;
236 2
237 2
238 2 }
239 1 }
240 /*****END*****/
C51 COMPILER V8.18 YAOYAO 03/17/2010 16:04:46 PAGE 5
241
242
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 426 ----
CONSTANT SIZE = 594 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 7 ----
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 + -