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