找回密码
 立即注册
楼主: xie2101

学习实验箱-V9.6视频

[复制链接]
  • 打卡等级:常住居民I
  • 打卡总天数:61
  • 最近打卡:2025-10-15 19:44:33

13

主题

98

回帖

501

积分

高级会员

积分
501
发表于 2025-9-11 14:51:42 | 显示全部楼层
02-Timer0-Timer1-Timer2-Timer3-Timer4测试程序

1, 硬件连接方式:
截图202509111440208035.jpg

2,烧录:

截图202509111443134667.jpg


3. 查看例子说明

截图202509111444577091.jpg


4. 查看原理图:

截图202509111447518582.jpg

5. 实物对应位置:

截图202509111451362951.jpg

回复

使用道具 举报 送花

  • 打卡等级:常住居民I
  • 打卡总天数:61
  • 最近打卡:2025-10-15 19:44:33

13

主题

98

回帖

501

积分

高级会员

积分
501
发表于 2025-9-11 15:02:29 | 显示全部楼层
例子 《03-用P6,P7口驱动8个数码管》


1. 硬件连接:
截图202509111456077932.jpg


2. 烧写:

截图202509111457402977.jpg


3. 原理图:

截图202509111459062943.jpg


4.烧写完成后,可以查看实际效果:
截图202509111500051638.jpg

5. 实际显示内容位一个数字时钟。
截图202509111502121040.jpg

回复

使用道具 举报 送花

  • 打卡等级:常住居民I
  • 打卡总天数:61
  • 最近打卡:2025-10-15 19:44:33

13

主题

98

回帖

501

积分

高级会员

积分
501
发表于 2025-9-11 15:19:09 | 显示全部楼层


第一步:硬件连接:

截图202509111512374222.jpg



第二步:烧写
截图202509111511502898.jpg



第三步:查看例子说明

截图202509111510373010.jpg


第4步:查看原理图

截图202509111514114853.jpg


第5步:查看实物效果.

截图202509111519059984.jpg


截图202509111511474268.jpg
回复

使用道具 举报 送花

  • 打卡等级:常住居民I
  • 打卡总天数:61
  • 最近打卡:2025-10-15 19:44:33

13

主题

98

回帖

501

积分

高级会员

积分
501
发表于 2025-9-11 15:34:52 | 显示全部楼层


例子   17-NTC测温度数码管显示

1. 硬件连接: 略

2. 烧写:


截图202509111523535226.jpg


3. 查看例子说明:

截图202509111527557222.jpg


4.查看原理图:


截图202509111533052673.jpg


5. 实物对照:

截图202509111534487270.jpg


回复

使用道具 举报 送花

  • 打卡等级:常住居民I
  • 打卡总天数:61
  • 最近打卡:2025-10-15 19:44:33

13

主题

98

回帖

501

积分

高级会员

积分
501
发表于 2025-9-11 15:43:18 | 显示全部楼层
例子:  25-高级PWM1-PWM2-PWM3-PWM4,驱动P6口呼吸灯实验程序






步骤1:硬件连接(略)
步骤2:烧写

截图202509111538223637.jpg


步骤3:查看原理图:

截图202509111540315005.jpg

步骤4:查看实物:

截图202509111541157186.jpg


步骤5: 查看例子说明:

截图202509111543135902.jpg

截图202509111534557099.jpg
回复

使用道具 举报 送花

  • 打卡等级:常住居民I
  • 打卡总天数:61
  • 最近打卡:2025-10-15 19:44:33

13

主题

98

回帖

501

积分

高级会员

积分
501
发表于 2025-9-11 16:11:55 | 显示全部楼层
例子程序   29-红外遥控接收程序(NEC码)-数码管显示用户地址和键值


1、硬件连接:


2. 烧写
截图202509111605394917.jpg


3、原理图 :
截图202509111608443823.jpg

4. 查看例子说明

截图202509111611434424.jpg


回复

使用道具 举报 送花

  • 打卡等级:常住居民I
  • 打卡总天数:61
  • 最近打卡:2025-10-15 19:44:33

13

主题

98

回帖

501

积分

高级会员

积分
501
发表于 2025-9-11 16:30:49 | 显示全部楼层
截图202509111630468668.jpg

截图202509111902287313.jpg

回复

使用道具 举报 送花

  • 打卡等级:常住居民I
  • 打卡总天数:61
  • 最近打卡:2025-10-15 19:44:33

13

主题

98

回帖

501

积分

高级会员

积分
501
发表于 2025-9-11 18:05:27 | 显示全部楼层
例子 15-IO行列扫描键盘数码管显示键值和调整时间
截图202509111804562738.jpg
没有看懂下面这个读取方法
截图202509111811562149.jpg

回复

使用道具 举报 送花

  • 打卡等级:常住居民I
  • 打卡总天数:61
  • 最近打卡:2025-10-15 19:44:33

13

主题

98

回帖

501

积分

高级会员

积分
501
发表于 2025-9-11 21:39:23 | 显示全部楼层
/*---------------------------------------------------------------------*/
/* --- STC MCU Limited ------------------------------------------------*/
/* --- STC 1T Series MCU Demo Programme -------------------------------*/
/* --- Mobile: (86)13922805190 ----------------------------------------*/
/* --- Fax: 86-0513-55012956,55012947,55012969 ------------------------*/
/* --- Tel: 86-0513-55012928,55012929,55012966 ------------------------*/
/* --- Web: www.STCAI.com ---------------------------------------------*/
/* --- BBS: www.STCAIMCU.com  -----------------------------------------*/
/* --- QQ:  800003751 -------------------------------------------------*/
/* Èç¹ûÒªÔÚ³ÌÐòÖÐʹÓô˴úÂë,ÇëÔÚ³ÌÐòÖÐ×¢Ã÷ʹÓÃÁËSTCµÄ×ÊÁϼ°³ÌÐò            */
/*---------------------------------------------------------------------*/

/*************  ¹¦ÄÜ˵Ã÷    **************

±¾Àý³Ì»ùÓÚSTC32GΪÖ÷¿ØÐ¾Æ¬µÄʵÑéÏä½øÐбàд²âÊÔ¡£

ʹÓÃKeil C251±àÒëÆ÷£¬Memory ModelÍÆ¼öÉèÖÃXSmallģʽ£¬Ä¬È϶¨Òå±äÁ¿ÔÚedata£¬µ¥Ê±ÖÓ´æÈ¡·ÃÎÊËٶȿ졣

edata½¨Òé±£Áô1K¸ø¶ÑջʹÓ㬿ռ䲻¹»Ê±¿É½«´óÊý×é¡¢²»³£ÓñäÁ¿¼Óxdata¹Ø¼ü×Ö¶¨Òåµ½xdata¿Õ¼ä¡£

ÓÃSTCµÄMCUµÄIO·½Ê½Çý¶¯8λÊýÂë¹Ü¡£

ÏÔʾЧ¹ûΪ: ÊýÂëʱÖÓ.

ʹÓÃTimer0µÄ16λ×Ô¶¯ÖØ×°À´²úÉú1ms½ÚÅÄ,³ÌÐòÔËÐÐÓÚÕâ¸ö½ÚÅÄÏÂ,Óû§ÐÞ¸ÄMCUÖ÷ʱÖÓÆµÂÊʱ,×Ô¶¯¶¨Ê±ÓÚ1ms.

×ó±ß4λLEDÏÔʾʱ¼ä(Сʱ,·ÖÖÓ), ÓÒ±ß×îºóÁ½Î»ÏÔʾ°´¼üÖµ.

ADC°´¼ü¼üÂëΪ1~16.

°´¼üÖ»Ö§³Öµ¥¼ü°´ÏÂ, ²»Ö§³Ö¶à¼üͬʱ°´ÏÂ, ÄÇÑù½«»áÓв»¿ÉÔ¤ÖªµÄ½á¹û.

¼ü°´Ï³¬¹ý1Ãëºó,½«ÒÔ10¼ü/ÃëµÄËÙ¶ÈÌá¹©ÖØ¼üÊä³ö. Óû§Ö»ÐèÒª¼ì²âKeyCodeÊÇ·ñ·Ç0À´ÅжϼüÊÇ·ñ°´ÏÂ.

µ÷Õûʱ¼ä¼ü:
¼üÂë1: Сʱ+.
¼üÂë2: Сʱ-.
¼üÂë3: ·ÖÖÓ+.
¼üÂë4: ·ÖÖÓ-.

ÏÂÔØÊ±, Ñ¡ÔñʱÖÓ 24MHZ (Óû§¿É×ÔÐÐÐÞ¸ÄÆµÂÊ).

******************************************/

#include "..\..\comm\STC32G.h"

#include "stdio.h"
#include "intrins.h"

typedef     unsigned char   u8;
typedef     unsigned int    u16;
typedef     unsigned long   u32;

#define MAIN_Fosc        24000000UL

//==========================================================================


#define Timer0_Reload   (65536UL -(MAIN_Fosc / 1000))       //Timer 0 ÖÐ¶ÏÆµÂÊ, 1000´Î/Ãë

#define DIS_DOT     0x20
#define DIS_BLACK   0x10
#define DIS_        0x11


u8 code t_display[]={                       //±ê×¼×Ö¿â
//   0    1    2    3    4    5    6    7    8    9    A    B    C    D    E    F
    0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0x77,0x7C,0x39,0x5E,0x79,0x71,
//black  -     H    J    K    L    N    o   P    U     t    G    Q    r   M    y
    0x00,0x40,0x76,0x1E,0x70,0x38,0x37,0x5C,0x73,0x3E,0x78,0x3d,0x67,0x50,0x37,0x6e,
    0xBF,0x86,0xDB,0xCF,0xE6,0xED,0xFD,0x87,0xFF,0xEF,0x46};    //0. 1. 2. 3. 4. 5. 6. 7. 8. 9. -1

u8 code T_COM[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};      //λÂë


u8  LED8[8];        //ÏÔʾ»º³å
u8  display_index;  //ÏÔʾλË÷Òý
bit B_1ms;          //1ms±êÖ¾

u8  ADC_KeyState,ADC_KeyState1,ADC_KeyState2,ADC_KeyState3; //¼ü״̬
u8  ADC_KeyHoldCnt; //¼ü°´Ï¼ÆÊ±
u8  KeyCode;    //¸øÓû§Ê¹ÓõļüÂë, 1~16ÓÐЧ
u8  cnt10ms;

u8  SndKeyCode;
u8  hour,minute,second; //RTC±äÁ¿
u16 msecond;

void    CalculateAdcKey(u16 adc);
u16     Get_ADC12bitResult(u8 channel); //channel = 0~15
void    DisplayRTC(void);
void    RTC(void);

sbit    P_IR_TX   = P2^7;   //????????
#define IR_TX_ON    0
#define IR_TX_OFF   1
void PWM_config(void);
void SendIrNec(void);
/**********************************************/
void main(void)
{
    u8  i;
    u16 j;

    WTST = 0;  //ÉèÖóÌÐòÖ¸ÁîÑÓʱ²ÎÊý£¬¸³ÖµÎª0¿É½«CPUÖ´ÐÐÖ¸ÁîµÄËÙ¶ÈÉèÖÃΪ×î¿ì
    EAXFR = 1; //À©Õ¹¼Ä´æÆ÷(XFR)·ÃÎÊʹÄÜ
    CKCON = 0; //Ìá¸ß·ÃÎÊXRAMËÙ¶È

    P0M1 = 0x30;   P0M0 = 0x30;   //ÉèÖÃP0.4¡¢P0.5Ϊ©¼«¿ªÂ·(ʵÑéÏä¼ÓÁËÉÏÀ­µç×èµ½3.3V)
    P1M1 = 0x31;   P1M0 = 0x30;   //ÉèÖÃP1.4¡¢P1.5Ϊ©¼«¿ªÂ·(ʵÑéÏä¼ÓÁËÉÏÀ­µç×èµ½3.3V), P1.0 Ϊ ADC ¸ß×èÊäÈë¿Ú
    P2M1 = 0x3c;   P2M0 = 0x3c;   //ÉèÖÃP2.2~P2.5Ϊ©¼«¿ªÂ·(ʵÑéÏä¼ÓÁËÉÏÀ­µç×èµ½3.3V)
    P3M1 = 0x50;   P3M0 = 0x50;   //ÉèÖÃP3.4¡¢P3.6Ϊ©¼«¿ªÂ·(ʵÑéÏä¼ÓÁËÉÏÀ­µç×èµ½3.3V)
    P4M1 = 0x3c;   P4M0 = 0x3c;   //ÉèÖÃP4.2~P4.5Ϊ©¼«¿ªÂ·(ʵÑéÏä¼ÓÁËÉÏÀ­µç×èµ½3.3V)
    P5M1 = 0x0c;   P5M0 = 0x0c;   //ÉèÖÃP5.2¡¢P5.3Ϊ©¼«¿ªÂ·(ʵÑéÏä¼ÓÁËÉÏÀ­µç×èµ½3.3V)
    P6M1 = 0xff;   P6M0 = 0xff;   //ÉèÖÃΪ©¼«¿ªÂ·(ʵÑéÏä¼ÓÁËÉÏÀ­µç×èµ½3.3V)
    P7M1 = 0x00;   P7M0 = 0x00;   //ÉèÖÃΪ׼˫Ïò¿Ú

    PWM_config();
    P_IR_TX = IR_TX_OFF;
            
    display_index = 0;
   
    ADCTIM = 0x3f;      //ÉèÖà ADC ÄÚ²¿Ê±Ðò£¬ADC²ÉÑùʱ¼ä½¨ÒéÉè×î´óÖµ
    ADCCFG = 0x2f;      //ÉèÖà ADC ʱÖÓΪϵͳʱÖÓ/2/16/16
    ADC_CONTR = 0x80;   //ʹÄÜ ADC Ä£¿é

    AUXR = 0x80;    //Timer0 set as 1T, 16 bits timer auto-reload,
    TH0 = (u8)(Timer0_Reload / 256);
    TL0 = (u8)(Timer0_Reload % 256);
    ET0 = 1;    //Timer0 interrupt enable
    TR0 = 1;    //Tiner0 run
    EA = 1;     //´ò¿ª×ÜÖжÏ
   
    for(i=0; i<8; i++)  LED8 = 0x10; //ÉϵçÏûÒþ

    hour   = 12;    //³õʼ»¯Ê±¼äÖµ
    minute = 0;
    second = 0;
    DisplayRTC();

    ADC_KeyState  = 0;
    ADC_KeyState1 = 0;
    ADC_KeyState2 = 0;
    ADC_KeyState3 = 0;  //¼ü״̬
    ADC_KeyHoldCnt = 0; //¼ü°´Ï¼ÆÊ±
    KeyCode = 0;    //¸øÓû§Ê¹ÓõļüÂë, 1~16ÓÐЧ
    cnt10ms = 0;

    while(1)
    {
        if(B_1ms)   //1msµ½
        {
            B_1ms = 0;
            if(++msecond >= 1000)   //1Ãëµ½
            {
                msecond = 0;
                RTC();
                DisplayRTC();
            }
            if(msecond == 500)  DisplayRTC();   //СʱºóµÄСÊýµã×öÃëÉÁ

            if(++cnt10ms >= 10) //10ms¶ÁÒ»´ÎADC
            {
                cnt10ms = 0;
                j = Get_ADC12bitResult(0);  //²ÎÊý0~15,²éѯ·½Ê½×öÒ»´ÎADC, ·µ»ØÖµ¾ÍÊǽá¹û, == 4096 Ϊ´íÎó
                if(j < 4096)    {
                    CalculateAdcKey(j); //¼ÆËã°´¼ü
                }
            }

            if(KeyCode > 0)     //Óмü°´ÏÂ
            {
                SndKeyCode=KeyCode;
                KeyCode = 0;
                LED8[6] = SndKeyCode / 10; //ÏÔʾ¼üÂë
                LED8[7] = SndKeyCode % 10; //ÏÔʾ¼üÂë
                SendIrNec();
                if(SndKeyCode == 1)    //hour +1
                {
                    if(++hour >= 24)    hour = 0;
                    DisplayRTC();
                }
                if(SndKeyCode == 2)    //hour -1
                {
                    if(--hour >= 24)    hour = 23;
                    DisplayRTC();
                }
                if(SndKeyCode == 3)    //minute +1
                {
                    second = 0;
                    if(++minute >= 60)  minute = 0;
                    DisplayRTC();
                }
                if(SndKeyCode == 4)    //minute -1
                {
                    second = 0;
                    if(--minute >= 60)  minute = 59;
                    DisplayRTC();
                }
            }
        }
    }
}
/**********************************************/


/********************** ÏÔʾʱÖÓº¯Êý ************************/
void DisplayRTC(void)
{
    if(hour >= 10)  LED8[0] = hour / 10;
    else            LED8[0] = DIS_BLACK;
    LED8[1] = hour % 10;
    LED8[2] = minute / 10;
    LED8[3] = minute % 10;
    if(msecond >= 500)      LED8[1] |= DIS_DOT; //СʱºóµÄСÊýµã×öÃëÉÁ
}

/********************** RTCÑÝʾº¯Êý ************************/
void RTC(void)
{
    if(++second >= 60)
    {
        second = 0;
        if(++minute >= 60)
        {
            minute = 0;
            if(++hour >= 24)    hour = 0;
        }
    }
}


//========================================================================
// º¯Êý: u16 Get_ADC12bitResult(u8 channel)
// ÃèÊö: ²éѯ·¨¶ÁÒ»´ÎADC½á¹û.
// ²ÎÊý: channel: Ñ¡ÔñҪת»»µÄADC.
// ·µ»Ø: 12λADC½á¹û.
// °æ±¾: V1.0, 2012-10-22
//========================================================================
u16 Get_ADC12bitResult(u8 channel)  //channel = 0~15
{
    ADC_RES = 0;
    ADC_RESL = 0;

    ADC_CONTR = (ADC_CONTR & 0xf0) | channel; //ÉèÖÃADCת»»Í¨µÀ
    ADC_START = 1;//Æô¶¯ADCת»»
    _nop_();
    _nop_();
    _nop_();
    _nop_();

    while(ADC_FLAG == 0);   //wait for ADC finish
    ADC_FLAG = 0;     //Çå³ýADC½áÊø±êÖ¾
    return  (((u16)ADC_RES << 8) | ADC_RESL);
}

/***************** ADC¼üÅ̼ÆËã¼üÂë *****************************
µç·ºÍÈí¼þËã·¨Éè¼Æ: Coody
±¾ADC¼üÅÌ·½°¸Ôںܶàʵ¼Ê²úÆ·Éè¼ÆÖÐ, ÑéÖ¤ÁËÆäÎȶ¨¿É¿¿, ¼´Ê¹°´¼üʹÓõ¼µçĤ,¶¼ºÜ¿É¿¿.
16¸ö¼ü,ÀíÂÛÉϸ÷¸ö¼ü¶ÔÓ¦µÄADCֵΪ (4096 / 16) * k = 256 * k, k = 1 ~ 16, ÌØ±ðµÄ, k=16ʱ,¶ÔÓ¦µÄADCÖµÊÇ4095.
µ«ÊÇʵ¼Ê»áÓÐÆ«²î,ÔòÅжÏʱÏÞÖÆÕâ¸öÆ«²î, ADC_OFFSETΪ+-Æ«²î, ÔòADCÖµÔÚ (256*k-ADC_OFFSET) Óë (256*k+ADC_OFFSET)Ö®¼äΪ¼üÓÐЧ.
¼ä¸ôÒ»¶¨µÄʱ¼ä,¾Í²ÉÑùÒ»´ÎADC,±ÈÈç10ms.
ΪÁ˱ÜÃâżȻµÄADCÖµÎóÅÐ, »òÕß±ÜÃâADCÔÚÉÏÉý»òϽµÊ±ÎóÅÐ, ʹÓÃÁ¬Ðø3´ÎADCÖµ¾ùÔÚÆ«²î·¶Î§ÄÚʱ, ADCÖµ²ÅÈÏΪÓÐЧ.
ÒÔÉÏËã·¨, Äܱ£Ö¤¶Á¼ü·Ç³£¿É¿¿.
**********************************************/
#define ADC_OFFSET  64
void CalculateAdcKey(u16 adc)
{
    u8  i;
    u16 j;
   
    if(adc < (256-ADC_OFFSET))
    {
        ADC_KeyState = 0;   //¼ü״̬¹é0
        ADC_KeyHoldCnt = 0;
    }
    j = 256;
    for(i=1; i<=16; i++)
    {
        if((adc >= (j - ADC_OFFSET)) && (adc <= (j + ADC_OFFSET)))  break;  //ÅжÏÊÇ·ñÔÚÆ«²î·¶Î§ÄÚ
        j += 256;
    }
    ADC_KeyState3 = ADC_KeyState2;
    ADC_KeyState2 = ADC_KeyState1;
    if(i > 16)  ADC_KeyState1 = 0;  //¼üÎÞЧ
    else                        //¼üÓÐЧ
    {
        ADC_KeyState1 = i;
        if((ADC_KeyState3 == ADC_KeyState2) && (ADC_KeyState2 == ADC_KeyState1) &&
           (ADC_KeyState3 > 0) && (ADC_KeyState2 > 0) && (ADC_KeyState1 > 0))
        {
            if(ADC_KeyState == 0)   //µÚÒ»´Î¼ì²âµ½
            {
                KeyCode  = i;   //±£´æ¼üÂë
                ADC_KeyState = i;   //±£´æ¼ü״̬
                ADC_KeyHoldCnt = 0;
            }
            if(ADC_KeyState == i)   //Á¬Ðø¼ì²âµ½Í¬Ò»¼ü°´×Å
            {
                if(++ADC_KeyHoldCnt >= 100) //°´ÏÂ1Ãëºó,ÒÔ10´ÎÿÃëµÄËÙ¶ÈRepeat Key
                {
                    ADC_KeyHoldCnt = 90;
                    KeyCode  = i;   //±£´æ¼üÂë
                }
            }
            else ADC_KeyHoldCnt = 0; //°´ÏÂʱ¼ä¼ÆÊý¹é0
        }
    }
}


/********************** ÏÔʾɨÃ躯Êý ************************/
void DisplayScan(void)
{   
    P7 = ~T_COM[7-display_index];
    P6 = ~t_display[LED8[display_index]];
    if(++display_index >= 8)    display_index = 0;  //8λ½áÊø»Ø0
}


/********************** Timer0 1msÖжϺ¯Êý ************************/
void timer0 (void) interrupt 1
{
    DisplayScan();  //1msɨÃèÏÔʾһλ
    B_1ms = 1;      //1ms±êÖ¾
}

#define User_code   0xFE01      //???????

static u16     tx_cnt;     //??????????(??38KHZ????,????), ?????38KHZ, ??26.3us
u8      TxTime;     //????

/************* ?????? **************/
void IR_TxPulse(u16 pulse)
{
    tx_cnt = pulse;
    PWMA_CCER2 = 0x00; //? CCMRx ?????? CCxE ????
    PWMA_CCMR4 = 0x60; //?? PWM4 ??1 ??
    PWMA_CCER2 = 0x70; //?? CC4NE ??, ?????
    PWMA_IER = 0x10;   //????/?? 4 ??
    while(tx_cnt);
}

/************* ?????? **************/
void IR_TxSpace(u16 pulse)
{
    tx_cnt = pulse;
    PWMA_CCER2 = 0x00; //? CCMRx ?????? CCxE ????
    PWMA_CCMR4 = 0x40; //?? PWM4 ???????
    PWMA_CCER2 = 0x70; //?? CC4NE ??, ?????
    PWMA_IER = 0x10;   //????/?? 4 ??
    while(tx_cnt);
}

/************* ?????? **************/
void IR_TxOff(void)
{
    PWMA_CCER2 = 0x00; //? CCMRx ?????? CCxE ????
    PWMA_CCMR4 = 0x50; //?? PWM4 ???????
    PWMA_CCER2 = 0x70; //?? CC4NE ??, ?????
}

/************* ???????? **************/
void IR_TxByte(u8 dat)
{
    u8 i;
    for(i=0; i<8; i++)
    {
        if(dat & 1)     IR_TxSpace(63), TxTime += 2;    //??1?? 1.6875 + 0.5625 ms
        else            IR_TxSpace(21), TxTime++;       //??0?? 0.5625 + 0.5625 ms
        IR_TxPulse(21);         //????0.5625ms
        dat >>= 1;              //????
    }
}

//========================================================================
// ??: void   PWM_config(void)
// ??: PCA????.
// ??: None
// ??: none.
// ??: V1.0, 2012-11-22
//========================================================================
void PWM_config(void)
{
    PWMA_CCER2 = 0x00; //? CCMRx ?????? CCxE ????
    PWMA_CCMR4 = 0x60; //?? PWM4 ??1 ??
    //PWMA_CCER2 = 0xB0; //?? CC4E ??, ?????

    PWMA_ARRH = 0x02; //??????
    PWMA_ARRL = 0x77;
    PWMA_CCR4H = 0;
    PWMA_CCR4L = 210; //???????

    PWMA_PS = 0x40;  //?? PWM ?? 4N ??????, 0x00:P1.7, 0x40:P2.7, 0x80:P6.7, 0xC0:P3.3
//  PWMA_PS = 0x40;  //?? PWM ?? 4P ??????, 0x00:P1.6, 0x40:P2.6, 0x80:P6.6, 0xC0:P3.4
    PWMA_ENO = 0x80; //?? PWM4N ??
//  PWMA_ENO = 0x40; //?? PWM4P ??
    PWMA_BKR = 0x80; //?????
//    PWMA_IER = 0x10; //????
    PWMA_CR1 |= 0x81;  //??ARR???,????
}

/******************* PWM???? ********************/
void PWMA_ISR() interrupt PWMA_VECTOR
{
    if(PWMA_SR1 & 0X10)
    {
        PWMA_SR1 &=~0X10;
        //PWMA_SR1 = 0;
        if(--tx_cnt == 0)
        {
            PWMA_CCER2 = 0x00; //? CCMRx ?????? CCxE ????
            PWMA_CCMR4 = 0x40; //?? PWM4 ???????
            PWMA_CCER2 = 0x70; //?? CC4NE ??, ?????
            PWMA_IER = 0x00;   // ????
        }
    }
}

//========================================================================
// ??: void delay_ms(unsigned char ms)
// ??: ?????
// ??: ms,????ms?, ?????1~255ms. ???????.
// ??: none.
// ??: VER1.0
// ??: 2013-4-1
// ??:
//========================================================================
void delay_ms(u8 ms)
{
     u16 i;
     do{
          i = MAIN_Fosc / 6000;
          while(--i);
     }while(--ms);
}

void StartIrNec()
{
        
}

void SendIrNec()
{
    if(SndKeyCode != 0)        //?????
    {

        hour = User_code/256;
        minute = User_code%256;
        second = SndKeyCode;

        TxTime = 0;

        //???????? = 9 + 4.5 + 0.5625 + 24 * 1.125 + 8 * 2.25 = 59.0625 ms
        //???????? = 9 + 4.5 + 0.5625 + 8 * 1.125 + 24 * 2.25 = 77.0625 ms
        IR_TxPulse(342);    //??9ms,???       9ms
        IR_TxSpace(171);    //??4.5ms,????? 4.5ms
        IR_TxPulse(21);     //??????          0.5625ms

        IR_TxByte(User_code%256);   //???????
        IR_TxByte(User_code/256);   //???????
        IR_TxByte(SndKeyCode);         //???
        IR_TxByte(~SndKeyCode);        //?????

        if(TxTime < 56)     //?????77ms??, ????,????     108ms
        {
            TxTime = 56 - TxTime;
            TxTime = TxTime + TxTime / 8;
            delay_ms(TxTime);
        }
        delay_ms(31);
        IR_TxOff();         //??????
        SndKeyCode = 0;
    }
}
回复

使用道具 举报 送花

  • 打卡等级:常住居民I
  • 打卡总天数:61
  • 最近打卡:2025-10-15 19:44:33

13

主题

98

回帖

501

积分

高级会员

积分
501
发表于 2025-9-11 23:01:40 | 显示全部楼层
89-USB CDC转双串口-做自动停电上电烧录器


步骤1:硬件连接(用usb连接电脑)

步骤2:
截图202509112250154549.jpg

步骤3:原理图和实物
截图202509112314135994.jpg
截图202509112255314013.jpg

步骤4:例子说明
截图202509112259199822.jpg

步骤5:验证无效果,目前不清楚为什么?
截图202509112301373843.jpg


回复

使用道具 举报 送花

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

本版积分规则

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

GMT+8, 2025-10-16 10:27 , Processed in 0.132390 second(s), 89 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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