数码之家

 找回密码
 立即注册

QQ登录

只需一步,快速开始

微信登录

微信扫一扫,快速登录

搜索
查看: 6989|回复: 12

[other] STC8H单片机硬件触摸按键的简单实现(2)——代码分享

[复制链接]
发表于 2022-11-10 11:06:51 | 显示全部楼层 |阅读模式

爱科技、爱创意、爱折腾、爱极致,我们都是技术控

您需要 登录 才可以下载或查看,没有账号?立即注册 微信登录

x
本帖最后由 慕名而来 于 2022-11-10 12:48 编辑

昨天发帖:STC8H单片机硬件触摸按键的简单实现(1)——官方例程与配置软件https://www.mydigit.cn/thread-353279-1-1.html(出处: 数码之家),说了一下STC8H单片机硬件触摸按键编程的前期准备——查看串口数据、确定按键状态值,接下来完成这段应用程序。
长居本坛的朋友或许知道,我基本上只玩STC的51单片机,虽然也弄了十几年了,但经常只是做些时钟、万年历这些单片机地皮级的应用,C编程一直都是座门墩的水平始终没能登堂入室,很多时候都是在做用例程、改例程、简化例程的所谓编程,真的不会自己起头写代码,这段触摸按键代码也不例外,只是以最简单的代码实现了最基本的使用功能,因为应用模式为按键自动重复检测模式,所以,这段代码整合的其他工程里应用时是否会出现分时冲突还不知道,我也试图测试单次检测模式但没能实现,在此也希望高手指点。


  1. /**********************************************************************
  2. //如有转载请注明出处
  3. //代码原创:wannenggong 2022-11-10
  4. //单片机型号:STC8H4K64TL,电源电压3.3V,使用外接RX8025T-32768信号源做外部晶振
  5. //接线方式:P1.1口经1K电阻连接金属触摸片,P1.0口经470Ω电阻连接LED到正电源
  6. //触摸按键工作模式:自动重复扫描
  7. //实验目标:触摸按键时LED亮起,不触摸按键时LED熄灭
  8. ***********************************************************************/
  9. #include "STC8H.h" //包含了u8、u16、u32的定义
  10. #include <intrins.h>
  11. sbit wng_led=P1^0;

  12. //------------------------------------------
  13. void key_init()
  14. {
  15.     P_SW2 |= 0x80;                                //允许访问XFR
  16.     TSRT = 0x00;                                //不开启LED驱动分时功能
  17.     TSCHEN1 = 0x02;                                //仅使能TK01(P1.1)
  18.     TSCHEN2 = 0x00;                                //其他按键没有使用
  19.     TSCFG1  = (7<<4) + 3;                //开关电容工作频率 = fosc/(2*(TSCFG1[6:4]+1)), 放电时间(系统时钟周期数) 0(125) 1(250) 2(500) 3(1000) 4(2000) 5(2500) 6(5000) 7(7500) 最小3
  20.     TSCFG2  = 2;                                //配置触摸按键控制器的内部参考电压(AVCC的分压比), 0(1/4)  1(1/2)  2(5/8)  3(3/4)
  21.         TSWUTC = 0x0c;                                //32768/(32*8*0x0c)=10Hz=100ms唤醒一次
  22.         TSCTRL = 0xB0;                                //使用外部晶振
  23. //        TSCTRL = 0xA0;                                //使用内部晶振
  24. //----TSCTRL寄存器详解如下--------------
  25. //B7:TSGO=1使能触摸按键
  26. //B6:SINGLE=1单次扫描模式、=0自动重复扫描
  27. //B5:TSWAIT=1完成一轮扫描后、TSIF 被硬件置 1,此时触摸按键控制器会暂停扫描,直到 TSIF 标志位被清 0后才开始下一轮的扫描
  28. //B4:TSWUCS=0使用内部32K晶振
  29. //B3:TSDCEN=0不使能16位比较器
  30. //B2:TSWUEN=1使能低功耗唤醒功能
  31. //B1B0:TSSAMP=11单次按键扫描4次
  32. //--------------------------------------
  33.     P_SW2 &= ~0x80;                   //禁止访问XFR
  34.     //IE2 |= 0x80;
  35. }
  36. //----键值读取函数--------------------
  37. u8 Read_Key_value(void)
  38. {
  39.     u8 j,wng_data;
  40.     u16 i, wng_value=0;
  41.     P_SW2 |= 0x80;               
  42.     for(i=0; i<100; i++)
  43.     {
  44.         j = TSSTA2;
  45.         if(j & 0x40)        //数据溢出
  46.         {
  47.             TSSTA2 |= 0x40; //写1清零
  48.             wng_value=0xee;        //返回错误码0xee
  49.         }

  50.         if(j & 0x80)        //扫描完成
  51.         {
  52.             TSSTA2 |= 0x80; //写1清零
  53.             wng_value=TSDAT;
  54.             wng_data=wng_value>>12;        //获取高8位数据的高4位用于判断
  55.         }
  56.     }
  57.     P_SW2 &= ~0x80;               

  58.     return (wng_data);
  59. }
  60. //----按键函数------------------------------
  61. void key01()
  62. {
  63.     u8 wng;
  64.     wng=Read_Key_value();
  65.     if(wng==0xee)
  66.         return;
  67.     else
  68.     {
  69.         if(wng<0x03)                //选取一个中值用来判断按键状态
  70.             wng_led=0;
  71.         else if(wng>0x03)
  72.             wng_led=1;
  73.     }

  74. }
  75. //------------------------------------------
  76. void main(void)
  77. {

  78.     P1M1=0x00;
  79.     P1M0=0x00;
  80.     P3M1=0x00;
  81.     P3M0=0x00;
  82.     P5M1=0x00;
  83.     P5M0=0x00;
  84.     key_init();
  85.     wng_led=1;
  86.     while(1)
  87.     {
  88.         key01();
  89.                
  90.     }
  91. }
复制代码




打赏

参与人数 1家元 +5 收起 理由
phoric + 5

查看全部打赏

发表于 2022-11-10 11:29:55 | 显示全部楼层
游客请登录后查看回复内容
回复 支持 反对

使用道具 举报

发表于 2022-11-10 11:31:06 | 显示全部楼层
游客请登录后查看回复内容
回复 支持 反对

使用道具 举报

发表于 2022-11-10 11:55:24 来自手机浏览器 | 显示全部楼层
游客请登录后查看回复内容
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-11-10 12:02:28 | 显示全部楼层
游客请登录后查看回复内容
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-11-10 12:04:36 | 显示全部楼层
游客请登录后查看回复内容
回复 支持 反对

使用道具 举报

发表于 2022-11-10 12:11:13 | 显示全部楼层
游客请登录后查看回复内容
回复 支持 反对

使用道具 举报

头像被屏蔽
发表于 2022-11-10 15:48:15 | 显示全部楼层
游客请登录后查看回复内容
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-11-19 12:16:00 | 显示全部楼层
游客请登录后查看回复内容

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册 微信登录

x
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-11-19 12:21:05 | 显示全部楼层
游客请登录后查看回复内容
回复 支持 反对

使用道具 举报

发表于 2024-8-17 21:18:29 | 显示全部楼层
游客请登录后查看回复内容
回复 支持 反对

使用道具 举报

发表于 2024-12-1 15:02:14 | 显示全部楼层
游客请登录后查看回复内容
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册 微信登录

本版积分规则

APP|手机版|小黑屋|关于我们|联系我们|法律条款|数码之家-技术知识分享平台

闽公网安备35020502000485号

闽ICP备2021002735号-2

GMT+8, 2026-6-3 19:39 , Processed in 0.156000 second(s), 12 queries , Gzip On, Redis On.

Powered by Discuz!

© MyDigit.Net Since 2006

快速回复 返回顶部 返回列表