上节讲了LED驱动芯片的介绍,这次给大家推荐一款触摸芯片,我要介绍的是来自合泰的BS814A-2这款触摸芯片,他与上节将的通讯时一样的,它也是IIC通讯协议进行通讯的,具体如何使用请查阅它的DataSheep!
附上电路图
由于STC8G1K17它内部只有一组硬件IIC,这组已经被LED驱动芯片使用了,所以这次就的使用模拟IIC程序来进行通讯了,IIC的通讯协议这里不再强调了,需要了解的请转到http://www.51hei.com/bbs/dpj-210572-1.html
以下为单片机源程序
- #include "main.h"
- #define TOU_SDA P34
- #define TOU_CLK P35
- extern uint8_t Read_Touch(void);
- KEY_t KEY =
- {
- Read_Touch,
- };
- //检测是否被触摸,被触摸及读取触摸数据
- static uint8_t Read_TouchData(void)
- {
- uint8_t i;
- uint8_t Touch_dat=0x00;
-
- TOU_SDA = 1;
- TOU_CLK = 1;
- if(TOU_SDA==0)
- {
- TOU_CLK = 0;
- for(i=0;i<8;i++)
- {
- Delay.delayus(80); //稍作延时 45us
- TOU_CLK = 1;
- Touch_dat >>= 1;
- Delay.delayus(40); //22.5us后读取数据,在数据的中间读取数据
- if(TOU_SDA) //读取数据
- Touch_dat |= 0x80;
- Delay.delayus(40); //稍作延时 22.5us
- TOU_CLK = 0;
- }
- TOU_SDA = 1; //释放总线
- TOU_CLK = 1; //释放总线
- }
- return Touch_dat;
- }
- //将都到的触摸数据进行解析
- static uint8_t Read_Touch(void)
- {
- uint8_t Touch_DAT;
-
- Touch_DAT = Read_TouchData();
- switch(Touch_DAT)
- {
- case 0x8F:return 0;break; //没有按键按下,返回0
- case 0x9E:return 1;break; //KEY1按键按下,返回1
- case 0x9D:return 2;break; //KEY2按键按下,返回2
- case 0x9B:return 3;break; //KEY3按键按下,返回3
- case 0x97:return 4;break; //KEY4按键按下,返回4
- default:return 0;break;
- }
- }
复制代码
上图2个文件下载:
触摸驱动程序.zip
(1.1 KB, 下载次数: 37)
|