📄 main.lst
字号:
C51 COMPILER V7.01 MAIN 05/08/2006 21:56:59 PAGE 1
C51 COMPILER V7.01, 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 #include<reg52.h>
2 #include<lcd12864.h>//包含128X64驱动程序
3 #include<hzzi.H> //包含图片和汉字库
4 sbit Key_Data =P2^1;//定义Keyboard数据端口引脚
5 sbit Key_CLK=P3^2; //中断端口,时钟线
6 static unsigned char KeyV=0X00; //键值
7 static unsigned char BF = 0; //标识是否有字符被收到
8 static unsigned char IntNum = 0; //中断次数计数
9 unsigned char lie,hang;//lie为列值, hang为行值
10 bit dx=0; //大小写标志 dx==1时大写状态
11 ////*************************\\\\\\\\\\\\\\\\\\\\\\\\\\\
*** WARNING C329 IN LINE 11 OF MAIN.C: single-line comment contains line-continuation
12
13 void Keyboard_out(void) interrupt 2//键盘中断处理 键值存储在 KeyV 中
14 {
15 1 if ((IntNum>0) && (IntNum <9))
16 1 {
17 2 KeyV = KeyV >> 1; //因键盘数据是低>>高,结合上一句所以右移一位
18 2 if (Key_Data==1) //当键盘数据线为1时
19 2 {KeyV = KeyV | 0x80;} //存储一位
20 2 }
21 1 IntNum++; //中断次数加一(中断一次接收一位数据)
22 1 if (IntNum > 10) //中断11次后数据发送完毕
23 1 {
24 2 IntNum = 0; //当中断11次后表示一帧数据收完,清变量准备下一次接收
25 2 BF = 1; //标识有字符输入完了
26 2 EA = 0; //关中断等显示完后再开中
27 2 }
28 1 }
29 void Decode() //键值处理
30 {
31 1 unsigned char data TempCyc;
32 1 signed char data k;
33 1 TempCyc=KeyV;
34 1 if(BF==1) //接收完一个有效数据时
35 1 {
36 2 BF=0; //准备下一次接收
37 2 switch ( TempCyc ) //键值与显示字符的对应关系
38 2 { //键值// //对应字符//
39 3 case 0x8A: k=0; break; //0
40 3 case 0x2C: k=1; break; //1
41 3 case 0x3C: k=2; break; //2
42 3 case 0x4C: k=3; break; //3
43 3 case 0x4A: k=4; break; //4
44 3 case 0x5C: k=5; break; //5
45 3 case 0x6C: k=6; break; //6
46 3 case 0x7A: k=7; break; //7
47 3 case 0x7C: k=8; break; //8
48 3 case 0x8C: k=9; break; //9
49 3 case 0x38: k=10; break; //a
50 3 case 0x64: k=11; break; //b
51 3 case 0x42: k=12; break; //c
52 3 case 0x46: k=13; break; //d
53 3 case 0x48: k=14; break; //e
54 3 case 0x56: k=15; break; //f
C51 COMPILER V7.01 MAIN 05/08/2006 21:56:59 PAGE 2
55 3 case 0x68: k=16; break; //g
56 3 case 0x66: k=17; break; //h
57 3 case 0x86: k=18; break; //i
58 3 case 0x76: k=19; break; //j
59 3 case 0x84: k=20; break; //k
60 3 case 0x96: k=21; break; //l
61 3 case 0x74: k=22; break; //m
62 3 case 0x62: k=23; break; //n
63 3 case 0x88: k=24; break; //o
64 3 case 0x9A: k=25; break; //p
65 3 case 0x2A: k=26; break; //q
66 3 case 0x5A: k=27; break; //r
67 3 case 0x36: k=28; break; //s
68 3 case 0x58: k=29; break; //t
69 3 case 0x78: k=30; break; //u
70 3 case 0x54: k=31; break; //v
71 3 case 0x3A: k=32; break; //w
72 3 case 0x44: k=33; break; //x
73 3 case 0x6A: k=34; break; //y
74 3 case 0x34: k=35; break; //z
75 3 case 0x98: k=63; break; //;
76 3 case 0xAA: k=65; break; //=
77 3 case 0xF2: k=68; break; //+
78 3 case 0x52: k=-16;break; //空格键
79 3 case 0xB0: k=101;break; //大小写控制键Caps lock
80 3 }
81 2 if(k==101) {dx=!dx;} //按下大小写控制键时 大小写标志取反
82 2 if(k==-16) //空格键按下时
83 2 {
84 3 lcd_putchar8x8(lie, hang, -16+'0'); //清除光标
85 3 lcd_putchar8x8(lie+8, hang, 79+'0');//光标移一位
86 3 }
87 2 if(dx==0) //小写状态时显示
88 2 {
89 3 lcd_putchar8x8(lie, hang, k+'0');//小写字符
90 3 lcd_putchar8x8(lie+8, hang, 79+'0');//光标
91 3 }
92 2 if(dx==1)//大写状态时显示
93 2 {
94 3 if(k>9 && k<=35)
95 3 {
96 4 lcd_putchar8x8(lie, hang, (k+26)+'0');//大写字符
97 4 lcd_putchar8x8(lie+8, hang, 79+'0');//光标
98 4 }
99 3 if(k>=0 && k<=9)
100 3 {
101 4 lcd_putchar8x8(lie, hang, (k-10)+'0');//数字键对应的符号
102 4 lcd_putchar8x8(lie+8, hang, 79+'0');//光标
103 4 }
104 3 }
105 2 if(lie==120) //写满一行
106 2 {lie=0;hang=hang+1;//换行
107 3 lcd_putchar8x8(lie, hang, 79+'0');}//光标下移
108 2 else {lie=lie+8;}
109 2 EA=1;
110 2 }
111 1 }
112 void delay(int x) //延时程序
113 { int i,j;
114 1 for(i=0;i<600;i++)
115 1 for(j=0;j<x;j++); }
116
C51 COMPILER V7.01 MAIN 05/08/2006 21:56:59 PAGE 3
117 void wlcome() //开机画面和欢迎界面
118 {
119 1 lcd_init(); //初始化液晶驱动硬件
120 1 lcd_clr(); //清屏
121 1 Disp_Img(yema);//显示一张128X64的点阵的图片
122 1 delay(200); //延时等待
123 1 lie=20;//列的值可以是0--127任意一个
124 1 hang=1;//行的值视情况而定
125 1 lcd_clr(); //清屏使残留的点不影响后面的显示
126 1 hz_disp(lie+0, hang, huan);//显示汉字'欢'
127 1 hz_disp(lie+16,hang, ying);//显示汉字'迎'
128 1 hz_disp(lie+32,hang, shi);//显示汉字'使'
129 1 hz_disp(lie+48,hang, yong);//显示汉字'用'
130 1 hz_disp(lie+64,hang, DP);//显示字母'DP'
131 1 hz_disp(lie+80,hang, Y);//显示字母'Y'
132 1 lie=8;hang=4;//换行 一行有8个点阵 一列只有一个
133 1 hz_disp(lie+24,hang, shu );//显示汉字'输'
134 1 hz_disp(lie+40,hang, ru);//显示汉字'入'
135 1 hz_disp(lie+56,hang, xi);//显示汉字'系'
136 1 hz_disp(lie+72, hang, tong);//显示汉字'统'
137 1 delay(200);lcd_clr();
138 1 lie=8; hang=0;
139 1 hz_disp(lie+16,hang, qing);//显示汉字'请'
140 1 hz_disp(lie+32,hang, shu);//显示汉字'输'
141 1 hz_disp(lie+48,hang, ru);//显示汉字'入'
142 1 hz_disp(lie+64,hang, zi);//显示汉字'字'
143 1 hz_disp(lie+80,hang, fu);//显示汉字'符'
144 1 for(lie=0;lie<128;lie++)//画一条直线
145 1 {set_point(lie,15);}
146 1 }
147 void main()
148 {
149 1 wlcome() ; //调用开机画面和欢迎界面子程序
150 1 IT1 = 1; //设外部中断1为下降沿触发
151 1 EA = 1; //开总中断
152 1 EX1=1; //开中断 1
153 1 hang=2; lie=0;//输入的字符从第2行 第0列开始显示
154 1 while(1)
155 1 {
156 2 Decode();
157 2 delay(50);
158 2 }
159 1 }
160
161
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 967 ----
CONSTANT SIZE = 1440 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 5 1
IDATA SIZE = ---- ----
BIT SIZE = 1 ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 1 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -