找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3242|回复: 1
打印 上一主题 下一主题
收起左侧

OB38R08T1 3按键触摸触摸倒计时例程

[复制链接]
跳转到指定楼层
楼主
ID:453674 发表于 2018-12-24 17:35 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
昂宝电子-台湾新茂-OB38R08T1基于KEIL5的3按键触摸倒计时例程

单片机源程序如下:
  1. #include "OB38R08T1.h"

  2. #define   SEGA     P0_4   
  3. #define   SEGB     P0_6  
  4. #define   SEGC     P1_6  
  5. #define   SEGD     P3_1
  6. #define   SEGE     P1_7
  7. #define   SEGF     P0_7
  8. #define   SEGG     P1_5
  9. #define   COM1     P1_1
  10. #define   COM2     P1_4

  11. #define   DR     P1_0


  12. const unsigned char LED7Code[]={
  13.         0xfc,                // 0
  14.         0x50,                // 1
  15.         0xea,                // 2
  16.         0xae,                // 3
  17.         0x1e,                // 4
  18.         0xb6,                // 5
  19.         0xf6,                // 6
  20.         0x2c,                // 7
  21.         0xfe,                // 8
  22.         0xbe,                // 9
  23.         0x00                // mie
  24. };

  25. #define TIMER0_VECTOR  1    //TIMER0 Interrupt Vevtor
  26. #define d_T0MOD        0x01 //TMOD[3:0] TIMER0 Mode setting
  27. #define d_T1MOD        0x00 //TMOD[7:4] TIMER1 Mode setting
  28. #define ET2            0x00 //TIMER2 overflow Interrupt Enable (Default 0 Disable)
  29. #define ET1            0x00 //TIMER1 overflow Interrupt Enable (Default 0 Disable)
  30. #define ET0            0x01 //TIMER0 overflow Interrupt Enable (Default 0 Disable)

  31. #define d_MODEVALUE_T0      65536     //MODE1 16bit 65536
  32. #define d_RELOADVALUE_T0    2000      //User Define Reload Value          1.5mS

  33. bit Key_mode_flag;
  34. bit ledcom_cnt,Dr_Flag1,Dr_Flag2,Dr_Flag3,Key_Fist;
  35. bit seg1,seg2,seg3,seg4,seg5,seg6,seg7;
  36. unsigned char TK_cnut,seg,LEDNum,TK_Num,TK_Stat,mode;
  37. unsigned int Key_Cnt,i;


  38. void TIMER0_initialize(void)  //Initialize TIMER0
  39. {
  40.     IEN0 |= (ET2<<5)|(ET1<<3)|(ET0<<1); //IE=IEN0 = 0x02;
  41.     TMOD  = (d_T1MOD<<4)|(d_T0MOD);
  42.     TH0   = (d_MODEVALUE_T0-d_RELOADVALUE_T0)/256;    //MODE1 16bit 65536
  43.     TL0   = (d_MODEVALUE_T0-d_RELOADVALUE_T0)%256;
  44.     //TR0   = 1;    //Timer0 Start bit
  45.                 PFCON = 0X00;//  FOSC/12
  46. }



  47. void InitIO(void)
  48. {
  49.         P0M0 = 0XFF; //TUI WAN
  50.         P0M1 = 0X00;
  51.         P1M0 = 0XFF;
  52.         P1M1 = 0X00;
  53.         P2M0 = 0X00; //
  54.         P2M1 = 0X00;
  55.         P3M0 = 0X02; //
  56.         P3M1 = 0X00;
  57.         P0 = 0XEE;
  58.         P1 = 0XFF;
  59. }


  60. //========================================================================================================
  61. //  Command Read Format:
  62. //  Start    -> Slave(W) -> Ack -> Command -> Ack ->
  63. //  Re-Start -> Slave(R) -> Ack ->   0x00  -> Ack ->  TKSTATUS1  -> Ack -> TKSTATUS0 -> NAck -> Stop
  64. //
  65. //  Touch Slave(W) Address = 0x60
  66. //  Touch Slave(R) Address = 0x61
  67. //  Read Key Status Command Number = 0x17
  68. //
  69. //  [Master Example]
  70. //  Start    ->  0x60(W) -> Ack ->   0x17  -> Ack ->
  71. //  Re-Start ->  0x61(R) -> Ack ->   0x00  -> Ack ->  TKSTATUS1  -> Ack -> TKSTATUS0 -> NAck -> Stop
  72. //========================================================================================================

  73. void TOUCH_ISR(void) interrupt d_TK_Vector using 1
  74. {
  75.     EA = 0;
  76.     ((void(code*)(void))0x209B)();      //Touch ISR Function
  77.     EA = 1;
  78. }

  79. void IIC_ISR(void) interrupt d_IIC_Vector using 2
  80. {
  81.     EA = 0;
  82.     ((void(code*)(void))0x206B)();      //IIC ISR Function
  83.     EA = 1;
  84. }

  85. void WDT_ISR(void) interrupt d_WDT_Vector
  86. {
  87.     ((void(code*)(void))0x208B)();      //WDT ISR Function
  88. }





  89. /***************************************************
  90. ;*
  91. ;* Function Name: ???????
  92. ;* Inputs:        
  93. ;* Returns:      
  94. ;* Description:   
  95. ;*       
  96. ;***************************************************/
  97. void Test_led(void)
  98. {
  99.        
  100.        
  101.         seg1 = seg&0x80;
  102.         seg2 = seg&0x40;
  103.         seg3 = seg&0x20;
  104.         seg4 = seg&0x10;
  105.         seg5 = seg&0x08;
  106.         seg6 = seg&0x04;
  107.         seg7 = seg&0x02;
  108.        
  109.         if(seg1) SEGA=1;
  110.         else     SEGA=0;
  111.         if(seg2) SEGB=1;
  112.         else     SEGB=0;
  113.         if(seg3) SEGC=1;
  114.         else     SEGC=0;
  115.         if(seg4) SEGD=1;
  116.         else     SEGD=0;
  117.         if(seg5) SEGE=1;
  118.         else     SEGE=0;
  119.         if(seg6) SEGF=1;
  120.         else     SEGF=0;
  121.         if(seg7) SEGG=1;
  122.         else     SEGG=0;
  123. }



  124. void led_display_drive(void)
  125. {       
  126.      COM1 = 1;
  127.      COM2 = 1;
  128.     if (ledcom_cnt==0)
  129.     {
  130.                                 seg = LED7Code[LEDNum%10];
  131. //                                if(seg==0)  seg = LED7Code[11];
  132.         Test_led();
  133.                                 COM1 = 0;
  134.         COM2 = 1;
  135.                     ledcom_cnt = 1;
  136.     }
  137.     else if (ledcom_cnt==1)
  138.     {                       
  139.         seg = LED7Code[LEDNum/10];
  140.         Test_led();
  141.         COM1 = 1;       
  142.                                 COM2 = 0;
  143.                     ledcom_cnt = 0;
  144.     }

  145. }


  146. void main(void)
  147. {
  148.                 InitIO();
  149.     TIMER0_initialize();
  150.     TR0  = 1;
  151. //   TR1  = 1;
  152.     EA   = 1;
  153.        
  154. //   ((void(code*)(unsigned char))0x2002)(0x00);      //Select IIC interface for P2.5 & P2.6
  155.     ((void(code*)(void))0x2005)();                   //Touch initial
  156.     LVC=0x00;

  157.     while(1)
  158.     {
  159.       ((void(code*)(unsigned char))0x2008)(0x28);  //Touch Normal Run
  160.                           
  161.                         TK_Stat = TKSTATUS1;
  162.                         if(TK_Stat==0)
  163.                         {                                       
  164.                                 TK_cnut = 0x55;
  165.                                 TK_Num = 0;
  166.                                
  167.                         }
  168.                         else if(TK_cnut==0x55)
  169.                         {
  170.                                         if(TK_Num++>50)
  171.                                         {
  172.                                                 if(TK_Num>51) TK_Num = 51;
  173.                                         }
  174.                                         else
  175.                                         {
  176.                                                 if(TK_Num==51)
  177.                                                 {
  178.                                                         TK_Num = 0;
  179.                                                         Key_Cnt = 0;
  180.                                                         TK_cnut = 0xaa;
  181.                                                         if((TK_Stat&0X10)==0x10)//左上键
  182.                                                         {
  183.                                                                 LEDNum = 90;
  184.                                                                 i = 0;
  185.                                                                 if(Dr_Flag3==0)
  186.                                                                 {
  187.                                                                         Dr_Flag3 = 1;
  188.                                                                         DR = 1;
  189.                                                                 }
  190.                                                                 else
  191.                                                                 {
  192.                                                                         Dr_Flag3 = 0;
  193.                                                                         DR = 0;
  194.                                                                 }
  195.                                                         }
  196.                                                         else if((TK_Stat&0X20)==0x20)//中间键
  197.                                                         {
  198.                                                                 LEDNum = 60;
  199.                                                                 i = 0;
  200.                                                                 if(Dr_Flag2==0)
  201.                                                                 {
  202.                                                                         Dr_Flag2 = 1;
  203.                                                                         DR = 1;
  204.                                                                 }
  205.                                                                 else
  206.                                                                 {
  207.                                                                         Dr_Flag2 = 0;
  208.                                                                         DR = 0;
  209.                                                                 }
  210.                                                         }
  211.                                                         else if((TK_Stat&0X40)==0x40)
  212.                                                         {
  213.                                                                 LEDNum = 30;
  214.                                                                 i = 0;
  215.                                                                 if(Dr_Flag1==0)
  216.                                                                 {
  217.                                                                         Dr_Flag1 = 1;
  218.                                                                         DR = 1;
  219.                                                                 }
  220.                                                                 else
  221.                                                                 {
  222.                                                                         Dr_Flag1 = 0;
  223.                                                                         DR = 0;
  224.                                                                 }
  225.                                                         }
  226.                                                 }
  227.                                         }
  228.                         }
  229.                        
  230.                
  231.                                
  232.                         if((P3_0==0)&&(Key_mode_flag==1))//自锁按键
  233.                         {
  234.                                 Key_Cnt++;
  235.                                 if(Key_Cnt>200)
  236.                                 {
  237.                                         Key_Cnt = 201;
  238.                                         if(Key_Fist==0)
  239.                                         {
  240.                                                 LEDNum = 99;
  241.                                                 i = 0;
  242.                                                 DR = 1;
  243.                                                 Key_Fist = 1;
  244.                                         }
  245.                                 }
  246.                         }
  247.                         else
  248.                         {
  249.                                 if(Key_Cnt==201)
  250.                                 {
  251.                                         DR = 0;
  252.                                         LEDNum = 0;
  253.                                         Key_Fist = 0;
  254.                                 }
  255.                                 Key_Cnt = 0;
  256.                                
  257.                                
  258.                                 if(LEDNum==0)
  259.                                 {
  260.                                         Key_mode_flag = 1;
  261.                                 }
  262. ……………………

  263. …………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码

所有资料51hei提供下载:
触摸例程.rar (39.96 KB, 下载次数: 28)

评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:769980 发表于 2021-8-21 08:11 | 只看该作者
这个单片机的例程很少,感谢分享
回复

使用道具 举报

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

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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