📄 7843.lst
字号:
C51 COMPILER V6.23a 7843 06/23/2008 16:59:40 PAGE 1
C51 COMPILER V6.23a, COMPILATION OF MODULE 7843
OBJECT MODULE PLACED IN D:\51SERIAL\1\7843.OBJ
COMPILER INVOKED BY: C:\COMP51\C51.EXE D:\51SERIAL\1\7843.C DB SB OE
stmt level source
1 /*触摸屏芯片ADS7846/ADS7843驱动程序(C51)
2
3 [文件名] Touch.c
4 [功 能] 8051单片机驱动ADS7846/ADS7843芯片
5 [简 介] ADS7846/7843芯片 适合用在4线制触摸屏,它通过标准SPI协议和CPU通信,操作简单,精度高,当
6 触摸屏被按下时(即有触摸事件发生)则ADS7846向CPU发中断请求,CPU接到请求后,应延时一下再响应
7 其请求,目的是为了消除抖动使得采样更准确。如果一次采样不准确。
8 [原作者] 鞠春阳
9 [版 本] v1.1b
10 [最后修改时间] 2004年3月31日 9:11
11 [版 权] 哈尔滨众邦龙科技开发有限公司 单片机坐标网:www.mcuzb.com
12 */
13
14
15 #include <reg51.h>
16 #include <intrins.h>
17
18 #include<absacc.h>
19 #define COM8279 XBYTE [0x3fff]
20 #define DAT8279 XBYTE [0x3ffe]
21 #define COM8155 XBYTE [0x1f00]
22
23 #define uchar unsigned char
24 #define uint unsigned int
25
26 uchar code HELLO[8]={0,0,0,0x3f,0x38,0x38,0x79,0x76};
27 uchar code Table[]={0x3F,0x06,0x5B,0x4F,
28 0x66,0x6D,0x7D,0x07,
29 0x7F,0x6F,0x77,0x7C,
30 0x39,0x5E,0x79,0x71,
31 0x01,0x40,0x08}; //16:-up,17:-,18:_
32 uchar code keytable[]={ 0x00,0x04,0x08,0x0c,0x00,0x00,0x00,0x00,
33 0x01,0x05,0x09,0x0d,0x00,0x00,0x00,0x00,
34 0x02,0x06,0x0A,0x0e,0x00,0x00,0x00,0x00,
35 0x03,0x07,0x0b,0x0F};
36 uchar idata dismem[8]={0,0,0,0,0,0,0,0};
37 //uchar idata bcddis[6]={}
38 uchar KbHit,ucKey;
39 void D10us(unsigned char x)
40 {
41 1 unsigned char i; // Unit: 10uS, T=(ucTime*4+6)uS
42 1 for(i=0;i<x;i++);
43 1 }
44
45 void Dus(unsigned char x)
46 {
47 1 unsigned char i; // Unit: 10uS, T=(ucTime*4+6)uS
48 1 for(i=0;i<x;i++);
49 1 }
50 void Dms(unsigned char ucTime) // Unit: 1mS
51 {
52 1 unsigned char i;
53 1 for(i=0;i<ucTime;i++)
54 1 Dus(246);
55 1 }
C51 COMPILER V6.23a 7843 06/23/2008 16:59:40 PAGE 2
56 void D1s(unsigned char ucTime) // Unit: 1S
57 {
58 1 unsigned char i;
59 1 for(i=0;i<ucTime;i++)
60 1 {
61 2 Dms(250);
62 2 Dms(250);
63 2 Dms(250);
64 2 Dms(250);
65 2 }
66 1 }
67 void key() interrupt 2 using 1
68 {
69 1 EX1=0; //int0禁止
70 1 ucKey=DAT8279;
71 1 ucKey=keytable[ucKey];
72 1
73 1 KbHit=1;
74 1 EX1=1;
75 1 }
76
77
78
79 void Init8279(void)
80 {
81 1 uchar i;
82 1 COM8279=0xd0; //清除显示
83 1 do{ACC=COM8279;}
84 1 while(ACC^7==1) ;
85 1 COM8279=0x00; //键盘显示方式
86 1 Dus(1);
87 1 COM8279 = 0x34; // 写时钟分频系数
88 1 Dus(1);
89 1 COM8279= 0X90; //设定显示RAM地址,自动加1
90 1 for(i=0;i<8;i++)
91 1 {
92 2 DAT8279=HELLO[i];
93 2 Dus(1);
94 2 }
95 1 Dms(250);
96 1 }
97
98 void Dis8279(void)
99 {
100 1 uchar i,x;
101 1 COM8279=0xd0;
102 1 do{ACC=COM8279;}
103 1 while(ACC^7==1) ;
104 1 COM8279=0x90;
105 1 for(i=0;i<8;i++)
106 1 {
107 2 x=dismem[i];
108 2 DAT8279=Table[x];
109 2 // Dus(1);
110 2 }
111 1 }
112
113 sbit DCLK=P1^0;
114 sbit CS=P1^1;
115 sbit DIN=P1^2;
116 sbit DOUT=P1^4;
117 sbit BUSY=P1^3;
C51 COMPILER V6.23a 7843 06/23/2008 16:59:40 PAGE 3
118
119 void delay(unsigned int i)
120 {
121 1 while(i--);
122 1 }
123
124
125 void start() //SPI开始
126 {
127 1 DCLK=0;
128 1 CS=1;
129 1 DIN=1;
130 1 DCLK=1;
131 1 CS=0;
132 1 }
133
134 WriteCharTo7843(unsigned char num) //SPI写数据
135 {
136 1 unsigned char count=0;
137 1 DCLK=0;
138 1 for(count=0;count<8;count++)
139 1 {
140 2 num<<=1;
141 2 DIN=CY;
142 2 DCLK=0; _nop_();_nop_();_nop_(); //上升沿有效
143 2 DCLK=1; _nop_();_nop_();_nop_();
144 2 }
145 1 }
146
147
148 ReadFromCharFrom7843() //SPI 读数据
149 {
150 1 unsigned char count=0;
151 1 unsigned int Num=0;
152 1 for(count=0;count<12;count++)
153 1 {
154 2 Num<<=1;
155 2 DCLK=1; _nop_();_nop_();_nop_(); //下降沿有效
156 2 DCLK=0; _nop_();_nop_();_nop_();
157 2 if(DOUT) Num++;
158 2 }
159 1 return(Num);
160 1 }
161
162 void ZhongDuan() interrupt 0 //外部中断0 用来接受键盘发来的数据
163 {
164 1 unsigned int X=0,Y=0;
165 1 delay(10000); //中断后延时以消除抖动,使得采样数据更准确
166 1 start(); //启动SPI
167 1 // while(BUSY); //如果BUSY信号不好使可以删除不用
168 1 delay(2);
169 1 WriteCharTo7843(0x90); //送控制字 10010000 即用差分方式读X坐标 详细请见有关资料
170 1 // while(BUSY); //如果BUSY信号不好使可以删除不用
171 1 delay(2);
172 1 DCLK=1; _nop_();_nop_();_nop_();_nop_();
173 1 DCLK=0; _nop_();_nop_();_nop_();_nop_();
174 1 X=ReadFromCharFrom7843();
175 1 WriteCharTo7843(0xD0); //送控制字 11010000 即用差分方式读Y坐标 详细请见有关资料
176 1 DCLK=1; _nop_();_nop_();_nop_();_nop_();
177 1 DCLK=0; _nop_();_nop_();_nop_();_nop_();
178 1 Y=ReadFromCharFrom7843();
179 1 CS=1;
C51 COMPILER V6.23a 7843 06/23/2008 16:59:40 PAGE 4
180 1 }
181
182
183 main()
184 {
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -