📄 main.lst
字号:
C51 COMPILER V8.02 MAIN 10/15/2008 21:14:04 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 简要说明:最大可显示16*16汉字
4 P0口接上行线,P2口接下行线,P3口接扫描线
5 P3.0接左屏译码器使能端(CS1)
6 P3.1接右屏译码器使能端(CS2)
7 编 写:JiangX.net
8 *********************************************************/
9 #include <AT89X52.h>
10 #include "ziku.h" //字库“再别康桥”
11 //#include "test_ziku.h" //字库“LED屏测试”,切换这两个字库可方便切换已存储于程序中的显示内容
12 #define uchar unsigned char
13 #define uint unsigned int
14 #define ulong unsigned long //宏定义
15 #define hang1 P0 //上行线
16 #define hang2 P2 //下行线
17 #define lie P1 //列线
18 #define CS1 P3_0 //接左屏154译码器使能端
19 #define CS2 P3_1 //接右屏154译码器使能端
20 #define sum sizeof(hanzi)/32 //自动计算汉字字数
21
22 /*****参数设置*****/
23 #define ziti 16 //字体大小(宽度)
24 #define light 50 //显示亮度
25 #define move_speed 25 //移动速度
26
27 uint k=0,j; //移位变量,k:移位个数
28 uint a=0; //用于软件延时
29 ulong s=(sum+1)*ziti; //s为全部列数
30 uchar disbuf[32][2]; //定义显示缓冲区(32行两列的二维数组以开辟2个16*16汉字的空间)
31 bit move_st; //移动标志
32
33 /*****可变延时*****/
34 void delay(void) //用来改变扫描延时以调节亮度
35 {
36 1 uchar i;
37 1 for(i=0;i<light;i++);
38 1 }
39
40 /*****初始化子程序*****/
41 void init(void) //定时器初始化,设置定时器0工作方式1,定时时间1ms
42 {
43 1 TMOD=0x1;
44 1 TH0=0xfc;
45 1 TL0=0x18;
46 1 }
47
48 /*****计数器中断程序*****/
49 void timer0(void) interrupt 1 //中断处理
50 {
51 1 TH0=0xfc;
52 1 TL0=0x18;
53 1 a++;
54 1 }
55
C51 COMPILER V8.02 MAIN 10/15/2008 21:14:04 PAGE 2
56 /*****汉字循环显示*****/
57 void run_move(void)
58 {
59 1 uchar k1,k2;
60 1 if(a>=move_speed) //move_speed控制移动速度
61 1 {
62 2
63 2 if(k>s-ziti-1)k=0; //整屏移动列数
64 2 k1=k/ziti;
65 2 k2=k%ziti;
66 2 j=ziti*2*k1+k2; //显示指针
67 2 k++;
68 2 move_st=1;
69 2 a=0;
70 2 }
71 1 }
72
73 /*****装载显示数据至缓冲区*****/
74 void load_hanzi(void)
75 {
76 1 uchar i;
77 1 run_move();
78 1 if(move_st)
79 1 {
80 2 for(i=0;i<31;i++)
81 2 {
82 3 disbuf[i][0]=disbuf[i+1][0];//移位处理
83 3 disbuf[i][1]=disbuf[i+1][1];//移位处理
84 3 }
85 2 disbuf[31][0]=hanzi[j];
86 2 disbuf[31][1]=(hanzi[ziti+j]);
87 2 move_st=0;
88 2 }
89 1 }
90
91 /*****扫描显示数据缓冲区的内容*****/
92 void display(void)
93 {
94 1 uchar i;
95 1 CS2=1; //关右屏
96 1 CS1=0; //开左屏
97 1 for (i=0;i<16;i++)
98 1 {
99 2 lie=i;
100 2 hang1=disbuf[i][0];
101 2 hang2=disbuf[i][1];
102 2 delay();
103 2 hang1=0;
104 2 hang2=0;
105 2 }
106 1 CS1=1; //关左屏
107 1 CS2=0; //开右屏
108 1 for (i=0;i<16;i++)
109 1 {
110 2 lie=i<<4;
111 2 hang1=disbuf[i+16][0];
112 2 hang2=disbuf[i+16][1];
113 2 delay();
114 2 hang1=0;
115 2 hang2=0;
116 2 }
117 1
C51 COMPILER V8.02 MAIN 10/15/2008 21:14:04 PAGE 3
118 1 }
119
120 /*****主程序*****/
121 void main (void)
122 {
123 1 init();
124 1 EA=1; //开中断
125 1 TR0=1;
126 1 ET0=1;
127 1 while(1)
128 1 {
129 2 load_hanzi();
130 2 display();
131 2 }
132 1 }
133
134 /*****END*****/
135 /*****欢迎到作者博客交流:http://www.jiangx.net*****/
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 313 ----
CONSTANT SIZE = 7648 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 74 ----
IDATA SIZE = ---- ----
BIT SIZE = 1 ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -