标题:
OB38R08T1 3按键触摸触摸倒计时例程
[打印本页]
作者:
si175744595
时间:
2018-12-24 17:35
标题:
OB38R08T1 3按键触摸触摸倒计时例程
昂宝电子-台湾新茂-OB38R08T1基于KEIL5的3按键触摸倒计时例程
单片机源程序如下:
#include "OB38R08T1.h"
#define SEGA P0_4
#define SEGB P0_6
#define SEGC P1_6
#define SEGD P3_1
#define SEGE P1_7
#define SEGF P0_7
#define SEGG P1_5
#define COM1 P1_1
#define COM2 P1_4
#define DR P1_0
const unsigned char LED7Code[]={
0xfc, // 0
0x50, // 1
0xea, // 2
0xae, // 3
0x1e, // 4
0xb6, // 5
0xf6, // 6
0x2c, // 7
0xfe, // 8
0xbe, // 9
0x00 // mie
};
#define TIMER0_VECTOR 1 //TIMER0 Interrupt Vevtor
#define d_T0MOD 0x01 //TMOD[3:0] TIMER0 Mode setting
#define d_T1MOD 0x00 //TMOD[7:4] TIMER1 Mode setting
#define ET2 0x00 //TIMER2 overflow Interrupt Enable (Default 0 Disable)
#define ET1 0x00 //TIMER1 overflow Interrupt Enable (Default 0 Disable)
#define ET0 0x01 //TIMER0 overflow Interrupt Enable (Default 0 Disable)
#define d_MODEVALUE_T0 65536 //MODE1 16bit 65536
#define d_RELOADVALUE_T0 2000 //User Define Reload Value 1.5mS
bit Key_mode_flag;
bit ledcom_cnt,Dr_Flag1,Dr_Flag2,Dr_Flag3,Key_Fist;
bit seg1,seg2,seg3,seg4,seg5,seg6,seg7;
unsigned char TK_cnut,seg,LEDNum,TK_Num,TK_Stat,mode;
unsigned int Key_Cnt,i;
void TIMER0_initialize(void) //Initialize TIMER0
{
IEN0 |= (ET2<<5)|(ET1<<3)|(ET0<<1); //IE=IEN0 = 0x02;
TMOD = (d_T1MOD<<4)|(d_T0MOD);
TH0 = (d_MODEVALUE_T0-d_RELOADVALUE_T0)/256; //MODE1 16bit 65536
TL0 = (d_MODEVALUE_T0-d_RELOADVALUE_T0)%256;
//TR0 = 1; //Timer0 Start bit
PFCON = 0X00;// FOSC/12
}
void InitIO(void)
{
P0M0 = 0XFF; //TUI WAN
P0M1 = 0X00;
P1M0 = 0XFF;
P1M1 = 0X00;
P2M0 = 0X00; //
P2M1 = 0X00;
P3M0 = 0X02; //
P3M1 = 0X00;
P0 = 0XEE;
P1 = 0XFF;
}
//========================================================================================================
// Command Read Format:
// Start -> Slave(W) -> Ack -> Command -> Ack ->
// Re-Start -> Slave(R) -> Ack -> 0x00 -> Ack -> TKSTATUS1 -> Ack -> TKSTATUS0 -> NAck -> Stop
//
// Touch Slave(W) Address = 0x60
// Touch Slave(R) Address = 0x61
// Read Key Status Command Number = 0x17
//
// [Master Example]
// Start -> 0x60(W) -> Ack -> 0x17 -> Ack ->
// Re-Start -> 0x61(R) -> Ack -> 0x00 -> Ack -> TKSTATUS1 -> Ack -> TKSTATUS0 -> NAck -> Stop
//========================================================================================================
void TOUCH_ISR(void) interrupt d_TK_Vector using 1
{
EA = 0;
((void(code*)(void))0x209B)(); //Touch ISR Function
EA = 1;
}
void IIC_ISR(void) interrupt d_IIC_Vector using 2
{
EA = 0;
((void(code*)(void))0x206B)(); //IIC ISR Function
EA = 1;
}
void WDT_ISR(void) interrupt d_WDT_Vector
{
((void(code*)(void))0x208B)(); //WDT ISR Function
}
/***************************************************
;*
;* Function Name: ???????
;* Inputs:
;* Returns:
;* Description:
;*
;***************************************************/
void Test_led(void)
{
seg1 = seg&0x80;
seg2 = seg&0x40;
seg3 = seg&0x20;
seg4 = seg&0x10;
seg5 = seg&0x08;
seg6 = seg&0x04;
seg7 = seg&0x02;
if(seg1) SEGA=1;
else SEGA=0;
if(seg2) SEGB=1;
else SEGB=0;
if(seg3) SEGC=1;
else SEGC=0;
if(seg4) SEGD=1;
else SEGD=0;
if(seg5) SEGE=1;
else SEGE=0;
if(seg6) SEGF=1;
else SEGF=0;
if(seg7) SEGG=1;
else SEGG=0;
}
void led_display_drive(void)
{
COM1 = 1;
COM2 = 1;
if (ledcom_cnt==0)
{
seg = LED7Code[LEDNum%10];
// if(seg==0) seg = LED7Code[11];
Test_led();
COM1 = 0;
COM2 = 1;
ledcom_cnt = 1;
}
else if (ledcom_cnt==1)
{
seg = LED7Code[LEDNum/10];
Test_led();
COM1 = 1;
COM2 = 0;
ledcom_cnt = 0;
}
}
void main(void)
{
InitIO();
TIMER0_initialize();
TR0 = 1;
// TR1 = 1;
EA = 1;
// ((void(code*)(unsigned char))0x2002)(0x00); //Select IIC interface for P2.5 & P2.6
((void(code*)(void))0x2005)(); //Touch initial
LVC=0x00;
while(1)
{
((void(code*)(unsigned char))0x2008)(0x28); //Touch Normal Run
TK_Stat = TKSTATUS1;
if(TK_Stat==0)
{
TK_cnut = 0x55;
TK_Num = 0;
}
else if(TK_cnut==0x55)
{
if(TK_Num++>50)
{
if(TK_Num>51) TK_Num = 51;
}
else
{
if(TK_Num==51)
{
TK_Num = 0;
Key_Cnt = 0;
TK_cnut = 0xaa;
if((TK_Stat&0X10)==0x10)//左上键
{
LEDNum = 90;
i = 0;
if(Dr_Flag3==0)
{
Dr_Flag3 = 1;
DR = 1;
}
else
{
Dr_Flag3 = 0;
DR = 0;
}
}
else if((TK_Stat&0X20)==0x20)//中间键
{
LEDNum = 60;
i = 0;
if(Dr_Flag2==0)
{
Dr_Flag2 = 1;
DR = 1;
}
else
{
Dr_Flag2 = 0;
DR = 0;
}
}
else if((TK_Stat&0X40)==0x40)
{
LEDNum = 30;
i = 0;
if(Dr_Flag1==0)
{
Dr_Flag1 = 1;
DR = 1;
}
else
{
Dr_Flag1 = 0;
DR = 0;
}
}
}
}
}
if((P3_0==0)&&(Key_mode_flag==1))//自锁按键
{
Key_Cnt++;
if(Key_Cnt>200)
{
Key_Cnt = 201;
if(Key_Fist==0)
{
LEDNum = 99;
i = 0;
DR = 1;
Key_Fist = 1;
}
}
}
else
{
if(Key_Cnt==201)
{
DR = 0;
LEDNum = 0;
Key_Fist = 0;
}
Key_Cnt = 0;
if(LEDNum==0)
{
Key_mode_flag = 1;
}
……………………
…………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码
所有资料51hei提供下载:
触摸例程.rar
(39.96 KB, 下载次数: 28)
2018-12-24 17:33 上传
点击文件名下载附件
触摸例程CS动态10V,EFT4KV
下载积分: 黑币 -5
作者:
shjine
时间:
2021-8-21 08:11
这个单片机的例程很少,感谢分享
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1