📄 vter_gpio.lst
字号:
C51 COMPILER V7.20 VTER_GPIO 07/29/2006 12:05:19 PAGE 1
C51 COMPILER V7.20, COMPILATION OF MODULE VTER_GPIO
OBJECT MODULE PLACED IN VTer_GPIO.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE VTer_GPIO.c BROWSE DEBUG OBJECTEXTEND
line level source
1 //智能显示终端并行接口通信演示程序之一通用IO口方式。
2
3 #include <reg51.h>
4 #include <stdio.h>
5 #include <string.h>
6 #define uchar unsigned char
7 //=====================================
8 //定义P1口为数据线,P3.1, P3.2,P3.3,P3.4,P3.5为控制线。
9 sbit CS0 =P3^1; //片选信号
10 sbit PINT =P3^2; //触摸屏事件信号
11 sbit DATA_INT =P3^3; //请求读数据信号,低电平有效。
12 sbit RD0 =P3^4; //读允许信号,低电平有效;
13 sbit WR0 =P3^5; //写允许信号,低电平有效;
14
15 uchar Fcolor; //背景色
16 uchar Bcolor; //前景色
17 unsigned short CHX_DAT,CHY_DAT;//触摸屏坐标
18 unsigned char Date[8]; //读时间值
19 //=====================================
20 //写一个数据子程序:
21 Write_Byte(uchar dc_data)
22 {
23 1 uchar i;
24 1 CS0 = 0;
25 1 P1 = dc_data; //数据dc_data写到P1口(即LCD控制板)。
26 1 WR0 = 0;
27 1 WR0 = 1;
28 1 //加入适当的空操作延时
29 1 //当采用更高速的单片机时应加入更多的空操作延时
30 1 //这里加上8个空操作延时,在AT89C51,22MHz下是完全没问题的。
31 1 for(i=0;i<8;i++){}
32 1 }
33 //=====================================
34 //读一个字节数据子程序:
35 uchar Read_Byte(void)
36 {
37 1 uchar i;
38 1 P1 = 0xff;
39 1 CS0 = 0;
40 1 RD0 = 0;
41 1 i = P1;
42 1 RD0 = 1;
43 1 return i;
44 1 }
45 //=====================================
46 /*外中断(DATA_INT脚)处理程序*/
47 void Ex1_int( ) interrupt 2 using 1
48 {
49 1 uchar temp1,temp2,temp3,temp4;
50 1
51 1 temp1 = Read_Byte();
52 1 temp2 = Read_Byte();
53 1 temp3 = Read_Byte();
54 1 temp4 = Read_Byte();
55 1 if(temp1 == 0xF8) //如果接收到的第一个字节是0xF8, 则收到的数据是年月日。
C51 COMPILER V7.20 VTER_GPIO 07/29/2006 12:05:19 PAGE 2
56 1 {
57 2 Date[0] = temp1;
58 2 Date[1] = temp2;
59 2 Date[2] = temp3;
60 2 Date[3] = temp4;
61 2 }
62 1 else if(temp1 == 0xF9) //如果接收到的第一个字节是0xF9, 则收到的数据是时分秒。
63 1 {
64 2 Date[4] = temp1;
65 2 Date[5] = temp2;
66 2 Date[6] = temp3;
67 2 Date[7] = temp4;
68 2 }
69 1 else //收到的数据触摸屏的座标值。
70 1 {
71 2 CHX_DAT = temp1 * 100;
72 2 CHX_DAT = temp2 + CHX_DAT;
73 2 CHY_DAT = temp3 * 100;
74 2 CHY_DAT = temp4 + CHY_DAT;
75 2 }
76 1 }
77 //===================================================
78 //函数声明
79 Lcd_Clr();
80 Read_time();
81 Read_date();
82 DIS_Ellipse(unsigned short x0,unsigned short y0,unsigned short xr,unsigned short yr);
83 DIS_Line(unsigned short x0,unsigned short y0,unsigned short x1,unsigned short y1,unsigned short with);
84 void Clr_squ(unsigned short x0,unsigned short y0,unsigned short width,unsigned short heith);
85 void inv_squ(unsigned short x0,unsigned short y0,unsigned short width,unsigned short heith);
86 void Set_time(uchar year,uchar month,uchar day,uchar hour,uchar minute,uchar second,uchar date);
87 AUTO_BMP(unsigned short x0,unsigned short y0,uchar N1,uchar N2,uchar T);
88 DIS_BMP(unsigned short x0,unsigned short y0,uchar N1);
89 void Dis_time(unsigned short x0,unsigned short y0,unsigned char i);
90 DIS_Value(unsigned short x0,unsigned short y0,unsigned short Va,unsigned char i);
91 DIS_String(unsigned short x0,unsigned short y0,char *fmt);
92 test_timer();
93 void push_windows(unsigned char mun_dc); //保存当前窗口至后台子程序
94 void pop_windows(unsigned char mun_dc); //恢复之前保存在后台的窗口
95 //=====================================================
96 //LCD 分辨率为 320X240 640X480 或800X600
97 #define LCD_XSIZE 320
98 #define LCD_YSIZE 240
99 //====================================================
100 main(void)
101 {
102 1 unsigned int i;
103 1
104 1 CS0 = 0;
105 1 PINT = 1;
106 1 Fcolor = 0x0;
107 1 Bcolor = 0xff;
108 1 i = 0;
109 1
110 1 //显示终端在上电就绪时发送F0.用仿真器时不要检测F0.
111 1 //当把程序烧写到单片机上时,显示终端和单片机同时上电,所以一定
112 1 //要检测是否收到F0。以判断显示终端是否上电就绪
113 1 while(!(i == 0xF0))
114 1 {i = Read_Byte();}
115 1
116 1 IT1 = 0; //外部中断1为电平触发方式。
117 1 EA=1; //全局中断使能,(EA=0,关全局中断;EA=1,开全局中断)
C51 COMPILER V7.20 VTER_GPIO 07/29/2006 12:05:19 PAGE 3
118 1 EX1 = 1; //外部中断使能置1,允许外部中断
119 1
120 1 Lcd_Clr(); //清除全屏。
121 1 //DIS_BMP(LCD_XSIZE-50,LCD_YSIZE-50,0);
122 1
123 1 for(i=10;i<40;i+=4)
124 1 {
125 2 DIS_Line(10,i,(LCD_XSIZE-10),i,1); //画直线
126 2 }
127 1 for(i=10;i<40;i+=4)
128 1 {
129 2 DIS_Ellipse(LCD_XSIZE/4*3,LCD_YSIZE/2,i,i); //画圆
130 2 }
131 1
132 1 DIS_String(0,0,"并行接口通信演示程序之一总线方式"); //显示字符
133 1 Dis_time(0,16,3);
134 1
135 1 DIS_String(0,32,"读取年月日:");
136 1 DIS_String(0,48,"读取时分秒:");
137 1 test_timer();
138 1
139 1 Set_time(05,11,9,17,22,30,3); //设置时间为2005年11月9日,17:22:30,星期三。
140 1 DIS_String(0,64,"X轴座标值:");
141 1 DIS_String(0,80,"Y轴座标值:");
142 1 Bcolor = 0x03;
143 1 Fcolor = 0xE0;
144 1 Clr_squ((LCD_XSIZE/4*1)-35,(LCD_YSIZE/2)-10,70,20);
145 1 DIS_String((LCD_XSIZE/4*1)-32,(LCD_YSIZE/2)-8,"按键测试");
146 1 AUTO_BMP(LCD_XSIZE-50,LCD_YSIZE-50,0,3,2);
147 1 while(1)
148 1 {
149 2 PINT = 1; //将PINT设为输入端口
150 2 //判断是否有触摸事件发生。
151 2 if(PINT ==0)
152 2 {
153 3 DIS_Value((6*16),64,CHX_DAT,3);
154 3 DIS_Value((6*16),80,CHY_DAT,3);
155 3 if(CHX_DAT > ((LCD_XSIZE/4*1)-35) && CHX_DAT < ((LCD_XSIZE/4*1)+35) &&
156 3 CHY_DAT > ((LCD_YSIZE/2)-10) && CHY_DAT < ((LCD_YSIZE/2)+10)) //判断点击处是否在按键区域,如果是往
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -