📄 vterminal_uart.lst
字号:
C51 COMPILER V7.20 VTERMINAL_UART 08/18/2006 12:30:30 PAGE 1
C51 COMPILER V7.20, COMPILATION OF MODULE VTERMINAL_UART
OBJECT MODULE PLACED IN VTerminal_uart.OBJ
COMPILER INVOKED BY: C:\Program Files\Keil\C51\BIN\C51.EXE VTerminal_uart.c DEBUG OBJECTEXTEND
line level source
1 //智能显示终端串口(Uart)通信演示程序。
2 //
3 #include <reg51.h>
4 #include <stdio.h>
5 #include <string.h>
6 #define uchar unsigned char
7
8 uchar Fcolor; //背景色
9 uchar Bcolor; //前景色
10 unsigned short CHX_DAT,CHY_DAT; //触摸屏坐标变量(CHX_DAT:横坐标,CHY_DAT:纵坐标)
11 unsigned char Date[8]; //时间储存区
12 unsigned char touch_en=0;
13 unsigned char rx_count;
14 unsigned char rc_timer_en=0;
15 //===========================================
16 //函数声明
17 Lcd_Clr();
18 Read_time();
19 Read_date();
20 DIS_Ellipse(unsigned short x0,unsigned short y0,unsigned short xr,unsigned short yr);
21 DIS_Line(unsigned short x0,unsigned short y0,unsigned short x1,unsigned short y1,unsigned short with);
22 void Clr_squ(unsigned short x0,unsigned short y0,unsigned short width,unsigned short heith);
23 void inv_squ(unsigned short x0,unsigned short y0,unsigned short width,unsigned short heith);
24 void Set_time(uchar year,uchar month,uchar day,uchar hour,uchar minute,uchar second,uchar date);
25 AUTO_BMP(unsigned short x0,unsigned short y0,uchar N1,uchar N2,uchar T);
26 DIS_BMP(unsigned short x0,unsigned short y0,uchar N1);
27 void Dis_time(unsigned short x0,unsigned short y0,unsigned char i);
28 DIS_Value(unsigned short x0,unsigned short y0,unsigned short Va,unsigned char i);
29 DIS_String(unsigned short x0,unsigned short y0,char *fmt);
30
31 //============================================
32 //LCD 分辨率为 320X240 640X480 或800X600
33 #define LCD_XSIZE 640
34 #define LCD_YSIZE 480
35
36 main(void)
37 {
38 1 unsigned int i;
39 1
40 1 //对AT89C51(11.059MHz)的串口初始化
41 1 TMOD=0x20; //定时器1设置为模式2
42 1 SM0=0;
43 1 SM1=1; //设置串口为方式1,10位异步收发
44 1 PCON=PCON|0x80; //波特率加倍
45 1 TL1=0xFD;
46 1 TH1=0xFD; //波特率为19200
47 1 TR1=1; //启动定时器1
48 1 REN = 1; //允许串口接受使能
49 1
50 1 EA=1; //全局中断使能,(EA=0,关全局中断;EA=1,开全局中断)
51 1 ES = 1; //串口中断使能置1,允许串口中断
52 1
53 1 Fcolor = 0x0;
54 1 Bcolor = 0xff;
55 1 i = 0;
C51 COMPILER V7.20 VTERMINAL_UART 08/18/2006 12:30:30 PAGE 2
56 1
57 1 //显示终端在上电就绪时发送F0.用仿真器时不要检测F0.
58 1 //当把程序烧写到单片机上时,显示终端和单片机同时上电,所以一定
59 1 //要检测是否收到F0。以判断显示终端是否上电就绪
60 1 //while(!(i == 0xF0))
61 1 //{i = SBUF;}
62 1
63 1 Lcd_Clr(); //清除全屏。
64 1 //DIS_BMP(LCD_XSIZE-50,LCD_YSIZE-50,0);
65 1
66 1 for(i=10;i<40;i+=4)
67 1 {
68 2 DIS_Line(10,i,(LCD_XSIZE-10),i,1); //画直线
69 2 }
70 1 for(i=10;i<40;i+=4)
71 1 {
72 2 DIS_Ellipse(LCD_XSIZE/4*3,LCD_YSIZE/2,i,i); //画圆
73 2 }
74 1
75 1 DIS_String(0,0,"并行接口通信演示程序之一总线方式"); //显示字符
76 1 Dis_time(0,16,3);
77 1
78 1 DIS_String(0,32,"读取年月日:");
79 1 Read_date();
80 1 for(i=0;i<3;i++)
81 1 {
82 2 DIS_Value((6*16)+(i*24),32,Date[i+1],2);
83 2 }
84 1 DIS_String(0,48,"读取时分秒:");
85 1 Read_time();
86 1 for(i=0;i<3;i++)
87 1 {
88 2 DIS_Value((6*16)+(i*24),48,Date[i+5],2);
89 2 }
90 1
91 1 Set_time(05,11,9,17,22,30,3); //设置时间为2005年11月9日,17:22:30,星期三。
92 1 DIS_String(0,64,"X轴座标值:");
93 1 DIS_String(0,80,"Y轴座标值:");
94 1 Bcolor = 0x03;
95 1 Fcolor = 0xE0;
96 1 Clr_squ((LCD_XSIZE/4*1)-35,(LCD_YSIZE/2)-10,70,20);
97 1 DIS_String((LCD_XSIZE/4*1)-32,(LCD_YSIZE/2)-8,"按键测试");
98 1 AUTO_BMP(LCD_XSIZE-50,LCD_YSIZE-50,0,3,2);
99 1
100 1 while(1)
101 1 {
102 2 //判断是否有触摸事件发生。
103 2 if(touch_en==5)
104 2 {
105 3 DIS_Value((6*16),64,CHX_DAT,3);
106 3 DIS_Value((6*16),80,CHY_DAT,3);
107 3 if(CHX_DAT > ((LCD_XSIZE/4*1)-35) && CHX_DAT < ((LCD_XSIZE/4*1)+35) &&
108 3 CHY_DAT > ((LCD_YSIZE/2)-10) && CHY_DAT < ((LCD_YSIZE/2)+10)) //判断点击处是否在按键区域,如果是往下
-执行
109 3 {
110 4 inv_squ((LCD_XSIZE/4*1)-35,(LCD_YSIZE/2)-10,70,20); //反色按钮。
111 4 //用户可在这里加上自己的处理程序,实现按键功能。
112 4 while(touch_en!=2){} //等待放开按键。
113 4 inv_squ((LCD_XSIZE/4*1)-35,(LCD_YSIZE/2)-10,70,20); //反色按钮(恢复原来颜色)。
114 4 }
115 3 else
116 3 {DIS_Ellipse(CHX_DAT,CHY_DAT,4,4);} //如果没有点击到按键,则在按下触摸屏的位置显示一个小圆形。
C51 COMPILER V7.20 VTERMINAL_UART 08/18/2006 12:30:30 PAGE 3
117 3 touch_en = 0;
118 3 }
119 2 }
120 1 }
121 //=====================================================================
122 //查看一个字符是否传送完毕,当一个字符传送完毕后TI位会被硬件置1;
123 void check_uart(void)
124 {
125 1 while(TI==0)
126 1 {}
127 1 TI=0;
128 1 }
129 //=====================================================================
130 //指令头,每一条指令都规定为"0x81, command1,command2,Fcolor,Bcolor"
131 command_head(unsigned char command1,unsigned char command2)
132 {
133 1 TI=0;
134 1 SBUF= 0x81;
135 1 check_uart();
136 1 SBUF= command1;
137 1 check_uart();
138 1 SBUF= command2;
139 1 check_uart();
140 1
141 1 SBUF= Fcolor;
142 1 check_uart();
143 1 SBUF= Bcolor;
144 1 check_uart();
145 1 }
146 //=====================================================
147 //指令头+x0+y0
148 command_head2(uchar command1,uchar command2,unsigned short x0,unsigned short y0)
149 {
150 1 command_head(command1,command2);
151 1
152 1 SBUF= x0/100;
153 1 check_uart();
154 1 SBUF= x0%100;
155 1 check_uart();
156 1 SBUF= y0/100;
157 1 check_uart();
158 1 SBUF= y0%100;
159 1 check_uart();
160 1 }
161 //====================================================
162 //清屏子程序
163 Lcd_Clr()
164 {
165 1 command_head(0x43,0x4c); //总共发送了五个字节:0x81,0x43,0x4c,Fcolor,Bcolor
166 1 SBUF= 0x84;
167 1 check_uart();
168 1 }
169 //===================================================
170 // 清矩形
171 void Clr_squ(unsigned short x0,unsigned short y0,unsigned short width,unsigned short heith)
172 {
173 1 command_head2(0x43,0x58,x0,y0);
174 1
175 1 SBUF= width/100;
176 1 check_uart();
177 1 SBUF= width%100;
178 1 check_uart();
C51 COMPILER V7.20 VTERMINAL_UART 08/18/2006 12:30:30 PAGE 4
179 1 SBUF= heith/100;
180 1 check_uart();
181 1 SBUF= heith%100;
182 1 check_uart();
183 1
184 1 SBUF= 0x84;
185 1 check_uart();
186 1 }
187 //==========================================================
188 // 反色矩形
189 void inv_squ(unsigned short x0,unsigned short y0,unsigned short width,unsigned short heith)
190 {
191 1 command_head2(0x43,0x4e,x0,y0);
192 1
193 1 SBUF= width/100;
194 1 check_uart();
195 1 SBUF= width%100;
196 1 check_uart();
197 1 SBUF= heith/100;
198 1 check_uart();
199 1 SBUF= heith%100;
200 1 check_uart();
201 1
202 1 SBUF= 0x84;
203 1 check_uart();
204 1 }
205 //====================================================
206 //读取年月日
207 Read_date()
208 {
209 1 command_head(0x52,0x44);
210 1 SBUF= 0x84;
211 1 check_uart();
212 1 while(rc_timer_en != 5){}
213 1 rc_timer_en = 0;
214 1 }
215 //=====================================================
216 //读取时分秒
217 Read_time()
218 {
219 1 command_head(0x52,0x54);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -