找回密码
 立即注册
查看: 27|回复: 1

rgbLED 驱动

[复制链接]
  • 打卡等级:常住居民I
  • 打卡总天数:67
  • 最近打卡:2025-12-19 08:07:15
已绑定手机

11

主题

49

回帖

254

积分

中级会员

积分
254
发表于 3 天前 | 显示全部楼层 |阅读模式
rgb 没点亮;

不知道为啥
截图202512162341533736.jpg


截图202512162342141572.jpg

#include "STC8Hxxxxx.h"

//#include <AI8H.H>
#include <intrins.h>
#include <absacc.h>
#include <string.h>
#include <stdarg.h>
#include <stdio.h>
#include <math.h>

        #define                TKC                P00                //        0        ¸ß×è
        #define                TKD                P01                //        0        ¸ß×è
        #define                TKE                P02                //        0        ¸ß×è
        #define                TKF                P03                //        0        ¸ß×è
//        #define                NC                P04                //        0        ¸ß×è
//        #define                NC                P05                //        0        ¸ß×è
        #define                NTC                P06                //        0        ¸ß×è
        #define                BUZ                P07                //        0        ÍÆÍì

        #define                TK0                P10                //        0        ¸ß×è
        #define                TK1                P11                //        0        ¸ß×è
//        #define                NO                P12                //        0        ¸ß×è
        #define                TK3                P13                //        0        ¸ß×è
        #define                TK4                P14                //        0        ¸ß×è
        #define                TK5                P15                //        0        ¸ß×è
        #define                TK6                P16                //        0        ¸ß×è
        #define                TK7                P17                //        0        ¸ß×è

        #define                COM0        P20                //        0        ÍÆÍì
        #define                COM1        P21                //        0        ÍÆÍì
        #define                COM2        P22                //        0        ÍÆÍì
        #define                COM3        P23                //        0        ÍÆÍì
        #define                COM4        P24                //        0        ÍÆÍì
        #define                COM5        P25                //        0        ÍÆÍì
        #define                COM6        P26                //        0        ÍÆÍì
        #define                COM7        P27                //        0        ÍÆÍì

        #define                RXD                P30                //        1        Ë«Ïò
        #define                TXD                P31                //        1        ÍÆÍì
        #define                SCL                P32                //        1        Ë«Ïò
        #define                SDA                P33                //        1        Ë«Ïò
        #define                SEGC        P34                //        0        ÍÆÍì
        #define                SEGD        P35                //        0        ÍÆÍì
        #define                SEGE        P36                //        0        ÍÆÍì
        #define                CMP+        P37                //        0        ¸ß×è

        #define                SEG0        P40                //        0        ÍÆÍì
        #define                SEG1        P41                //        0        ÍÆÍì
        #define                SEG2        P42                //        0        ÍÆÍì
        #define                SEG3        P43                //        0        ÍÆÍì
        #define                SEG4        P44                //        0        ÍÆÍì
        #define                SEG5        P45                //        0        ÍÆÍì
        #define                SEG6        P46                //        0        ÍÆÍì
        #define                SEG7        P47                //        0        ÍÆÍì

        #define                TK8                P50                //        0        ¸ß×è
        #define                TK9                P51                //        0        ¸ß×è
        #define                TKA                P52                //        0        ¸ß×è
        #define                TKB                P53                //        0        ¸ß×è
        #define                TK2                P54                //        0        ¸ß×è
//        #define                NO                P55                //        0        ¸ß×è
//        #define                NO                P56                //        0        ¸ß×è
//        #define                NO                P57                //        0        ¸ß×è
       
#define                FOSC                        24000000UL                                //Ö÷ʱÖÓ
#define                BAUD                        115200UL                                //²¨ÌØÂÊ
#define                TMRF                        200UL                                        //¶¨Ê±Æ÷ƵÂÊ
#define                BRT                                (0x10000-FOSC/BAUD/4)        //²¨ÌØÂÊÖµ
#define                TMR                                (0x10000-FOSC/TMRF/12)        //¶¨Ê±Æ÷Öµ
#define                T_Buf_Len                64                                                //Uart1·¢ËÍ»º´æ³¤¶È
#define                R_Buf_Len                64                                                //Uart1½ÓÊÕ»º´æ³¤¶È
#define                TS_Channel                16                                                //´¥Ãþ°´¼üͨµÀÊý
#define                TS_Compare                0x0800                                        //´¥Ãþ°´¼ü±È½ÏÖµ
#define                TS_Range                0x0400                                        //´¥Ãþ°´¼ü»ØÖÍÖµ

unsigned char                RP;                                                //Uart2½ÓÊÕÖ¸Õë
unsigned char                TP;                                                //Uart2·¢ËÍÖ¸Õë
unsigned char                Uart_R_Len;                                //Uart2½ÓÊÕ³¤¶È
unsigned char                Uart_T_Len;                                //Uart2·¢Ëͳ¤¶È
unsigned char xdata        R_Buf[R_Buf_Len];                //Uart2½ÓÊÕ»º´æ
unsigned char xdata        T_Buf[T_Buf_Len];                //Uart2·¢ËÍ»º´æ
unsigned char code        Seg_Map[19]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0x77,0x7C,0x39,0x5E,0x79,0x71,0x40,0x00,0x80};        //0~F£¬¸Ü£¬¿Õ¸ñ£¬µã
unsigned char                Seg_Buf[16];
unsigned char                LED_Buf[16];
unsigned char code        TS_Map[16]={0x06,0x07,0x0A,0x08,0x0C,0x0D,0x0E,0x0F,0x09,0x0B,0x04,0x05,0x00,0x01,0x02,0x03};        //´¥Ãþ°´¼üͨµÀÖØÓ³Éä
unsigned int xdata        TS_Buf[5][TS_Channel];        //´¥Ãþ°´¼üÊý¾Ý£¨Êµ¼ÊÖµ¡¢Ô¤´¦ÀíÖµ¡¢×îСֵ¡¢×î´óÖµ¡¢½á¹û£©
unsigned char                TS_Select;                                //´¥Ãþ°´¼üÑ¡ÔñͨµÀ£¨²é¿´TS_Buf£¬µÍ4λΪµÍά¶È£¬·¶Î§0x*0-0x*B£»¸ß4λΪ¸ßά¶È£¬·¶Î§0x0*-0x4*£©
unsigned char                TS_Scan;                                //´¥Ãþ°´¼üɨÃèͨµÀ
bit                                        TS_Flag;                                //´¥Ãþ°´¼üÖжϱêÖ¾
unsigned char                TS_Calibrate;                        //´¥Ãþ°´¼üУ׼״̬
unsigned int                TS_Pad;                                        //´¥Ãþ°´Å¥×´Ì¬
unsigned char                TS_Ring;                                //´¥Ãþ»¬»·×´Ì¬
unsigned char                TS_Slide;                                //´¥Ãþ»¬Ìõ״̬
unsigned int                Ring;                                        //´¥Ãþ»¬»·Öµ
unsigned int                Slide;                                        //´¥Ãþ»¬ÌõÖµ

//void Delay_ms(unsigned char ms)
//{
//        unsigned int i;
//        do
//        {
//                i=FOSC/10000;
//                while(--i);        //10T per loop
//        }
//        while(--ms);
//}

//void Delay_100us(void)
//{
//        unsigned char data i,j;
//        i=4;
//        j=27;
//        do
//        {
//                while (--j);
//        }
//        while (--i);
//}

void UART_Send(unsigned int x)
{
        while(Uart_T_Len);
        TP=0;
        Uart_T_Len=x;
        TI=1;
}

//void Uart_Printf(unsigned char *v,...)
//{
//        va_list ap;
//        va_start(ap,v);
//        while(Uart_T_Len);
//        UART_Send(vsprintf(T_Buf,v,ap));
//        va_end(ap);
//}

void UART_Return(unsigned char temp)
{
        memcpy(T_Buf,R_Buf,temp);
        UART_Send(temp);
}

void Buzzer(void)
{
        if(TS_Pad&0x0100)
                BUZ=1;
        else
                BUZ=0;
}

void Seg_Display(void)
{
        Seg_Buf[0x00]=((TS_Calibrate<<8)|TS_Select)>>4;
        Seg_Buf[0x01]=((TS_Calibrate<<8)|TS_Select)&0x0F;
        Seg_Buf[0x02]=16;
        Seg_Buf[0x03]=TS_Buf[TS_Select>>4][TS_Select&0x0F]/10000;
        Seg_Buf[0x04]=TS_Buf[TS_Select>>4][TS_Select&0x0F]%10000/1000;
        Seg_Buf[0x05]=TS_Buf[TS_Select>>4][TS_Select&0x0F]%1000/100;
        Seg_Buf[0x06]=TS_Buf[TS_Select>>4][TS_Select&0x0F]%100/10;
        Seg_Buf[0x07]=TS_Buf[TS_Select>>4][TS_Select&0x0F]%10;
        Seg_Buf[0x08]=Slide%10000/1000;
        Seg_Buf[0x09]=Slide%1000/100;
        Seg_Buf[0x0A]=Slide%100/10;
        Seg_Buf[0x0B]=Slide%10;
        Seg_Buf[0x0C]=Ring%10000/1000;
        Seg_Buf[0x0D]=Ring%1000/100;
        Seg_Buf[0x0E]=Ring%100/10;
        Seg_Buf[0x0F]=Ring%10;
}

void LED_Display(void)
{
        LED_Buf[0x00]=TS_Pad&0x0001?0x07:0x00;
        LED_Buf[0x01]=TS_Pad&0x0002?0x07:0x00;
        LED_Buf[0x02]=TS_Pad&0x0004?0x07:0x00;
        LED_Buf[0x03]=TS_Pad&0x0008?0x07:0x00;
        LED_Buf[0x04]=TS_Pad&0x0010?0x07:0x00;
        LED_Buf[0x05]=TS_Pad&0x0020?0x07:0x00;
        LED_Buf[0x06]=TS_Pad&0x0040?0x07:0x00;
        LED_Buf[0x07]=TS_Pad&0x0080?0x07:0x00;
        LED_Buf[0x08]=TS_Pad&0x0100?0x07:0x00;
        LED_Buf[0x09]=TS_Ring&0x01?0x07:0x00;
        LED_Buf[0x0A]=TS_Ring&0x02?0x07:0x00;
        LED_Buf[0x0B]=TS_Ring&0x04?0x07:0x00;
        LED_Buf[0x0C]=TS_Slide&0x01?0x07:0x00;
        LED_Buf[0x0D]=TS_Slide&0x02?0x07:0x00;
        LED_Buf[0x0E]=TS_Slide&0x04?0x07:0x00;
        LED_Buf[0x0F]=TS_Slide&0x08?0x07:0x00;
}

void LED(void)
{
        unsigned char i;
        unsigned char xdata *p=XBYTE+0xFB10;
        Seg_Display();
        LED_Display();
        for(i=0;i<8;i++)
        {
                *(p+i)=Seg_Map[Seg_Buf];
                *(p+8+i)=(LED_Buf&0x07)<<4;
                *(p+16+i)=Seg_Map[Seg_Buf[8+i]];
                *(p+24+i)=(LED_Buf[8+i]&0x07)<<4;
        }
       
//        COM0_DA_L=Seg_Map[Seg_Buf[0x00]];
//        COM1_DA_L=Seg_Map[Seg_Buf[0x01]];
//        COM2_DA_L=Seg_Map[Seg_Buf[0x02]];
//        COM3_DA_L=Seg_Map[Seg_Buf[0x03]];
//        COM4_DA_L=Seg_Map[Seg_Buf[0x04]];
//        COM5_DA_L=Seg_Map[Seg_Buf[0x05]];
//        COM6_DA_L=Seg_Map[Seg_Buf[0x06]];
//        COM7_DA_L=Seg_Map[Seg_Buf[0x07]];
//        COM0_DC_L=Seg_Map[Seg_Buf[0x08]];
//        COM1_DC_L=Seg_Map[Seg_Buf[0x09]];
//        COM2_DC_L=Seg_Map[Seg_Buf[0x0A]];
//        COM3_DC_L=Seg_Map[Seg_Buf[0x0B]];
//        COM4_DC_L=Seg_Map[Seg_Buf[0x0C]];
//        COM5_DC_L=Seg_Map[Seg_Buf[0x0D]];
//        COM6_DC_L=Seg_Map[Seg_Buf[0x0E]];
//        COM7_DC_L=Seg_Map[Seg_Buf[0x0F]];
//        COM0_DA_H=(LED_Buf[0x00]&0x07)<<4;
//        COM1_DA_H=(LED_Buf[0x01]&0x07)<<4;
//        COM2_DA_H=(LED_Buf[0x02]&0x07)<<4;
//        COM3_DA_H=(LED_Buf[0x03]&0x07)<<4;
//        COM4_DA_H=(LED_Buf[0x04]&0x07)<<4;
//        COM5_DA_H=(LED_Buf[0x05]&0x07)<<4;
//        COM6_DA_H=(LED_Buf[0x06]&0x07)<<4;
//        COM7_DA_H=(LED_Buf[0x07]&0x07)<<4;
//        COM0_DC_H=(LED_Buf[0x08]&0x07)<<4;
//        COM1_DC_H=(LED_Buf[0x09]&0x07)<<4;
//        COM2_DC_H=(LED_Buf[0x0A]&0x07)<<4;
//        COM3_DC_H=(LED_Buf[0x0B]&0x07)<<4;
//        COM4_DC_H=(LED_Buf[0x0C]&0x07)<<4;
//        COM5_DC_H=(LED_Buf[0x0D]&0x07)<<4;
//        COM6_DC_H=(LED_Buf[0x0E]&0x07)<<4;
//        COM7_DC_H=(LED_Buf[0x0F]&0x07)<<4;
}

unsigned int Compare(bit x,unsigned int a,unsigned int b)        //Á½¸öÖµ±È½Ï£¬·µ»Ø×î´óÖµ»ò×îСֵ£¬ÓÃÓÚ´¥Ãþ°´¼üУ׼×î´ó×îСֵ
{
        return a==b?a:(x==0?(a<b?a:b):(a>b?a:b));                                //±È½Ï´óС£¬x=0·µ»Ø×îСֵ£¬x=1·µ»Ø×î´óÖµ
}

void Calibrate(void)                        //´¥Ãþ°´¼ü×î´ó×îСֵУ׼
{
        unsigned char i;
        static unsigned char flag;        //µÍ4λΪÊ×´ÎУ׼±êÖ¾£¬¸ß4λÎÞÓÃ
        switch(TS_Calibrate)
        {
                case 0:                                        //È¡ÏûУ׼
                        flag=0x0F;                        //·ÇУ׼״̬²ÅÔÊÐíÖÃλ4¸ö±ê־λ
                break;
                case 1:                                        //У׼µ¥Í¨µÀ×îСֵ
                        if(flag&0x01)                //Ê״νøÈ뵥ͨµÀ×îСֵУ׼״̬£¬Ê¹Óõ±Ç°ÖµÌæ»»×îСֵ
                        {
                                flag&=0x0E;                //Çå³ý±ê־λ£¬È¡ÏûУ׼ǰ²»ÔÙÌæ»»
                                TS_Buf[2][TS_Select&0x0F]=TS_Buf[1][TS_Select&0x0F];
                        }
                        else                                //·ÇÊ״νøÈ뵥ͨµÀ×îСֵУ׼״̬£¬±È½Ïµ±Ç°ÖµºÍ×îСֵ£¬²¢ÓýÏÐ¡ÖµÌæ»»×îСֵ
                        {
                                TS_Buf[2][TS_Select&0x0F]=Compare(0,TS_Buf[1][TS_Select&0x0F],TS_Buf[2][TS_Select&0x0F]);
                        }
                break;
                case 2:                                        //У׼µ¥Í¨µÀ×î´óÖµ
                        if(flag&0x02)                //Ê״νøÈ뵥ͨµÀ×î´óֵУ׼״̬£¬Ê¹Óõ±Ç°ÖµÌæ»»×î´óÖµ
                        {
                                flag&=0x0D;                //Çå³ý±ê־λ£¬È¡ÏûУ׼ǰ²»ÔÙÌæ»»
                                TS_Buf[3][TS_Select&0x0F]=TS_Buf[1][TS_Select&0x0F];
                        }
                        else                                //·ÇÊ״νøÈ뵥ͨµÀ×î´óֵУ׼״̬£¬±È½Ïµ±Ç°ÖµºÍ×î´óÖµ£¬²¢ÓýϴóÖµÌæ»»×î´óÖµ
                        {
                                TS_Buf[3][TS_Select&0x0F]=Compare(1,TS_Buf[1][TS_Select&0x0F],TS_Buf[3][TS_Select&0x0F]);
                        }
                break;
                case 3:                                        //У׼ËùÓÐͨµÀ×îСֵ
                        if(flag&0x04)                //Ê״νøÈëËùÓÐͨµÀ×îСֵУ׼״̬£¬Ê¹Óõ±Ç°ÖµÌæ»»×îСֵ
                        {
                                flag&=0x0B;                //Çå³ý±ê־λ£¬È¡ÏûУ׼ǰ²»ÔÙÌæ»»
                                for(i=0;i<TS_Channel;i++)
                                {
                                        TS_Buf[2]=TS_Buf[1];
                                }
                        }
                        else                                //·ÇÊ״νøÈëËùÓÐͨµÀ×îСֵУ׼״̬£¬±È½Ïµ±Ç°ÖµºÍ×îСֵ£¬²¢ÓýÏÐ¡ÖµÌæ»»×îСֵ
                        {
                                for(i=0;i<TS_Channel;i++)
                                {
                                        TS_Buf[2]=Compare(0,TS_Buf[1],TS_Buf[2]);
                                }
                        }
                break;
                case 4:                                        //У׼ËùÓÐͨµÀ×î´óÖµ
                        if(flag&0x08)                //Ê״νøÈëËùÓÐͨµÀ×î´óֵУ׼״̬£¬Ê¹Óõ±Ç°ÖµÌæ»»×î´óÖµ
                        {
                                flag&=0x07;                //Çå³ý±ê־λ£¬È¡ÏûУ׼ǰ²»ÔÙÌæ»»
                                for(i=0;i<TS_Channel;i++)
                                {
                                        TS_Buf[3]=TS_Buf[1];
                                }
                        }
                        else                                //·ÇÊ״νøÈëËùÓÐͨµÀ×î´óֵУ׼״̬£¬±È½Ïµ±Ç°ÖµºÍ×î´óÖµ£¬²¢ÓýϴóÖµÌæ»»×î´óÖµ
                        {
                                for(i=0;i<TS_Channel;i++)
                                {
                                        TS_Buf[3]=Compare(1,TS_Buf[1],TS_Buf[3]);
                                }
                        }
                break;
                default:
                       
                break;
        }
}

void Touch_Pad(void)        //´¥Ãþ°´Å¥
{
        unsigned char i;
        unsigned int limit_l,limit_h;
        limit_l=TS_Compare-TS_Range/2;
        limit_h=TS_Compare+TS_Range/2;
        for(i=0;i<9;i++)
        {
                if(TS_Buf[4]<=limit_l)
                {
                        TS_Pad&=~(0x01<<i);
                }
                if(TS_Buf[4]>=limit_h)
                {
                        TS_Pad|=0x01<<i;
                }
        }
}

void Touch_Ring(void)        //´¥Ãþ»¬»·
{
        unsigned char i,sector;
        unsigned int limit_l,limit_h,sum;
        limit_l=TS_Compare-TS_Range/2;
        limit_h=TS_Compare+TS_Range/2;
        TS_Ring=0;
        for(i=0;i<3;i++)                                //¼ÆËã´¥Ãþ»¬»·×´Ì¬
        {
                if(TS_Buf[4][i+9]<=limit_l)        //СÓڽϵͱȽÏÖµ±ê־λÖÃ0
                {
                        TS_Ring&=~(0x01<<i);
                }
                if(TS_Buf[4][i+9]>=limit_h)        //´óÓڽϸ߱ȽÏÖµ±ê־λÖÃ1
                {
                        TS_Ring|=0x01<<i;
                }
        }
        if(TS_Ring&0x07)                                //Èç¹ûµÍ3λÖÐÈÎÒâһλÓÐЧ±íʾ´¥Ãþ»¬»·°´ÏÂ
        {
                TS_Ring|=0x80;                                //´¥Ãþ»¬»·°´Ï£¬×î¸ßλΪ1
                if(TS_Ring==0x81|TS_Ring==0x82|TS_Ring==0x83|TS_Ring==0x84|TS_Ring==0x85|TS_Ring==0x86)        //°´ÏÂ״̬ÖÐÖ»ÓÐÕâ6ÖÖ״̬ÓÐЧ
                {
                        for(sum=0,i=9;i<12;i++)
                        {
                                sum+=TS_Buf[4];
                        }
                        if(TS_Buf[4][0x09]>=TS_Buf[4][0x0A]&&TS_Buf[4][0x09]>=TS_Buf[4][0x0B])                                //´¥Ãþ»¬»·ÔÚ10µ½2µãÖÓ·½Ïò£¨ÉÈÇø0»ò5£©
                        {
                                if(TS_Buf[4][0x0A]>=TS_Buf[4][0x0B])                                                                                        //BÏà´óÓÚµÈÓÚCÏ࣬ÔÚ0µ½2µãÖÓ·½Ïò£¨ÉÈÇø0£©
                                {
                                        sector=0;
                                        Ring=((TS_Buf[4][0x0A]-(TS_Buf[4][0x0B]*(TS_Buf[4][0x09]/(TS_Buf[4][0x0A]*2))))*0x0555UL)/(TS_Buf[4][0x09]+TS_Buf[4][0x0A]);
                                }
                                else                                                                                                                                                        //BÏàСÓÚCÏ࣬ÔÚ10µ½0µãÖÓ·½Ïò£¨ÉÈÇø5£©
                                {
                                        sector=5;
                                        Ring=((TS_Buf[4][0x09]+(TS_Buf[4][0x0A]*(TS_Buf[4][0x09]/(TS_Buf[4][0x0B]*2))))*0x0555UL)/(TS_Buf[4][0x0B]+TS_Buf[4][0x09])+0x0AAA;
                                }
                        }
                        else if(TS_Buf[4][0x0A]>=TS_Buf[4][0x09]&&TS_Buf[4][0x0A]>=TS_Buf[4][0x0B])                        //´¥Ãþ»¬»·ÔÚ2µ½6µãÖÓ·½Ïò£¨ÉÈÇø1»ò2£©
                        {
                                if(TS_Buf[4][0x0B]>=TS_Buf[4][0x09])                                                                                        //CÏà´óÓÚµÈÓÚAÏ࣬ÔÚ4µ½6µãÖÓ·½Ïò£¨ÉÈÇø2£©
                                {
                                        sector=2;
                                        Ring=((TS_Buf[4][0x0B]-(TS_Buf[4][0x09]*(TS_Buf[4][0x0A]/(TS_Buf[4][0x0B]*2))))*0x0555UL)/(TS_Buf[4][0x0A]+TS_Buf[4][0x0B])+0x0555;
                                }
                                else                                                                                                                                                        //CÏàСÓÚAÏ࣬ÔÚ2µ½4µãÖÓ·½Ïò£¨ÉÈÇø1£©
                                {
                                        sector=1;
                                        Ring=((TS_Buf[4][0x0A]+(TS_Buf[4][0x0B]*(TS_Buf[4][0x0A]/(TS_Buf[4][0x09]*2))))*0x0555UL)/(TS_Buf[4][0x09]+TS_Buf[4][0x0A]);
                                }
                        }
                        else if(TS_Buf[4][0x0B]>=TS_Buf[4][0x09]&&TS_Buf[4][0x0B]>=TS_Buf[4][0x0A])                        //´¥Ãþ»¬»·ÔÚ6µ½10µãÖÓ·½Ïò£¨ÉÈÇø3»ò4£©
                        {
                                if(TS_Buf[4][0x09]>=TS_Buf[4][0x0A])                                                                                        //AÏà´óÓÚµÈÓÚBÏ࣬ÔÚ8µ½10µãÖÓ·½Ïò£¨ÉÈÇø4£©
                                {
                                        sector=4;
                                        Ring=((TS_Buf[4][0x09]-(TS_Buf[4][0x0A]*(TS_Buf[4][0x0B]/(TS_Buf[4][0x09]*2))))*0x0555UL)/(TS_Buf[4][0x0B]+TS_Buf[4][0x09])+0x0AAA;
                                }
                                else                                                                                                                                                        //AÏàСÓÚBÏ࣬ÔÚ6µ½8µãÖÓ·½Ïò£¨ÉÈÇø3£©
                                {
                                        sector=3;
                                        Ring=((TS_Buf[4][0x0B]+(TS_Buf[4][0x09]*(TS_Buf[4][0x0B]/(TS_Buf[4][0x0A]*2))))*0x0555UL)/(TS_Buf[4][0x0A]+TS_Buf[4][0x0B])+0x0555;
                                }
                        }
                }
                else        //È«°´ÏÂÎÞЧ£¬´¥Ãþ»¬»·ÖµÎª0
                {
                        Ring=0;
                }
        }
        else                //´¥Ãþ»¬»·Ã»Óа´Ïµģ¬¸´Î»±ê־룬´¥Ãþ»¬»·ÖµÎª0
        {
                TS_Ring&=0x7F;
                Ring=0;
        }
}

void Touch_Slide(void)        //´¥Ãþ»¬Ìõ
{
        unsigned char i;
        unsigned int limit_l,limit_h,sum;
        limit_l=TS_Compare-TS_Range/2;
        limit_h=TS_Compare+TS_Range/2;
        TS_Slide=0;
        for(i=0;i<4;i++)
        {
                if(TS_Buf[4][i+12]<=limit_l)
                {
                        TS_Slide&=~(0x01<<i);
                }
                if(TS_Buf[4][i+12]>=limit_h)
                {
                        TS_Slide|=0x01<<i;
                }
        }
        if(TS_Slide&0x0F)
        {
                TS_Slide|=0x80;
                if(TS_Slide==0x81|TS_Slide==0x82|TS_Slide==0x83|TS_Slide==0x84|TS_Slide==0x86|TS_Slide==0x87|TS_Slide==0x88|TS_Slide==0x8C|TS_Slide==0x8E)
                {
                        for(sum=0,i=8;i<12;i++)
                        {
                                sum+=TS_Buf[4];
                        }
                        if(TS_Buf[4][0x0C]>=TS_Buf[4][0x0D]&&TS_Buf[4][0x0C]>=TS_Buf[4][0x0E]&&TS_Buf[4][0x0C]>=TS_Buf[4][0x0F])
                        {
                                Slide=0x0000;
                        }
                        else if(TS_Buf[4][0x0D]>=TS_Buf[4][0x0C]&&TS_Buf[4][0x0D]>=TS_Buf[4][0x0E]&&TS_Buf[4][0x0D]>=TS_Buf[4][0x0F])
                        {
                                Slide=0x0555;
                        }
                        else if(TS_Buf[4][0x0E]>=TS_Buf[4][0x0C]&&TS_Buf[4][0x0E]>=TS_Buf[4][0x0D]&&TS_Buf[4][0x0E]>=TS_Buf[4][0x0F])
                        {
                                Slide=0x0AAA;
                        }
                        else if(TS_Buf[4][0x0F]>=TS_Buf[4][0x0C]&&TS_Buf[4][0x0F]>=TS_Buf[4][0x0D]&&TS_Buf[4][0x0F]>=TS_Buf[4][0x0E])
                        {
                                Slide=0x0FFF;
                        }
                        else
                        {
                                Slide=0;
                        }
                }
                else
                {
                        Slide=0;
                }
        }
        else
        {
                TS_Slide&=0x7F;
                Slide=0;
        }
}

void Touch_Key(void)
{
        unsigned char i;
        if(TS_Flag)
        {
                TS_Flag=0;
                for(i=0;i<TS_Channel;i++)
                {
                        TS_Buf[1]=TS_Buf[1]*3+((0xFFFF-TS_Buf[0])>>2)>>2;
                        if(TS_Buf[3]>TS_Buf[2])
                        {
                                TS_Buf[4]=(TS_Buf[1]>TS_Buf[2]?(TS_Buf[1]-TS_Buf[2]):0)*0x1000UL/(TS_Buf[3]-TS_Buf[2]);
                                if(TS_Buf[4]>0x0FFF)
                                {
                                        TS_Buf[4]=0x0FFF;
                                }
                        }
                        else
                        {
                                TS_Buf[4]=0;
                        }
                }
                Calibrate();
                Touch_Pad();
                Touch_Ring();
                Touch_Slide();
        }
}

void Init(void)
{
        //P_SW2|=EAXFR;
                P_SW2 |= 0x80;        //ÔÊÐí·ÃÎÊXSF
        P0=0x00;
        P1=0x00;
        P2=0x00;
        P3=0x0F;
        P4=0x00;
        P5=0x00;
       
        P0M0=0x80;
        P0M1=0x7F;
        P1M0=0x00;
        P1M1=0xFF;
        P2M0=0xFF;
        P2M1=0x00;
        P3M0=0x72;
        P3M1=0x80;
        P4M0=0xFF;
        P4M1=0x00;
        P5M0=0x00;
        P5M1=0xFF;
       
//        X32KCR=0xC0;        //Æô¶¯Íⲿ32768¾§Õñ£¬ÉèÖøßÔöÒæ
//        while(!(X32KCR&0x01));
       
        AUXR=0x05;                //ÉèÖö¨Ê±Æ÷0ʱÖÓΪ12Tģʽ£¬ÉèÖö¨Ê±Æ÷2Ϊ1Tģʽ£¬ÉèÖö¨Ê±Æ÷2Ϊ²¨ÌØÂÊ·¢ÉúÆ÷
        TMOD=0x01;                //ÉèÖö¨Ê±Æ÷0Ϊ16λ²»×Ô¶¯ÖØ×°ÔØÄ£Ê½
        TH0=TMR>>8;                //ÉèÖö¨Ê±Æ÷0³õʼֵ
        TL0=TMR;                //ÉèÖö¨Ê±Æ÷0³õʼֵ       
        TF0=0;                        //Çå³ýTF0Öжϱê־λ
        ET0=1;                        //ÆôÓö¨Ê±Æ÷0ÖжÏ
       
        SCON=0x50;                //ÉèÖÃUART1ģʽΪ8λÊý¾Ý¿É±ä²¨ÌØÂÊ
        T2H=BRT>>8;                //ÉèÖÃUART1²¨ÌØÂÊ
        T2L=BRT;                //ÉèÖÃUART1²¨ÌØÂÊ
        AUXR|=0x10;                //´ò¿ª¶¨Ê±Æ÷2
        ES=1;                        //ÆôÓÃUART1ÖжÏ
       
        TSCHEN1=0xFF;        //TK00~TK07
        TSCHEN2=0xFF;        //TK08~TK15
        TSRT=0x00;                //ûÓÐLED·ÖʱɨÃè
        TSCFG1=0x73;        //¿ª¹ØµçÈݹ¤×÷ƵÂÊ = fosc/(2*(TSCFG1[6:4]+1))£¬·Åµçʱ¼ä(ϵͳʱÖÓÖÜÆÚÊý) 0(125) 1(250) 2(500) 3(1000) 4(2000) 5(2500) 6(5000) 7(7500) ×îС3
        TSCFG2=0x03;        //ÅäÖô¥Ãþ°´¼ü¿ØÖÆÆ÷µÄÄÚ²¿²Î¿¼µçѹ(AVCCµÄ·Öѹ±È)£¬0(1/4)  1(1/2)  2(5/8)  3(3/4)
        TSCTRL=0x33;        //ÖØ¸´É¨Ãèģʽ£¬Íê³ÉÒ        »ÂÖɨÃèÔÝÍ££¬µÍ¹¦ºÄģʽʱÖÓΪÍⲿ32768¾§Õñ£¬¹Ø±ÕÊý×Ö±È½ÏÆ÷£¬¹Ø±ÕµÍ¹¦ºÄ»½ÐÑ£¬4´Îƽ¾ù£¬B7: TSGO£¬B6: SINGLE£¬B5: TSWAIT£¬B4: TSWUCS£¬B3: TSDCEN£¬B2: TSWUEN£¬B1 B0: TSSAMP
        TSCTRL|=0x80;        //¿ªÊ¼É¨Ãè
        IE2|=0x80;                //ÆôÓô¥ÃþÖжÏ
       
        COMEN=0xFF;                //ʹÄÜCOM
        SEGENL=0xFF;        //ʹÄÜSEG
        SEGENH=0x70;        //ʹÄÜSEG
        LEDCTRL=0xA0;        //ʹÄÜLEDÇý¶¯Æ÷£¬¹²Òõ¹²Ñôģʽ£¬ÁÁ¶È100%
        LEDCKS=0x00;        //
       
        EA=1;                        //ÆôÓÃ×ÜÖжÏ
       
        COM0_DA_L=0x00;
        COM0_DA_H=0x00;
        COM1_DA_L=0x00;
        COM1_DA_H=0x00;
        COM2_DA_L=0x00;
        COM2_DA_H=0x00;
        COM3_DA_L=0x00;
        COM3_DA_H=0x00;
        COM4_DA_L=0x00;
        COM4_DA_H=0x00;
        COM5_DA_L=0x00;
        COM5_DA_H=0x00;
        COM6_DA_L=0x00;
        COM6_DA_H=0x00;
        COM7_DA_L=0x00;
        COM7_DA_H=0x00;
        COM0_DC_L=0x00;
        COM0_DC_H=0x00;
        COM1_DC_L=0x00;
        COM1_DC_H=0x00;
        COM2_DC_L=0x00;
        COM2_DC_H=0x00;
        COM3_DC_L=0x00;
        COM3_DC_H=0x00;
        COM4_DC_L=0x00;
        COM4_DC_H=0x00;
        COM5_DC_L=0x00;
        COM5_DC_H=0x00;
        COM6_DC_L=0x00;
        COM6_DC_H=0x00;
        COM7_DC_L=0x00;
        COM7_DC_H=0x00;
       
        memset(R_Buf,0x00,sizeof R_Buf);
        memset(T_Buf,0x00,sizeof T_Buf);
        memset(TS_Buf,0x00,sizeof TS_Buf);
       
        TS_Buf[2][0x00]=11570;
        TS_Buf[2][0x01]=11352;
        TS_Buf[2][0x02]=11496;
        TS_Buf[2][0x03]=11365;
        TS_Buf[2][0x04]=11279;
        TS_Buf[2][0x05]=11188;
        TS_Buf[2][0x06]=11346;
        TS_Buf[2][0x07]=11282;
        TS_Buf[2][0x08]=11010;
        TS_Buf[2][0x09]=13986;
        TS_Buf[2][0x0A]=14044;
        TS_Buf[2][0x0B]=14051;
        TS_Buf[2][0x0C]=12218;
        TS_Buf[2][0x0D]=12200;
        TS_Buf[2][0x0E]=12531;
        TS_Buf[2][0x0F]=12320;
        TS_Buf[3][0x00]=14863;
        TS_Buf[3][0x01]=14798;
        TS_Buf[3][0x02]=14860;
        TS_Buf[3][0x03]=14897;
        TS_Buf[3][0x04]=14781;
        TS_Buf[3][0x05]=14859;
        TS_Buf[3][0x06]=14882;
        TS_Buf[3][0x07]=14922;
        TS_Buf[3][0x08]=14838;
        TS_Buf[3][0x09]=14987;
        TS_Buf[3][0x0A]=14881;
        TS_Buf[3][0x0B]=14965;
        TS_Buf[3][0x0C]=14616;
        TS_Buf[3][0x0D]=14306;
        TS_Buf[3][0x0E]=14357;
        TS_Buf[3][0x0F]=14573;
       
        TS_Select=0x48;
}

void main(void)
{
        Init();
       
        P20 = 0;
        P21 = 0;
       
       
        P34 = 1;
        P35 = 1;
        P36 = 1;
       
        while(1)
        {

       
               
               
//                Touch_Key();
//                LED();
//                Buzzer();
        }
}

void Uart_Start(void)
{
        TH0=TMR>>8;
        TL0=TMR;
        TR0=1;
}

void Uart_Stop(void)
{
        TR0=0;
        TH0=TMR>>8;
        TL0=TMR;
        RP=0;
        memset(R_Buf,0x00,sizeof R_Buf);
}

void Timer0_Isr(void) interrupt TMR0_VECTOR                                        //Èí¼þ×ö´®¿Ú³¬Ê±Åжϣ¬³¬Ê±ºó´¦ÀíÊý¾Ý
{
        if(((R_Buf[0]>>4)<=4))                                                                        //¸ß4λΪ0~4Çл»Í¨µÀÏÔʾ£¬ÏÔʾTS_Buf[x][y]£¬¸ß4λΪx£¬µÍ4λΪy
                TS_Select=R_Buf[0];
        else if(((R_Buf[0]>>4)==0x05)&&((R_Buf[0]&0x0F)<=0x04))        //¸ß4λΪ5ÇÒµÍ4λΪ0~4ÉèÖÃУ׼״̬£¬0x50È¡ÏûУ׼£¬0x51У׼µ¥Í¨µÀ×îСֵ£¬0x52У׼µ¥Í¨µÀ×î´óÖµ£¬0x53У׼ËùÓÐͨµÀ×îСֵ£¬0x54У׼ËùÓÐͨµÀ×î´óÖµ
                TS_Calibrate=R_Buf[0]&0x07;
        UART_Return(RP);                                                                                //Ô­Ñù·µ»ØÊÕµ½µÄÄÚÈÝ
        Uart_Stop();
}

void Uart1_Isr(void) interrupt UART1_VECTOR
{
        if(RI)
        {
                RI=0;
                Uart_Start();
                R_Buf[RP]=SBUF;
                if(RP==R_Buf_Len-1)
                {
                        Uart_Stop();
                }
                else if(TR0)
                {
                        RP++;
                }
        }
        if(TI)
        {
                TI=0;
                if(TP==Uart_T_Len)
                {
                        TP=0;
                        Uart_T_Len=0;
                }
                if(Uart_T_Len!=0)
                {
                        SBUF=(T_Buf[TP]);
                        TP++;
                }
        }
}

void TKSU_Isr(void) interrupt 13
{
        unsigned char temp;
        temp=TSSTA2;
        if(temp&0x40)                                                                //Êý¾ÝÒç³ö, ´íÎó´¦Àí
        {
                TSSTA2|=0x40;                                                        //д1ÇåÁã
        }
        else if(temp&0x80)                                                        //ɨÃèÍê³É
        {
                TS_Scan=temp&0x0f;
                if(TS_Map[TS_Scan]!=0xFF)                                //Èç¹ûͨµÀÕýÈ·
                {
                        TS_Buf[0][TS_Map[TS_Scan]]=TSDAT;        //±£´æÄ³¸öͨµÀµÄ¶ÁÊý
                        TS_Flag=1;
                }
        }
        TSSTA2|=0x80;                                                                //д1ÇåÁã
}

回复

使用道具 举报 送花

  • 打卡等级:以坛为家III
  • 打卡总天数:647
  • 最近打卡:2025-12-18 07:29:35
已绑定手机

93

主题

6940

回帖

1万

积分

超级版主

积分
13026
发表于 前天 18:15 | 显示全部楼层
可以先直接往IO口写高低电平验证一下硬件是否正常
这几个IO都设置为推挽
逻辑如下
P20=1
P34=0
P35=0
P36=0
正常后再看例程
LED_Buf[0x00]控制这个灯
值是0~7
3bit分别对应RGB

可以直接赋值测试
截图202512171816549142.jpg

例程正常工作时是按下左上角的触摸按键时才点亮
如不能正常工作要先调触摸按键
回复

使用道具 举报 送花

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

本版积分规则

QQ|手机版|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

GMT+8, 2025-12-19 10:25 , Processed in 0.104652 second(s), 53 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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