16鍵觸摸按鍵,商家給的資料很少,芯片功能很豐富,這個例程僅實現(xiàn)16個按鍵單獨使用,靈敏度不錯,要短按第三個才能16鍵使用,否則只能使用8個按鍵。
774c507a69761bf7788bbd073f25a58.jpg (798.43 KB, 下載次數(shù): 44)
下載附件
8229觸摸模塊
2023-9-1 19:29 上傳
f67ee1e41bc2908bdcc968421a8f49d.jpg (742.6 KB, 下載次數(shù): 41)
下載附件
2023-9-1 19:31 上傳
單片機源程序如下:
- #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; //蜂鳴器驅(qū)動線
- 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--);
- }
- /**********************************************************
- 蜂鳴器驅(qū)動子函數(shù)
- **********************************************************/
- void beep(void)
- {
- unsigned char i;
- for (i=0;i<180;i++)
- {
- delay10us(500);
- BEEP=!BEEP; //BEEP取反
- }
- BEEP=1; //關(guān)閉蜂鳴器
- 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; //數(shù)碼管顯示"-"
- T2CON = 0x00; //設(shè)置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中斷函數(shù)
- **********************************************************/
- void timer2() interrupt 5
- {
- TR2 = 0;
- TF2 = 0; //手工清中斷標志
- TH2 = 0xfc; //1ms定時常數(shù)
- TL2 = 0x66;
- if(n >= 2) //3位數(shù)碼管顯示
- {
- n = 0;
- shift = 0x7f; //送位碼初值
- P2 = 0xff; //關(guān)閉顯示
- }
- else
- {
- P0 = disp_code[display[n++]]; //送段碼
- P2 = shift; //送位碼
- shift = (shift>>1)|0x80; //調(diào)整位碼
- }
- TR2 = 1;
- }
復(fù)制代碼 |