16键触摸按键,商家给的资料很少,芯片功能很丰富,这个例程仅实现16个按键单独使用,灵敏度不错,要短按第三个才能16键使用,否则只能使用8个按键。
单片机源程序如下:
- #include <reg52.h>
- #include <intrins.h>
- //#include<reg51.h>
- //#include<intrins.h>
- sbit scl=P1^0;
- sbit sdo=P1^1;
- //sbit a=P1^2;
- sbit BEEP = P3^6; //蜂鸣器驱动线
- unsigned char n,shift,i;
- unsigned int display[2];
- unsigned char code disp_code[]={
- 0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,
- 0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e,0xbf} ;
- //unsigned char code key2[]={'1','2','3','4','5','6','7','8','9','0','A','B','C','D','E','F','-'};
- unsigned char key1[16];
- void delay10us(unsigned int n)
- {
- while(n--);
- }
- void delay(unsigned z)
- {
- unsigned int x,y;
- for(x = z; x > 0; x--)
- for(y = 114; y > 0 ; y--);
- }
- /**********************************************************
- 蜂鸣器驱动子函数
- **********************************************************/
- void beep(void)
- {
- unsigned char i;
- for (i=0;i<180;i++)
- {
- delay10us(500);
- BEEP=!BEEP; //BEEP取反
- }
- BEEP=1; //关闭蜂鸣器
- delay10us(500); //延时
- }
- void ttp229_write(void)
- {
- unsigned char i;
- sdo=0;
- delay10us(10);//115.02us
- sdo=1;
- delay10us(2); //36us
- for(i=0;i<16;i++)
- {
- key1[i]='1';
- scl=0;
- if(!sdo) {key1[i]='0';}
- scl=1; //132KHz
- }
- }
- main()
- {
- unsigned char i;
- unsigned int i1;
- P0 = 0xbf;
- P2 = 0x7f; //数码管显示"-"
- T2CON = 0x00; //设置T2CON寄存器
- TH2 = 0xfc; //1ms定时
- TL2 = 0x66;
- ET2 = 1; //启用Timer2中断
- EA = 1; //总中断允许
- TR2 = 1; //启动定时器2
- while(1)
- {
- delay(200);//500ms
- ttp229_write();
- // i1=16;
- // i=0;
-
- for(i=0;i<16;i++)
- {
- if (key1[i]=='0')
- {
- display[0]=i;
- display[1]=i;
- }
- }
-
- }
- }
- /*********************************************************
- Timer2中断函数
- **********************************************************/
- void timer2() interrupt 5
- {
- TR2 = 0;
- TF2 = 0; //手工清中断标志
- TH2 = 0xfc; //1ms定时常数
- TL2 = 0x66;
- if(n >= 2) //3位数码管显示
- {
- n = 0;
- shift = 0x7f; //送位码初值
- P2 = 0xff; //关闭显示
- }
- else
- {
- P0 = disp_code[display[n++]]; //送段码
- P2 = shift; //送位码
- shift = (shift>>1)|0x80; //调整位码
- }
- TR2 = 1;
- }
复制代码 |