📄 main.lst
字号:
C51 COMPILER V8.02 MAIN 10/16/2008 12:31:20 PAGE 1
C51 COMPILER V8.02, 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 程序名称:LED3216点阵拉幕显示图片
3 简要说明:可显示分辨率为32X16的图片
4 P0口接上行线,P2口接下行线,P3口接扫描线
5 P3.0接左屏译码器使能端(CS1)
6 P3.1接右屏译码器使能端(CS2)
7 编 写:JiangX.net
8 *********************************************************/
9 #include<AT89X52.h>
10 #define uchar unsigned char //宏定义
11 #define hang1 P0 //上半屏行线
12 #define hang2 P2 //下半屏行线
13 #define lie P1 //扫描列线
14 #define CS1 P3_0 //接左屏译码器使能端,低电平使能
15 #define CS2 P3_1 //接右屏译码器使能端,低电平使能
16 #define num sizeof(pic)/64 //自动计算图片总数
17 uchar m=0,n=0; //m为扫描过程中的中间变量,n为显示指针
18 uchar a,b; //a、b分别为左半屏、右半屏的扫描变量
19
20 /*****参数调整项*****/
21 #define light 100 //显示亮度调节,数值不可过大,以不感到屏幕闪烁为准
22 #define speed 5 //卷动速度调节
23
24 /*******************************
25 图片取模:纵向取模,字节倒序
26 图片大小:32*16
27 *******************************/
28 uchar code pic[]={
29 0x00,0x00,0x08,0xF8,0xF8,0x08,0x00,0x00,0xF0,0xF8,0xFC,0xFC,0xFC,0xFC,0xF8,0xF0,
30 0xF8,0xFC,0xFC,0xFC,0xFC,0xF8,0xF0,0x00,0xF8,0xF8,0x00,0x00,0x00,0xF8,0xF8,0x00,
31 0x00,0x00,0x10,0x1F,0x1F,0x10,0x00,0x00,0x00,0x01,0x03,0x07,0x0F,0x1F,0x3F,0x7F,
32 0x3F,0x1F,0x0F,0x07,0x03,0x01,0x00,0x00,0x0F,0x1F,0x18,0x18,0x18,0x1F,0x0F,0x00,//I LOVE YOU
33
34 0xC0,0x40,0xC0,0x00,0xF0,0x08,0x00,0x00,0xF0,0x08,0x08,0x08,0xF0,0x00,0x00,0x00,
35 0x00,0x00,0x00,0xF0,0x08,0x08,0x08,0xF0,0x00,0x00,0x08,0xF0,0x00,0xC0,0x40,0xC0,
36 0x01,0x01,0x01,0x00,0x07,0x08,0x00,0x00,0x0F,0x00,0x00,0x00,0x0F,0x00,0x08,0x08,
37 0x08,0x08,0x00,0x0F,0x00,0x00,0x00,0x0F,0x00,0x00,0x08,0x07,0x00,0x01,0x01,0x01,//o(∩_∩)o
38
39 0xFC,0x04,0x04,0x04,0xFC,0x02,0xF2,0x12,0x12,0x12,0xF2,0x02,0x02,0xFE,0x02,0x00,
40 0xFC,0x04,0x04,0x04,0xFC,0x02,0xF2,0x12,0x12,0x12,0xF2,0x02,0x02,0xFE,0x02,0x00,
41 0x0F,0x02,0x02,0x02,0x07,0x00,0x07,0x02,0x02,0x02,0x27,0x40,0x80,0x7F,0x00,0x00,
42 0x0F,0x02,0x02,0x02,0x07,0x00,0x07,0x02,0x02,0x02,0x27,0x40,0x80,0x7F,0x00,0x00 //呵呵
43
44 };
45
46 /*****延时子程序*****/
47 void delay(void) //专门设置的延时程序用来改变扫描速度以方便调节亮度
48 {
49 1 uchar i;
50 1 for(i=0;i<light;i++);
51 1 }
52
53 /*****初始化子程序*****/
54 void init(void) //定时器初始化,设置定时器0工作方式1,定时时间5ms
55 {
C51 COMPILER V8.02 MAIN 10/16/2008 12:31:20 PAGE 2
56 1 TMOD=0x1;
57 1 TH0=0xec;
58 1 TL0=0x78;
59 1 }
60
61 /*****计数器中断程序*****/
62 void timer0(void) interrupt 1 //中断处理
63 {
64 1 uchar k; //定义变量k
65 1 TH0=0xec;
66 1 TL0=0x78;
67 1 k++; //定时时间到,初始变量加1
68 1 if(k>speed) {m++;k=0;}
69 1
70 1 if(m<=16) {a=m;b=0;} //扫描左半屏,不扫描右半屏
71 1 else {a=16;b=m-16;} //全屏扫描左半屏,扫描右半屏
72 1
73 1 if(m>32) b=16; //全屏扫描右半屏
74 1 //中间这段时间是为了看清楚整屏画面内容,稍作停顿
75 1 if(m==48) {m=0;n++;} //一幅图片卷动显示过程结束,载入下一幅图片
76 1
77 1 if(n>num-1) n=0; //所有图片显示完毕,回到第一幅图片
78 1 }
79
80 /*****显示子程序*****/
81 void display(void)
82 {
83 1 uchar i,j;
84 1 CS2=1; //关右屏
85 1 CS1=0; //开左屏
86 1 for(i=0;i<a;i++) //变量a决定了一次扫描左半屏列数
87 1 {
88 2 lie=i; //左屏列扫描信号输出
89 2 hang1=pic[i+64*n];
90 2 hang2=pic[i+64*n+32]; //行信号输出
91 2 delay();
92 2 hang1=0;
93 2 hang2=0;
94 2 }
95 1 CS1=1; //关左屏
96 1 CS2=0; //开右屏
97 1 for(j=0;j<b;j++) //变量b决定了一次扫描右半屏列数
98 1 {
99 2 lie=j<<4; //右屏列扫描信号输出
100 2 hang1=pic[j+64*n+16];
101 2 hang2=pic[j+64*n+48]; //行信号输出
102 2 delay();
103 2 hang1=0;
104 2 hang2=0;
105 2 }
106 1 }
107
108 /*****主程序*****/
109 void main(void)
110 {
111 1 init();
112 1 TR0=1;
113 1 ET0=1;
114 1 EA=1; //开中断
115 1 while(1)
116 1 {
117 2 display();
C51 COMPILER V8.02 MAIN 10/16/2008 12:31:20 PAGE 3
118 2 }
119 1 }
120
121 /*****END*****/
122 /*****欢迎到作者博客交流:http://www.jiangx.net*****/
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 283 ----
CONSTANT SIZE = 192 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 4 1
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 + -