精华内容
参与话题
问答
  • 应广单片机PMC150程序解析,工程新建及代码的实现方法,单路PWM输出
  • 应广单片机adc和pwm例程

    千次阅读 2020-01-01 21:11:10
    应广单片机Otp单核系列主要有以下几个系列,15x系列为纯iO,13x系列为带12bit的adc,17x系列为带8bit的adc,现在我用pms132B写个adc/pwm例程,方便大家快速上手.不多说,上代码. #include "extern.h" /**********adc***...

             应广单片机Otp单核系列主要有以下几个系列,15x系列为纯iO,13x系列为带12bit的adc,17x系列为带8bit的adc,现在我用pms132B写个adc/pwm例程,方便大家快速上手.不多说,上代码.

    #include    "extern.h"


    /**********adc*****************/
    Word usAdcSum;
    Word usAdcSumBak;

    BIT        THR             :PB.0;
    BIT        PWM             :PA.3;
    /*定时器初始化*/
    void PwmTmr2Init ( void )
    {
        tm2ct = 0x0;/*计数值*/
        //pwm duty
        tm2b = 0;//START_PWM_CNT;
        //8 位 pwm, 预分频 = 64, 分频 = 2, frq=970hz
        tm2s = 0b0_11_00000;
        //0010=HIRC输出 ,01= PB2,10=PA3,11=PB4, PWM模式,禁用极性反转
        tm2c = 0b0010_10_1_0;
    }

    void GetAdc(void)    //ADC采样处理
    {
         BYTE  ucCnt;
         
         $ ADCC Enable, THR    ;
         
         //8次采样做平均/
         ucCnt=8;
         //初始化
         usAdcSum=0;
         while ( ucCnt-- )
         {
             AD_Start=1;
            .wait1    AD_Done;
            //adc 采样值,12bit实际使用8bit
            usAdcSum +=ADCRH;
         }    
         //取平均值输出
         usAdcSum=usAdcSum>>3;  //temp除以8
    }


    void    FPPA0 (void)
    {
        .ADJUST_IC    SYSCLK=IHRC/2        //    SYSCLK=IHRC/2

        //    Insert Initial Code
        $ THR  in;
        $ PWM  out,low;


        /*bit config start
        b7:5@001=2V参考;000=VDD;
        b4@0f通道选择器
        b3:2@f通道band-gap参考电压选择
        b1:0@00=rsv
        bit config end*/
        adcrgc=0b000_0_00_00;

        
        PwmTmr2Init();
        while (1)
        {
            /**/
            GetAdc();
            /*当pwm占空比为0,会有关不断的现象,要做特殊处理*/
            if(usAdcSumBak!=usAdcSum)
            {
                usAdcSumBak=usAdcSum;

               /*更新占空比*/
                tm2b=usAdcSum$0;

               /*pwm输出为0*/
                if(!usAdcSum$0)
                {

                   /*关闭pwm输出*/
                    tm2c = 0b0010_00_1_0;
                    PWM=0;
                } 
                else
                {

                   /*打开pwm输出*/
                    tm2c = 0b0010_10_1_0;
                }
            }

        }
    }


    void    Interrupt (void)
    {
        pushaf;

        if (Intrq.T16)
        {    //    T16 Trig
            //    User can add code
            Intrq.T16    =    0;
            //...
        }

        popaf;
    }

    /*有啥问题可以留言,也可以联系本人QQ85547259*/

    展开全文
  • 应广单片机开发案例

    千次阅读 2019-12-06 23:15:35
    应广单片机价格美丽,性价比高,mini-c好用,适用于消费电子开发。但是案例demo太少了,为了方便大家能够快速入门。这里贴出了一份经典PMS150C的点灯程序代码。不是Hello world!那种,是偏向于实际产品的那种。 ...

            应广单片机价格美丽,性价比高,mini-c好用,适用于消费电子开发。但是案例demo太少了,为了方便大家能够快速入门。这里贴出了一份经典PMS150C的点灯程序代码。不是Hello world!那种,是偏向于实际产品的那种。

    涉及到的内容有不少,包括应广单片机PMS150C:

    1.端口输入输出配置

    2.Tmr16中断配置(systick),倒计时

    3.按键检测,包括防抖,可以用于长按键检测

    4.低功耗,睡眠配置

    5.唤醒

    6.系统时钟配置,系统时钟切换

    7.看门狗应用

    8.状态机应用

    其他比如PMS152,PMS132设置也类似,希望大家喜欢!

     

    #include    "extern.h"

    #define     HIGH    1
    #define  LOW    0

    #define DISABLE 0
    #define ENABLE 1

    #define EMPTY 0
    #define FULL 1

    #define ON 1
    #define OFF 0

    #define LED_OPEN 0

    #define LED_FLASH 1

    #define LED_BREATH 2

    #define LED_CLOSE  3

    //#define RUN_TMR  60000
    /*单位 ms*/
    #define RUN_TMR     15000

    #define LOW_POW_TIMING_TMR  3000

    BIT     LED_G           :        PA.3;
    BIT     KEY_HIT            :        PA.4;

    #define KEY_DEBOUNCE_CNT  20
    #define KEY_LONG_PRESS_TIMER 1200

    #define GRE_LED_FLASH  {if(LED_G){LED_G=0;}else{ LED_G=1;}}

    /*计数值Cinit*/
    word ucFlashTmrCnt;
    /*cinit*/
    BIT ubMsFlag; 

    /*cinit*/
    BIT  ubEnLedFlash; 

    /*cinit*/
    bit ubMod;
    byte ucSysSt;
    //byte ucLedPwmDt;

    /*定时时间是否到了cinit*/
    bit     FLAG_NMS;
    /*计数值cinit*/
    byte    count;
    /*定时器初始化cinit*/
    word    T16COUNTER;

    Eword ueLowPowAltTm;

    byte ucKeyHitHigtCnt;
    byte ucKeyHitLowCnt;
    byte ucKeyHitSt;
    byte ucKeyHitBak;
    word usKeyHitLoPreCnt;
    word usKeyHitLoPreCntSet;
    bit ucKeyHitPreSt;

    byte ucLedSt;


    void UpDateLedSt(void);
    /***************************************/
    void    TIME16_Init(void)
    {
        /*计数值清零*/
        T16COUNTER    =488;
        /*ms标记reset*/
        FLAG_NMS    =0;
        
        /*使能定时器*/
        $    INTEN    T16;
        /*关中断*/
        INTRQ        =    0;
        
        /*停止定时器*/
           T16M.5        =0;               

        STT16 T16COUNTER;
        
        /*计算方法16M/*/
        $    T16M    IHRC,/1,BIT11;     
        

    }

    void StartLowPowTmr(void)
    {
        ueLowPowAltTm=RUN_TMR;
    }

    /*低功耗*/
    void LowPow(void)
    {
        /*退出功能则进入低功耗*/
       if((!ueLowPowAltTm) )
       {
               ubEnLedFlash=0;
               GRE_LED_OFF;

            wdreset;
            /*IHRC ->ILRC,关看门狗*/
            CLKMD=0xf4;
            /*禁用IHRC*/
            CLKMD.4=0;
            
            while(1)
            {
                 /*低功耗*/
                 STOPSYS;
             

                 /*有按键按下,充电和按键唤醒*/
                  if(KEY_HIT==0)
                  { 
                        /*退出低功耗*/
                        break; 
                  }
               
            }
            /*ILRC->IHRC ,
                 b7:5@001=IHRC/8,
                 b4@1=IHRC
                 
                 b3@1=模式1
                 b2@ 1=ILRC启动
                 b1@ 1=看门狗开启
                 b0@ 0=Pa5;
                 
                 模式口1;开看门狗*/
            CLKMD=0b001_1_1110;

            ucLedSt=1;
            ucSysSt=LED_CLOSE;
            StartLowPowTmr();
        }
        
    }

    void UpdateLedTmr(void)
    {
       /*使能,闪灯*/    
       if(ubEnLedFlash)
       {
             /*1ms进行一次计数*/
            ucFlashTmrCnt++;
            if(ucFlashTmrCnt>250)
            {
                ucFlashTmrCnt=0;
                /*标记*/
                ubMsFlag=1; 
            }
       }

    }

    /*闪灯*/
    void FlashLed(void)
    {
        /*定时时间到*/
        if(ubMsFlag)
        {
            /*闪灯*/
            GRE_LED_FLASH;
            ubMsFlag=0;
        }
    }


    /*端口检测*/
    void ResetKeyTmr(void)
    {

        if(KEY_HIT)
        {
            ucKeyHitHigtCnt=KEY_DEBOUNCE_CNT;
        }
        /*当前状态为0*/
        else
        {
            ucKeyHitLowCnt=KEY_DEBOUNCE_CNT;
        }

        
    }


    /*1ms任务函数*/
    void UpDateKeyTmr(void)
    {
          /*重新设置计数值*/ 
         ResetKeyTmr();
          /*KeyHit高电平计数值*/
         if(ucKeyHitHigtCnt)
         {
             ucKeyHitHigtCnt--;
            if(!ucKeyHitHigtCnt)
            {
                /*高电平倒计时完成说明当前为低*/
                ucKeyHitSt=LOW;
            }
         }
         /*高电平计数值为0*/
         else
         {
             usKeyHitLoPreCnt++;
            /*做饱和加*/
            if(usKeyHitLoPreCnt>20000)
            {
                usKeyHitLoPreCnt=20000;
            }
            
            if(usKeyHitLoPreCnt==usKeyHitLoPreCntSet)
            {
                /*10s 钟定信号*/
                ucKeyHitPreSt=1;
            }
         }

          /*KeyHit低电平计数值*/
         if(ucKeyHitLowCnt)
         {
             ucKeyHitLowCnt--;
            if(!ucKeyHitLowCnt)
            {
                /*低电平倒计时完成,说明当前为高*/
                ucKeyHitSt=HIGH;

                usKeyHitLoPreCnt=0;
                ucKeyHitPreSt=0;
            }
         }


    }

    void MsTask(void)
    {
        
        /*按键*/
        UpDateKeyTmr();

        UpdateLedTmr();
        
        FlashLed();

        
        /*低功耗定时器*/
        if(ueLowPowAltTm)
        {
            ueLowPowAltTm--;
        }
        
        LowPow();
        
    }


    void UpDateLedSt(void)
    {
        
        ucSysSt++;
        if(ucSysSt>1)
        {
            ucSysSt=0;
        }

        switch(ucSysSt)
        {
            /*开闪烁*/
            case 0:
                ubEnLedFlash=1;
                break;
                
            
            /*关灯*/
            case 1:
                ueLowPowAltTm=LOW_POW_TIMING_TMR;
                ubEnLedFlash=0;
                /*关灯,关闪烁*/
                GRE_LED_OFF;
                /*关灯*/
                break;
            default:
            break;
        }
        
    }


    /*状态切换*/
    void GetKeySt(void)
    {
       /*状态有变化*/
       if(ucKeyHitSt!=ucKeyHitBak)
       {
              /*保存当前状态*/
              ucKeyHitBak=ucKeyHitSt;
           
           if(!ucKeyHitSt)
           {    
                 /*更新倒计时*/
                    StartLowPowTmr();
                 /*状态切换*/
                 UpDateLedSt(); 
           }
          
       }
    }

    /*端口状态初始化*/
    void KeyAppInit(void)
    {
        
        if(KEY_HIT)
        {
            ucKeyHitSt=HIGH;
            ucKeyHitBak=HIGH;
        }
        else
        {
            ucKeyHitSt=LOW;
            ucKeyHitBak=LOW;
        }

       ucKeyHitHigtCnt=KEY_DEBOUNCE_CNT;
       ucKeyHitLowCnt=KEY_DEBOUNCE_CNT;
       usKeyHitLoPreCnt=0;
       ucKeyHitPreSt=0;
       
    }


    void    FPPA0 (void)
    {
        .ADJUST_IC    SYSCLK=IHRC/8, IHRC=16MHz, VDD=3.0V;
        $ CLKMD IHRC/8,En_IHRC,En_ILRC,En_WatchDog;
        /**/
        .delay 40000;
        
        $  LED_G    OUT,HIGH;          
        $  KEY_HIT    IN,PULL;   
        
        TIME16_Init();
        
        KeyAppInit();

       
        ucLedSt=1;

        ubMsFlag=0;

        ubEnLedFlash=0;
        
        /*长按键时间*/
        usKeyHitLoPreCntSet=3000;
        ucSysSt=LED_CLOSE;
        
        engint;
        while (1)
        {

                wdreset;

             /*1ms定时时间到*/
             if ( FLAG_NMS )
             {
              
                MsTask();

                /*清除标记*/
                FLAG_NMS=0;
            }
            
            /*取得按键状态*/
            GetKeySt();

            
        }
    }

    void    Interrupt ( void )
    {
        pushaf;

        if ( Intrq.T16 )  
        {

            Intrq.T16    =    0;
            
            STT16 T16COUNTER;

            
            
            if ( count>0 )
            {
                count--;
            }
            else
            {
                count   =   9;
                /*1ms*/
                FLAG_NMS=   1;      
            }

        }

        popaf;
    }

    /*end create by zhongvv QQ:85547259*/

     

    展开全文
  • 二、应广单片机点亮一个灯

    千次阅读 2018-06-18 00:48:09
    这一节开始从一个个实际例子,向大家展示应广单片机的各项功能。由于看本文的读者层次不相同,这里全部按照初学者视之。废话少说,上例程://======================================================== #include &...

            上一节介绍基础,由于时间仓促,写得十分模糊。这一节开始从一个个实际例子,向大家展示应广单片机的各项功能。由于看本文的读者层次不相同,这里全部按照初学者视之。

    废话少说,上例程:

    //========================================================
    #include "extern.h"
    
    KeyBounce  equ 30*1000    //30ms
    
    void FPPA0(void)
    {
    .ADJUST_IC SYSCLK=IHRC/2;
    pac = 0b_1111_1110;
    pa = 0b_0000_0000;
    paph = 0b_0000_0001;
    $ padier 0b_1111_1001;
    
    while (1)
    {
        if( pa.0 == 0 )
        {
            if(--KeyBounce  == 0)
            {
                if( pa.0 == 0 )
                {
                    A = pa.3;
                    A ~= 0b00001000;
                    pa = A; 
                }
            }
        }
    }
    }
    //========================================================

    以上例程非常简单

    #include "extern.h"

    是程序的头文件。

    void FPPA0(void)

    相当于程序的 main() 函数。

    .ADJUST_IC SYSCLK=IHRC/2;

    是对芯片时钟的设定,具体参考使用的单片机芯片来设定。

    pac = 0b_1111_1110;
    pa = 0b_0000_0000;
    paph = 0b_0000_0001;
    $ padier 0b_1111_1001;

    是对芯片引脚设定。这里设定 pa.0 为输入,启用上拉电阻。具体设置可参考芯片手册。

    while (1)

    无限循环函数,与大多数函数相似。

    if( pa.0 == 0 )
    判断 pa.0 是否被人按下了。如果不是,直接跳过。如果被按下。

    if(--KeyBounce  == 0)

    程序连续判断了30 * 1000 次后还是 被按下。执行:

    A = pa.3;
    A ~= 0b00001000;
    pa = A; 
    取反 pa.3 的电平。程序的外围器件将 pa.3 的引脚连接 LED 灯,取反 pa.3 的电平时,实现点亮或者熄灭一颗灯的效果。












    展开全文
  • 应广单片机代码

    2019-03-11 10:41:33
    pms131 demo,mini_c工程代码,入门好帮手,基本包括单片机所有外设资源基本操作.
  • 应广单片机-按键长短按功能

    千次阅读 2020-03-07 16:29:39
    例程所用的芯片是PMS132B-S14 这个demo主要介绍通过按键来点灯,按键扫描跟其他的开发环境的大同小异,主要有长按短按功能,比较简单,直接看代码吧,不懂得可以留言。基本上是用标准c的格式来写的,mini-c里面的...

    本例程所用的芯片是PMS132B-S14
    这个demo主要介绍通过按键来点灯,按键扫描跟其他的开发环境的大同小异,主要有长按短按功能,比较简单,直接看代码吧,不懂得可以留言。基本上是用标准c的格式来写的,mini-c里面的一些指令用的很少。

    
    
    //主控:PMS132B  (根据具体IC以及封装修改)
    //           ____________
    //          -|VDD   GND |-            
    //          -|PA7   PA0 |-        
    //          -|PA6   PA4 |-        
    //          -|PA5   PA3 |-            
    //          -|PB7   PB3 |-        
    //          -|PB4   PB1 |- LED        
    //          -|PB5   PB0 |- KEY                
    //           ------------                      
    //  程序功能:长按按键开关机,短按控制LED灯亮,开机LED默认亮                                  
    
    
    #include	"extern.h"
    
    // .outfile %S_%TyymmddHHMMSS_%x.PDK  //输出的烧录文件带校验码、芯片型号、时间日期
    
    
    typedef byte u8; 
    typedef word u16;
    typedef EWORD u24;
    typedef DWORD u32;
    
    #define     SetPortA()      PAPH = 0X00; PAC = 0X00; PA = 0X00
    #define     SetPortB()      PBPH = 0X03; PBC = 0X02; PB = 0X00
    
    #define     KEY                     PB.0
    #define     LED_ON()                PB.1 = 1
    #define     LED_OFF()               PB.1 = 0
    
    #define     CONST_LONG_TIME         95  //95*10ms
    #define     CONST_KEY_TIME          4  //4*10ms
    
    u16 T16val;  //定时器重装载值变量
    u8 gCnt_1ms;
    u8 gKeyCnt;  //按键消抖变量
    u8 gKeyLock; //按键锁存变量,防止重复触发
    u8 gKeyTouchCnt;
    u8 flag0;
    bit     is_short_touch:         flag0.0;
    bit     is_poweron:             flag0.1;
    bit     is_led_ctrl:            flag0.2;   
    bit     f_10ms:                 flag0.3; 
    
    void sys_init(void)
    {
        T16val = 0;
        gCnt_1ms = 0;
        gKeyCnt = 0;
        gKeyLock = 0;
        gKeyTouchCnt = 0;
        flag0 = 0;
    }
    
    //10ms扫描一次
    void key_scan(void) 
    {
        if (KEY) { //按键按下为低
            gKeyCnt = 0;
            gKeyLock = 0;
            if ((is_short_touch == 1) && (is_poweron == 1)) {
                is_short_touch = 0;
                //短按功能实现区
                if (is_led_ctrl == 1) {
                    is_led_ctrl = 0;
                } else {
                    is_led_ctrl = 1;
                }
            }
        }
        else if (gKeyLock == 0) {
            gKeyCnt++;
            if (gKeyCnt >= CONST_KEY_TIME) { //40*10ms
                is_short_touch = 1;
            }
            if (gKeyCnt >= CONST_LONG_TIME) { //长按
                is_short_touch = 0; //短按标志位清零
                gKeyCnt = 0;
                gKeyLock = 1; //按键锁存变量置一,防止重复触发
                //长按功能实现区
                if (is_poweron == 1) { //关机
                    is_poweron = 0;
                } else { //开机
                    is_poweron = 1;
                }
            }
        }
    }
    
    void led_ctrl(void)
    {
        if (is_led_ctrl == 1) {
            LED_OFF();
        } else { //开机之后直接亮
            LED_ON();
        }
    }
    
    /************************************************************************************/
    /*							  16位计数定时器T16 								    */
    /************************************************************************************/
    #define USER_TIMER_CONFIG()		$ T16M IHRC, /16, BIT10
    #define ENABLE_TIMER()			SET1 INTEN.2 //$ INTEN T16 //开定时器中断
    #define DISENABLE_TIMER()		SET0 INTEN.2 //关定时器中断
    #define INIT_TIMER_VALUE(n)		STT16 n//装载定时器计数值
    #define EA_INT()				ENGINT//开总中断
    #define DIS_INT()				DISGINT//关总中断
    #define CONST_TIME_VALUE        0//  (BIT - CONST_TIME_VALUE) / (IHRC / 分频) = us
      
    /************************************************************************************/
    
    void Set_User_T16(void)
    {	
    	USER_TIMER_CONFIG();
    	T16val = CONST_TIME_VALUE;
    	INIT_TIMER_VALUE(T16val);
    	INTRQ = 0;//清除INTRQ
    	EA_INT();
    	ENABLE_TIMER();
    }
    
    void	FPPA0 (void)
    {
    	.ADJUST_IC	SYSCLK=IHRC/4,IHRC=16MHZ		//系统时钟4M
    
    	//	Insert Initial Code
        /*上电先设置端口,清零ROM,配置定时器*/
        SetPortA();
        SetPortB();
        sys_init();
        Set_User_T16();
    
    
    	while (1)
    	{
    //		...
    //		wdreset;
            if (f_10ms == 1) { //10ms扫描一次按键
                f_10ms = 0;
                key_scan();
            }
            if (is_poweron == 1) { //开机短按控制LED亮
                led_ctrl();
            } else { //没开机LED灭
                LED_OFF();
            }
    
    	}
    }
    
    
    void	Interrupt (void)
    {
    	pushaf;
    
    	if (Intrq.T16)
    	{	//	T16 Trig
    		//	User can add code
    		Intrq.T16	=	0;
    		T16val = CONST_TIME_VALUE;
            INIT_TIMER_VALUE(T16val);\
            gCnt_1ms++;
            if (gCnt_1ms >= 10) {
                gCnt_1ms = 0;
                f_10ms = 1;
            }
    	}
    
    	popaf;
    }
    
    

    定时器不懂得可以看我上一个博客,有介绍,若还是不懂可以留言。

    展开全文
  • 在实际应用中各类产品使用广泛,所用mini c资源,电子类 小风扇,无线充电,在实际中运用广泛的 吗,minic语言
  • 应广单片机定时器中断配置

    千次阅读 2019-12-28 00:34:32
    应广单片机主要应用于消费电子,资源有限,只有一个定时器,因此用好T16定时器就非常关键了.可以说是整个单片机系统的核心配置 不说那么多了,直接上代码. BIT LED_G : PA.3; #define GRE_LED_FLASH {if(LED_G){LED_G...
  • 应广单片机-16位计数定时器

    千次阅读 2019-12-24 18:04:51
    只能向上计数,计数初始值可以通过stt16指令来设置,待会看代码里面,用来做中断就是当计数溢出是触发中断,具体的看例程吧。 /*****************************************************************************...
  • 应广单片机比较器检测电池欠压

    千次阅读 2020-01-19 21:45:38
    如果说51单片机是通用型的单片机,那么应广单片是实用型的,适用于玩具,消费电子等产品开发.单片机内部集成了1.2V的band-gap参考电压,同时集成了比较器,这对于一些电池供电的产品,更具实用意义. 下面我就贴上比较器...
  • 应广单片机-IO口的使用 今年入职了一家做方案的公司,有用到台湾广的单核单片机,对于一款新的单片机,开发环境跟标准C也有所区别,笔者学习这款单片机也是花了一些时间,目前还在学习中,网上相关的资料真的很少...
  • 初学单片机应该要掌握的几个不易明白的概念
  • 应广PMS154C(1)--11位PWM输出

    万次阅读 2020-06-10 18:33:18
    应广PMS154C--11位PWM输出概述PMS171B之PWM配置PWM计算与配置11位PWM输出完整代码演示效果最后 概述 作者在以前已经讲解完PMS171B端口输出高低电平,PWM输出,在所用的PMS154C芯片有个为11位PWM输出,就写个11位PWM...
  • 使用应广PMS15 SOP8封装单片,装在植物灯上定时控制植物灯、水泵,应用于水培生长设备。
  • 应广PMS171B(2)--PWM输出

    万次阅读 2020-06-03 18:37:03
    应广PMS171B--2PWM输出概述PMS171B之PWM配置PWM计算与配置PWM输出完整代码演示效果最后 概述 作者在上期已经讲解完端口输出高低电平,这章建立实例来讲解PWM输出,在所用的芯片有个为PWM输出,就写个PWM例程,方便...
  • 作者经常使用一些国产芯片或者价格价格美丽的单片机,这款应广单片机PMS171B价格美丽,性价比高,mini-c好用,适用于消费电子开发。但是案例demo太少了,为了方便大家能够快速入门。为了方便大家应用和开发,这里写一...
  • 详解单片机各大分类

    千次阅读 2020-03-02 10:42:20
    单片机是一种集成电路芯片,是采用超大规模集成电路技术把具有数据处理能力的中央处理器CPU随机存储器RAM、只读存储器ROM、多种I/O口和中断系统、定时器/计时器等功能(可能还包括显示驱动电路、脉宽调制电路、模拟多...
  • 现在的电子产品,随便拿来一个拆开,都能看到单片机的身影,单片机在电子产品中已经成了标配。因为现在的电子产品都是以单片机为核心,根据不同的需求加以不同的外设电路,再做一些认证相关的设计工作,都是这个构架...
  • 单片机

    千次阅读 2012-06-18 15:42:10
    单片机是一种集成电路芯片,是采用超大规模集成电路技术把具有数据处理能力的中央处理器CPU随机存储器RAM、只读存储器ROM、多种I/O口和中断系统、定时器/计时器等功能(可能还包括显示驱动电路、脉宽调制电路、模拟...
  • 单片机

    2019-01-19 09:49:25
    单片机

空空如也

1 2 3 4 5 ... 17
收藏数 328
精华内容 131
热门标签
关键字:

应广单片机例程