📄 main.lst
字号:
C51 COMPILER V6.23a MAIN 11/24/2002 12:03:54 PAGE 1
C51 COMPILER V6.23a, COMPILATION OF MODULE MAIN
OBJECT MODULE PLACED IN main.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE main.c BROWSE DEBUG OBJECTEXTEND
stmt level source
1 //汉显液晶模块HZ132-64演示程序
2 //该模块是一款使用简便,功能多样的汉显模块!
3 //模块的资料请到 http://www.laogu.com/product/wwwlcm/index.htm 查看
4 //本例仅用了简单的送数据到串口的方法就实现了文字的任意位置显示,作图,显示图片,t9兼容输入法等操作
5 //本例程由'51单片机世界http://www.mcu51.com'的版主丁丁编写,Email:mcu52@163.com
6 //2002年11月24日调试成功
7
8 #define uchar unsigned char
9 #define uint unsigned int
10 #define ulong unsigned long
11
12 extern char getbyte(void); //从接收缓冲区取一个byte,如不想等待则在调用前检测inbufsign是否为1。
13 extern putbyte(char c); //放入一个字节到发送缓冲区
14 extern putstring(uchar *puts); //发送一个定义在程序存储区的字符串到串口
15 extern putbytes(uchar *outplace,uint j);//放一串数据到发送缓冲区,需要定义发送的字节数
16 extern puthex(uchar c); //发送一个字节的hex码,分成两个字节发。
17 extern bit inbufsign; //串口接收到数据标志
18 #define CR putstring("\r\n") //发送一个回车换行
19 extern void serial_init (void); //串口初始化
20
21 //灰度
22 void lcd_light(uchar ch)
23 {
24 1 if(ch>0x3f)
25 1 return;
26 1 putbyte(0x1b);
27 1 putbyte(0x31);
28 1 putbyte(ch);
29 1 }
30
31 //清屏
32 void lcd_cls(void)
33 {
34 1 putbyte(0x1b);
35 1 putbyte(0x32);
36 1 }
37
38 // 设置光标位置
39 void lcd_cursor(uchar x, uchar y)
40 {
41 1 putbyte(0x1b);
42 1 putbyte(0x33);
43 1 putbyte(x);
44 1 putbyte(y);
45 1 }
46
47 //闪烁还是关闭光标
48 void lcd_showcursor(uchar attr)
49 {
50 1 putbyte(0x1b);
51 1 putbyte(0x34);
52 1 putbyte(attr);
53 1 }
54
55 //显示字符串
C51 COMPILER V6.23a MAIN 11/24/2002 12:03:54 PAGE 2
56 void lcd_string(uchar attr,uchar *string)
57 {
58 1 putbyte(0x1b);
59 1 putbyte(0x37);
60 1 putbyte(attr);
61 1 putstring(string);
62 1 putbyte(0x00);
63 1 }
64
65 //画点
66 void lcd_dot(uchar attr,uchar x,uchar y)
67 {
68 1 putbyte(0x1b);
69 1 putbyte(0x38);
70 1 putbyte(attr);
71 1 putbyte(x);
72 1 putbyte(y);
73 1 }
74
75 //画线
76 void lcd_line(uchar attr,uchar x0,uchar y0,uchar x1,uchar y1)
77 {
78 1 putbyte(0x1b);
79 1 putbyte(0x39);
80 1 putbyte(attr);
81 1 putbyte(x0);
82 1 putbyte(y0);
83 1 putbyte(x1);
84 1 putbyte(y1);
85 1 }
86
87 //画圆
88 void lcd_circle(uchar attr,uchar ox,uchar oy,uchar rx)
89 {
90 1 putbyte(0x1b);
91 1 putbyte(0x41);
92 1 putbyte(attr);
93 1 putbyte(ox);
94 1 putbyte(oy);
95 1 putbyte(rx);
96 1 }
97
98 // 画图片,*picture_data指向图片数据,图片数据的第一二个字节是图片宽度和图片高度
99 void lcd_picture(uchar attr,uchar x0,uchar y0,uchar *picture_data)
100 {
101 1 putbyte(0x1b);
102 1 putbyte(0x42);
103 1 putbyte(attr);
104 1 putbyte(x0);
105 1 putbyte(y0);
106 1 putbytes(picture_data,(((*picture_data)+7)/8)*(*(picture_data+1))+2);
107 1 }
108
109 //画ICON
110 void lcd_icon(uchar attr,uchar ch)
111 {
112 1 putbyte(0x1b);
113 1 putbyte(0x43);
114 1 putbyte(attr);
115 1 putbyte(ch);
116 1 }
117
C51 COMPILER V6.23a MAIN 11/24/2002 12:03:54 PAGE 3
118
119 //取数字组合的有效拼音组合,
120 //*num指向输入的数字,
121 //返回的有效拼音组合放在pinyin[6][8]
122 //函数返回返回有效拼音的个数
123 uchar lcd_num2pinyin(uchar *num, uchar pinyin[6][8])
124 {
125 1 ulong n=0;//超时用
126 1 uchar m,i,j,ch;
127 1 putbyte(0x1b);
128 1 putbyte(0x47);
129 1 putstring(num);
130 1 putbyte(0x00);
131 1
132 1 while(1)
133 1 {
134 2 if(inbufsign)//串口接收到了数据
135 2 {
136 3 if(getbyte()==0x1b)
137 3 {
138 4 m=getbyte();//查到的总条数
139 4 for(i=0;i<m;i++)
140 4 {
141 5
142 5 for(j=0;;j++)
143 5 {
144 6 ch=getbyte();
145 6 pinyin[i][j]=ch;
146 6 if(ch==0)break;
147 6 }
148 5 }
149 4 return(m);
150 4 }
151 3 }
152 2 n++; //超时计时加一
153 2 if(n>100000)return(0x00);//超时返回0
154 2 }
155 1
156 1 }
157
158 //取符合拼音字符串的10个汉字,page是取第几页
159 //返回的汉字串在hz[21];
160 void lcd_pinyin2hz(uchar page, uchar *pinyin,uchar *hz)
161 {
162 1 uchar i,ch;
163 1 ulong n=0;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -