?? vterminal_uart.lst
字號:
C51 COMPILER V7.20 VTERMINAL_UART 08/15/2006 14:47:13 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 D:\VTer_6448TFT_080_02\C51例程\VTerminal_uart\VTerminal_uart\
-VTerminal_uart.c BROWSE DEBUG OBJECTEXTEND PRINT(.\VTerminal_uart.lst) OBJECT(.\VTerminal_uart.obj)
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;
C51 COMPILER V7.20 VTERMINAL_UART 08/15/2006 14:47:13 PAGE 2
55 1 i = 0;
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
C51 COMPILER V7.20 VTERMINAL_UART 08/15/2006 14:47:13 PAGE 3
116 3 {DIS_Ellipse(CHX_DAT,CHY_DAT,4,4);} //如果沒有點擊到按鍵,則在按下觸摸屏的位置顯示一個小圓形。
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;
C51 COMPILER V7.20 VTERMINAL_UART 08/15/2006 14:47:13 PAGE 4
178 1 check_uart();
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 + -