uutamiwn 发表于 2025-12-16 23:42:19

rgbLED 驱动

rgb 没点亮;

不知道为啥





#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;                //Uart2½ÓÊÕ»º´æ
unsigned char xdata        T_Buf;                //Uart2·¢ËÍ»º´æ
unsigned char code        Seg_Map={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;
unsigned char                LED_Buf;
unsigned char code        TS_Map={0x06,0x07,0x0A,0x08,0x0C,0x0D,0x0E,0x0F,0x09,0x0B,0x04,0x05,0x00,0x01,0x02,0x03};        //´¥Ãþ°´¼üͨµÀÖØÓ³Éä
unsigned int xdata        TS_Buf;        //´¥Ãþ°´¼üÊý¾Ý£¨Êµ¼ÊÖµ¡¢Ô¤´¦ÀíÖµ¡¢×îСֵ¡¢×î´óÖµ¡¢½á¹û£©
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=((TS_Calibrate<<8)|TS_Select)>>4;
        Seg_Buf=((TS_Calibrate<<8)|TS_Select)&0x0F;
        Seg_Buf=16;
        Seg_Buf=TS_Buf/10000;
        Seg_Buf=TS_Buf%10000/1000;
        Seg_Buf=TS_Buf%1000/100;
        Seg_Buf=TS_Buf%100/10;
        Seg_Buf=TS_Buf%10;
        Seg_Buf=Slide%10000/1000;
        Seg_Buf=Slide%1000/100;
        Seg_Buf=Slide%100/10;
        Seg_Buf=Slide%10;
        Seg_Buf=Ring%10000/1000;
        Seg_Buf=Ring%1000/100;
        Seg_Buf=Ring%100/10;
        Seg_Buf=Ring%10;
}

void LED_Display(void)
{
        LED_Buf=TS_Pad&0x0001?0x07:0x00;
        LED_Buf=TS_Pad&0x0002?0x07:0x00;
        LED_Buf=TS_Pad&0x0004?0x07:0x00;
        LED_Buf=TS_Pad&0x0008?0x07:0x00;
        LED_Buf=TS_Pad&0x0010?0x07:0x00;
        LED_Buf=TS_Pad&0x0020?0x07:0x00;
        LED_Buf=TS_Pad&0x0040?0x07:0x00;
        LED_Buf=TS_Pad&0x0080?0x07:0x00;
        LED_Buf=TS_Pad&0x0100?0x07:0x00;
        LED_Buf=TS_Ring&0x01?0x07:0x00;
        LED_Buf=TS_Ring&0x02?0x07:0x00;
        LED_Buf=TS_Ring&0x04?0x07:0x00;
        LED_Buf=TS_Slide&0x01?0x07:0x00;
        LED_Buf=TS_Slide&0x02?0x07:0x00;
        LED_Buf=TS_Slide&0x04?0x07:0x00;
        LED_Buf=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];
                *(p+8+i)=(LED_Buf&0x07)<<4;
                *(p+16+i)=Seg_Map];
                *(p+24+i)=(LED_Buf&0x07)<<4;
        }
       
//        COM0_DA_L=Seg_Map];
//        COM1_DA_L=Seg_Map];
//        COM2_DA_L=Seg_Map];
//        COM3_DA_L=Seg_Map];
//        COM4_DA_L=Seg_Map];
//        COM5_DA_L=Seg_Map];
//        COM6_DA_L=Seg_Map];
//        COM7_DA_L=Seg_Map];
//        COM0_DC_L=Seg_Map];
//        COM1_DC_L=Seg_Map];
//        COM2_DC_L=Seg_Map];
//        COM3_DC_L=Seg_Map];
//        COM4_DC_L=Seg_Map];
//        COM5_DC_L=Seg_Map];
//        COM6_DC_L=Seg_Map];
//        COM7_DC_L=Seg_Map];
//        COM0_DA_H=(LED_Buf&0x07)<<4;
//        COM1_DA_H=(LED_Buf&0x07)<<4;
//        COM2_DA_H=(LED_Buf&0x07)<<4;
//        COM3_DA_H=(LED_Buf&0x07)<<4;
//        COM4_DA_H=(LED_Buf&0x07)<<4;
//        COM5_DA_H=(LED_Buf&0x07)<<4;
//        COM6_DA_H=(LED_Buf&0x07)<<4;
//        COM7_DA_H=(LED_Buf&0x07)<<4;
//        COM0_DC_H=(LED_Buf&0x07)<<4;
//        COM1_DC_H=(LED_Buf&0x07)<<4;
//        COM2_DC_H=(LED_Buf&0x07)<<4;
//        COM3_DC_H=(LED_Buf&0x07)<<4;
//        COM4_DC_H=(LED_Buf&0x07)<<4;
//        COM5_DC_H=(LED_Buf&0x07)<<4;
//        COM6_DC_H=(LED_Buf&0x07)<<4;
//        COM7_DC_H=(LED_Buf&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=TS_Buf;
                        }
                        else                                //·ÇÊ״νøÈ뵥ͨµÀ×îСֵУ׼״̬£¬±È½Ïµ±Ç°ÖµºÍ×îСֵ£¬²¢ÓýÏÐ¡ÖµÌæ»»×îСֵ
                        {
                                TS_Buf=Compare(0,TS_Buf,TS_Buf);
                        }
                break;
                case 2:                                        //У׼µ¥Í¨µÀ×î´óÖµ
                        if(flag&0x02)                //Ê״νøÈ뵥ͨµÀ×î´óֵУ׼״̬£¬Ê¹Óõ±Ç°ÖµÌæ»»×î´óÖµ
                        {
                                flag&=0x0D;                //Çå³ý±ê־λ£¬È¡ÏûУ׼ǰ²»ÔÙÌæ»»
                                TS_Buf=TS_Buf;
                        }
                        else                                //·ÇÊ״νøÈ뵥ͨµÀ×î´óֵУ׼״̬£¬±È½Ïµ±Ç°ÖµºÍ×î´óÖµ£¬²¢ÓýϴóÖµÌæ»»×î´óÖµ
                        {
                                TS_Buf=Compare(1,TS_Buf,TS_Buf);
                        }
                break;
                case 3:                                        //У׼ËùÓÐͨµÀ×îСֵ
                        if(flag&0x04)                //Ê״νøÈëËùÓÐͨµÀ×îСֵУ׼״̬£¬Ê¹Óõ±Ç°ÖµÌæ»»×îСֵ
                        {
                                flag&=0x0B;                //Çå³ý±ê־λ£¬È¡ÏûУ׼ǰ²»ÔÙÌæ»»
                                for(i=0;i<TS_Channel;i++)
                                {
                                        TS_Buf=TS_Buf;
                                }
                        }
                        else                                //·ÇÊ״νøÈëËùÓÐͨµÀ×îСֵУ׼״̬£¬±È½Ïµ±Ç°ÖµºÍ×îСֵ£¬²¢ÓýÏÐ¡ÖµÌæ»»×îСֵ
                        {
                                for(i=0;i<TS_Channel;i++)
                                {
                                        TS_Buf=Compare(0,TS_Buf,TS_Buf);
                                }
                        }
                break;
                case 4:                                        //У׼ËùÓÐͨµÀ×î´óÖµ
                        if(flag&0x08)                //Ê״νøÈëËùÓÐͨµÀ×î´óֵУ׼״̬£¬Ê¹Óõ±Ç°ÖµÌæ»»×î´óÖµ
                        {
                                flag&=0x07;                //Çå³ý±ê־λ£¬È¡ÏûУ׼ǰ²»ÔÙÌæ»»
                                for(i=0;i<TS_Channel;i++)
                                {
                                        TS_Buf=TS_Buf;
                                }
                        }
                        else                                //·ÇÊ״νøÈëËùÓÐͨµÀ×î´óֵУ׼״̬£¬±È½Ïµ±Ç°ÖµºÍ×î´óÖµ£¬²¢ÓýϴóÖµÌæ»»×î´óÖµ
                        {
                                for(i=0;i<TS_Channel;i++)
                                {
                                        TS_Buf=Compare(1,TS_Buf,TS_Buf);
                                }
                        }
                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<=limit_l)
                {
                        TS_Pad&=~(0x01<<i);
                }
                if(TS_Buf>=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<=limit_l)        //СÓڽϵͱȽÏÖµ±ê־λÖÃ0
                {
                        TS_Ring&=~(0x01<<i);
                }
                if(TS_Buf>=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;
                        }
                        if(TS_Buf>=TS_Buf&&TS_Buf>=TS_Buf)                                //´¥Ãþ»¬»·ÔÚ10µ½2µãÖÓ·½Ïò£¨ÉÈÇø0»ò5£©
                        {
                                if(TS_Buf>=TS_Buf)                                                                                        //BÏà´óÓÚµÈÓÚCÏ࣬ÔÚ0µ½2µãÖÓ·½Ïò£¨ÉÈÇø0£©
                                {
                                        sector=0;
                                        Ring=((TS_Buf-(TS_Buf*(TS_Buf/(TS_Buf*2))))*0x0555UL)/(TS_Buf+TS_Buf);
                                }
                                else                                                                                                                                                        //BÏàСÓÚCÏ࣬ÔÚ10µ½0µãÖÓ·½Ïò£¨ÉÈÇø5£©
                                {
                                        sector=5;
                                        Ring=((TS_Buf+(TS_Buf*(TS_Buf/(TS_Buf*2))))*0x0555UL)/(TS_Buf+TS_Buf)+0x0AAA;
                                }
                        }
                        else if(TS_Buf>=TS_Buf&&TS_Buf>=TS_Buf)                        //´¥Ãþ»¬»·ÔÚ2µ½6µãÖÓ·½Ïò£¨ÉÈÇø1»ò2£©
                        {
                                if(TS_Buf>=TS_Buf)                                                                                        //CÏà´óÓÚµÈÓÚAÏ࣬ÔÚ4µ½6µãÖÓ·½Ïò£¨ÉÈÇø2£©
                                {
                                        sector=2;
                                        Ring=((TS_Buf-(TS_Buf*(TS_Buf/(TS_Buf*2))))*0x0555UL)/(TS_Buf+TS_Buf)+0x0555;
                                }
                                else                                                                                                                                                        //CÏàСÓÚAÏ࣬ÔÚ2µ½4µãÖÓ·½Ïò£¨ÉÈÇø1£©
                                {
                                        sector=1;
                                        Ring=((TS_Buf+(TS_Buf*(TS_Buf/(TS_Buf*2))))*0x0555UL)/(TS_Buf+TS_Buf);
                                }
                        }
                        else if(TS_Buf>=TS_Buf&&TS_Buf>=TS_Buf)                        //´¥Ãþ»¬»·ÔÚ6µ½10µãÖÓ·½Ïò£¨ÉÈÇø3»ò4£©
                        {
                                if(TS_Buf>=TS_Buf)                                                                                        //AÏà´óÓÚµÈÓÚBÏ࣬ÔÚ8µ½10µãÖÓ·½Ïò£¨ÉÈÇø4£©
                                {
                                        sector=4;
                                        Ring=((TS_Buf-(TS_Buf*(TS_Buf/(TS_Buf*2))))*0x0555UL)/(TS_Buf+TS_Buf)+0x0AAA;
                                }
                                else                                                                                                                                                        //AÏàСÓÚBÏ࣬ÔÚ6µ½8µãÖÓ·½Ïò£¨ÉÈÇø3£©
                                {
                                        sector=3;
                                        Ring=((TS_Buf+(TS_Buf*(TS_Buf/(TS_Buf*2))))*0x0555UL)/(TS_Buf+TS_Buf)+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<=limit_l)
                {
                        TS_Slide&=~(0x01<<i);
                }
                if(TS_Buf>=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;
                        }
                        if(TS_Buf>=TS_Buf&&TS_Buf>=TS_Buf&&TS_Buf>=TS_Buf)
                        {
                                Slide=0x0000;
                        }
                        else if(TS_Buf>=TS_Buf&&TS_Buf>=TS_Buf&&TS_Buf>=TS_Buf)
                        {
                                Slide=0x0555;
                        }
                        else if(TS_Buf>=TS_Buf&&TS_Buf>=TS_Buf&&TS_Buf>=TS_Buf)
                        {
                                Slide=0x0AAA;
                        }
                        else if(TS_Buf>=TS_Buf&&TS_Buf>=TS_Buf&&TS_Buf>=TS_Buf)
                        {
                                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=TS_Buf*3+((0xFFFF-TS_Buf)>>2)>>2;
                        if(TS_Buf>TS_Buf)
                        {
                                TS_Buf=(TS_Buf>TS_Buf?(TS_Buf-TS_Buf):0)*0x1000UL/(TS_Buf-TS_Buf);
                                if(TS_Buf>0x0FFF)
                                {
                                        TS_Buf=0x0FFF;
                                }
                        }
                        else
                        {
                                TS_Buf=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+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=11570;
        TS_Buf=11352;
        TS_Buf=11496;
        TS_Buf=11365;
        TS_Buf=11279;
        TS_Buf=11188;
        TS_Buf=11346;
        TS_Buf=11282;
        TS_Buf=11010;
        TS_Buf=13986;
        TS_Buf=14044;
        TS_Buf=14051;
        TS_Buf=12218;
        TS_Buf=12200;
        TS_Buf=12531;
        TS_Buf=12320;
        TS_Buf=14863;
        TS_Buf=14798;
        TS_Buf=14860;
        TS_Buf=14897;
        TS_Buf=14781;
        TS_Buf=14859;
        TS_Buf=14882;
        TS_Buf=14922;
        TS_Buf=14838;
        TS_Buf=14987;
        TS_Buf=14881;
        TS_Buf=14965;
        TS_Buf=14616;
        TS_Buf=14306;
        TS_Buf=14357;
        TS_Buf=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>>4)<=4))                                                                        //¸ß4λΪ0~4Çл»Í¨µÀÏÔʾ£¬ÏÔʾTS_Buf£¬¸ß4λΪx£¬µÍ4λΪy
                TS_Select=R_Buf;
        else if(((R_Buf>>4)==0x05)&&((R_Buf&0x0F)<=0x04))        //¸ß4λΪ5ÇÒµÍ4λΪ0~4ÉèÖÃУ׼״̬£¬0x50È¡ÏûУ׼£¬0x51У׼µ¥Í¨µÀ×îСֵ£¬0x52У׼µ¥Í¨µÀ×î´óÖµ£¬0x53У׼ËùÓÐͨµÀ×îСֵ£¬0x54У׼ËùÓÐͨµÀ×î´óÖµ
                TS_Calibrate=R_Buf&0x07;
        UART_Return(RP);                                                                                //Ô­Ñù·µ»ØÊÕµ½µÄÄÚÈÝ
        Uart_Stop();
}

void Uart1_Isr(void) interrupt UART1_VECTOR
{
        if(RI)
        {
                RI=0;
                Uart_Start();
                R_Buf=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++;
                }
        }
}

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!=0xFF)                                //Èç¹ûͨµÀÕýÈ·
                {
                        TS_Buf]=TSDAT;        //±£´æÄ³¸öͨµÀµÄ¶ÁÊý
                        TS_Flag=1;
                }
        }
        TSSTA2|=0x80;                                                                //д1ÇåÁã
}

DebugLab 发表于 2025-12-17 18:15:07

可以先直接往IO口写高低电平验证一下硬件是否正常
这几个IO都设置为推挽
逻辑如下
P20=1
P34=0
P35=0
P36=0
正常后再看例程
LED_Buf控制这个灯
值是0~7
3bit分别对应RGB

可以直接赋值测试


例程正常工作时是按下左上角的触摸按键时才点亮
如不能正常工作要先调触摸按键
页: [1]
查看完整版本: rgbLED 驱动