在網(wǎng)上找到幾個很便宜很便宜的移動電源板子,啥資料都么有,買來換上單片機折騰一下。先把6腳數(shù)碼管搞定。 ,壓縮包是這次折騰的資料。
51hei.png (360.81 KB, 下載次數(shù): 183)
下載附件
2021-1-3 19:38 上傳
51hei.png (10.98 KB, 下載次數(shù): 173)
下載附件
2021-1-3 19:39 上傳
51hei.png (9.97 KB, 下載次數(shù): 188)
下載附件
2021-1-3 19:39 上傳
單片機源程序如下:
- // MS83F1402的充電器方案應(yīng)用
- // ----------------
- // VDD ------------|1(VDD) (GND)14|--------- GND
- //_LEVEL ------------|2(RA7) (PA0)13|--------- DBG_CLK A_ADC
- // _STAT ------------|3(PA6) (PA1)12|---------- DBG_DAT B+_ADC
- //_BST ------------|4(PA4) (PA2)11|------------- LL1
- // LL6 ------------|5(PC3) (PA3)10|------------- LL2
- // LL5 ------------|6(PC2) (PC0)09|------------- LL3
- // _KEY ------------|7(PC4) (PC1)08|------------- LL4
- // ----------------
- #include "SYSCFG.h"
- //宏定義
- #define OSC_16M 0x70
- #define OSC_8M 0x60
- #define OSC_4M 0x50
- #define OSC_2M 0x40
- #define OSC_1M 0x30
- #define OSC_500K 0x20
- #define OSC_250K 0x10
- #define OSC_32K 0x00
- #define WDT_256K 0x80
- #define WDT_32K 0x00
- //-----------------------------------//
- //GPIO功能
- //PA7 PA6 PA5 PA4 PA3 PA2 PA1 PA0 //0-輸出 1-輸入
- //_LEVEL _STAT \ _BST LL2 LL1 B+_ADC A_ADC //0b11011111 0xdf
- //PC7 PC6 PC6 PC4 PC3 PC2 PC1 PC0
- //\ \ \ _KEY LL6 LL5 LL4 LL3 //0b00001111 0x0f
- #define _KEY PC4 //平時為高電平,低電平觸發(fā),復(fù)用功能為PWM3
- #define _BST PA4 //
- #define _STAT PA6 //
- #define _LEVEL PA7 //充電芯的狀態(tài)指示燈
- //6腳數(shù)碼管IO
- #define SetPortIn() { TRISA = 0xdf; PORTA = 0x00; TRISC = 0x0f; PORTC = 0x00;}//高阻態(tài)
- #define LL1 PA2
- #define LL2 PA3
- #define LL3 PC0
- #define LL4 PC1
- #define LL5 PC2
- #define LL6 PC3
- //-----------------------------------//
- //函數(shù)名稱:DelayUs
- //功能: 短延時函數(shù) --16M-2T--大概快1%左右.
- //輸入?yún)?shù):Time 延時時間長度 延時時長Time Us
- //返回參數(shù):無
- void DelayUs(unsigned char Time)
- {
- do{
- NOP();
- --Time;
- }while( Time > 0 );
- }
- //函數(shù)名稱:DelayMs
- //功能: 短延時函數(shù)
- //輸入?yún)?shù):Time 延時時間長度 延時時長Time ms
- //返回參數(shù):無
- void DelayMs(unsigned char t)
- {
- unsigned char a,b;
- for(a=0;a<t;a++)
- {
- for(b=0;b<5;b++)
- {
- DelayUs(197); //快1%
- CLRWDT();
- }
- }
- }
- //-----------------------------------//
- //功能: 單片機上電始化
- //函數(shù)名:_INIT
- //功能:上電器件初始化
- // OSCCON寄存器 Bit7 >>> LFMOD=0 >>> WDT振蕩器頻率=32KHz
- // Bit6:4 >>> IRCF[2:0]=101 >>> 內(nèi)部RC頻率=4MHz
- // Bit0 >>> SCS=1 >>> 系統(tǒng)時鐘選擇為內(nèi)部振蕩器
- // MSCKCON寄存器 bit6 >>> VREG_OE=0 >>> 禁止穩(wěn)壓輸出
- // Bit5 >>> T2CKSRC=0 >>> Timer2時鐘源為系統(tǒng)時鐘
- // Bit4 >>> SLVREN=0 >>> 關(guān)閉LVR
- // INTCON寄存器 設(shè)為0,禁止所有中斷
- // CMCON0寄存器0B00000111; 關(guān)閉比較器,CxIN為數(shù)字IO口
- // ANSEL寄存器 設(shè)為0,關(guān)閉中斷引腳模擬輸入功能,也就是把相應(yīng)位設(shè)為0,置為數(shù)字IO
- // WDTCON寄存器0B00010001;看門狗定時器預(yù)分配比 datasheet 第39頁
- // 7:5 N/A
- // 4:1 WDTPS[3:0] 1000 1:8192
- // 0 SWDTEN 軟件打開/關(guān)閉看門狗定時器:
- // 1 = 打開
- // 0 = 關(guān)閉
- #define _INIT()\
- {\
- OSCCON = WDT_32K|OSC_16M|0x00;\
- MSCKCON = 0B00000000;\
- INTCON = 0B00000000;\
- CMCON0 = 0B00000111;\
- ANSEL = 0B00000000;\
- }
- //功能:端口初始化
- //MS83F的IO口初始化可分為:
- //1.數(shù)字輸出
- //2.數(shù)字輸入
- //3.模擬輸出
- //4.模擬輸入
- //相關(guān)寄存器有:
- //1.CMCON0
- //2.ANSEL
- //3.TRISA和TIRSC
- //4.PORTA和PORTC
- //5.WPUA、OPTION和WPUC(OPTION的BIT7為PORTA口內(nèi)部上拉總閘)
- //6.WPD
- //需要特別注意的是:CMOCN0上電模式是0,也就是對應(yīng)的IO口為模擬口
- //ANSEL上電復(fù)位默認為0xFF,也就是所有AD口都默認為模擬口
- //這兩個寄存器一般是要初始化的,尤其是需要把IO口設(shè)置為數(shù)字口
- //因此程序中有CMCON0=0x07和ANSEL=0 這點很多人會忽略到
- void GPIO_INIT(void)
- {
- CMCON0 |= 0B00000111; //關(guān)閉比較器,CxIN為數(shù)字IO口
- ANSEL |= 0B00000000; //所有IO口都為數(shù)字IO
-
-
- TRISA = 0B11011111; //PA輸入輸出 0-輸出 1-輸入
- PORTA = 0B00000000;
- WPUA = 0B00000000; //PA端口上拉控制 1-開上拉 0-關(guān)上拉
- //PA0,PA1模擬輸入 BATT_ADC
- //PA2 LL1
- //PA3 LL2
- //PA4 _BST
- //PA5在芯片內(nèi)部
- //PA6 _STAT
- //PA7 _LEVEL
-
- TRISC = 0B00001111; //PC輸入輸出 0-輸出 1-輸入
- PORTC = 0B00000000;
- WPUC = 0B00010000; //PC端口上拉控制 1-開上拉 0-關(guān)上拉
-
- //PC0 LL3
- //PC1 LL4
- //PC2 LL5
- //PC3 LL6
- //PC4 KEY
- //SOP14封裝無PC5 PC6 PC7引腳
- OPTION = 0B00000000; //Bit3=1 WDT MODE,PS=000=1:1 WDT RATE
- //Bit7(PAPU)=0 ENABLED PULL UP PA
-
- //注意,各個引腳要有確定的狀態(tài)
- _KEY = 1; // PC4 //平時為高電平,低電平觸發(fā),復(fù)用功能為PWM3
- _BST = 0; // PA4
- _STAT = 0; // PA6 //休眠的時候這里要設(shè)置為1
- _LEVEL = 0; // PA7 //充電狀態(tài)指示燈
-
- }
- //=========================================//
- //函數(shù)名: main
- //功能: 主函數(shù)
- void main()
- {
- _INIT();//系統(tǒng)初始化
- CLRWDT();
- GPIO_INIT(); //GPIO初始化
- while( 1 )
- {
-
- SetPortIn();
- TRISA &= ~( 1 << 2); //將PA2設(shè)為輸出 LL1
- TRISA &= ~( 1 << 3); //將PA3設(shè)為輸出 LL2
- LL1 = 1; //1A
- LL2 = 0;
- DelayUs(500);
- LL1 = 0;
- LL2 = 1; //2A
- DelayUs(500);
-
- SetPortIn();
- TRISA &= ~( 1 << 2); //將PA2 設(shè)為輸出 LL1
- TRISC &= ~( 1<< 0); //將PC0 設(shè)為輸出 LL3
- LL1 = 1;
- LL3 = 0; //1B
- DelayUs(500);
- LL1 = 0;
- LL3 = 1; //2B
- DelayUs(500);
- SetPortIn();
- TRISA &= ~( 1 << 2); //將PA2 設(shè)為輸出 LL1
- TRISC &= ~( 1<< 1); //將PC1 設(shè)為輸出 LL4
- LL1 = 1;
- LL4 = 0; //1C
- DelayUs(500);
- LL1 = 0;
- LL4 = 1; //2C
- DelayUs(500);
-
- SetPortIn();
- TRISA &= ~( 1 << 2); //將PA2 設(shè)為輸出 LL1
- TRISC &= ~( 1<< 2); //將PC2 設(shè)為輸出 LL5
- LL1 = 1;
- LL5 = 0; //1D
- DelayUs(500);
- LL1 = 0;
- LL5 = 1; //2D
- DelayUs(500);
-
- SetPortIn();
- TRISA &= ~( 1 << 2); //將PA2 設(shè)為輸出 LL1
- TRISC &= ~( 1<< 3); //將PC3 設(shè)為輸出 LL6
- LL1 = 1;
- LL6 = 0; //1E
- DelayUs(500);
- LL1 = 0;
- LL6 = 1; //2E
- DelayUs(500);
-
- //----------------------------------------------------------//
- SetPortIn();
- TRISA &= ~( 1 << 3); //將PA3設(shè)為輸出 LL2
- TRISC &= ~( 1<< 0); //將PC0 設(shè)為輸出 LL3
- LL2 = 1;
- LL3 = 0; //??
- DelayUs(500);
- LL2 = 0;
- LL3 = 1; //2F
- DelayUs(500);
- SetPortIn();
- TRISA &= ~( 1 << 3); //將PA3設(shè)為輸出 LL2
- TRISC &= ~( 1<< 1); //將PC1 設(shè)為輸出 LL4
- LL2 = 1;
- LL4 = 0; //OUT
- DelayUs(500);
- LL2 = 0;
- LL4 = 1; //2G
- DelayUs(500);
-
- SetPortIn();
- TRISA &= ~( 1 << 3); //將PA3設(shè)為輸出 LL2
- TRISC &= ~( 1<< 2); //將PC2 設(shè)為輸出 LL5
- LL2 = 1;
- LL5 = 0; //5.0V 1.0A
- DelayUs(500);
- LL2 = 0;
- LL5 = 1; //1F
- DelayUs(500);
-
- SetPortIn();
- TRISA &= ~( 1 << 3); //將PA3設(shè)為輸出 LL2
- TRISC &= ~( 1<< 3); //將PC3 設(shè)為輸出 LL6
- LL2 = 1;
- LL6 = 0; //??
- DelayUs(500);
- LL2 = 0;
- LL6 = 1; //1G
- DelayUs(500);
-
- //----------------------------------------------------------//
- SetPortIn();
- TRISC &= ~( 1<< 0); //將PC0 設(shè)為輸出 LL3
- TRISC &= ~( 1<< 1); //將PC1 設(shè)為輸出 LL4
- LL3 = 1;
- LL4 = 0; //5.0V 2.0A
- DelayUs(500);
- LL3 = 0;
- LL4 = 1; //3B
- DelayUs(500);
-
- SetPortIn();
- TRISC &= ~( 1<< 0); //將PC0 設(shè)為輸出 LL3
- TRISC &= ~( 1<< 2); //將PC2 設(shè)為輸出 LL5
- LL3 = 1;
- LL5 = 0; //IN
- DelayUs(500);
- LL3 = 0;
- LL5 = 1; //3C
- DelayUs(500);
-
- SetPortIn();
- TRISC &= ~( 1<< 0); //將PC0 設(shè)為輸出 LL3
- TRISC &= ~( 1<< 3); //將PC3 設(shè)為輸出 LL6
- LL3 = 1;
- LL6 = 0; //??
- DelayUs(500);
- LL3 = 0;
- LL6 = 1; //%
- DelayUs(500);
-
- //----------------------------------------------------------//
- SetPortIn();
- TRISC &= ~( 1<< 1); //將PC1 設(shè)為輸出 LL4
- TRISC &= ~( 1<< 2); //將PC2 設(shè)為輸出 LL5
- LL4 = 1;
- LL5 = 0; //??
- DelayUs(500);
- LL4 = 0;
- LL5 = 1; //??
- DelayUs(500);
-
- SetPortIn();
- TRISC &= ~( 1<< 1); //將PC1 設(shè)為輸出 LL4
- TRISC &= ~( 1<< 3); //將PC3 設(shè)為輸出 LL6
- LL4 = 1;
- LL6 = 0; //??
- DelayUs(500);
- LL4 = 0;
- LL6 = 1; //??
- DelayUs(500);
-
- //----------------------------------------------------------//
- SetPortIn();
- TRISC &= ~( 1<< 2); //將PC2 設(shè)為輸出 LL5
- TRISC &= ~( 1<< 3); //將PC3 設(shè)為輸出 LL6
- LL5 = 1;
- LL6 = 0; //??
- DelayUs(500);
- LL5 = 0;
- LL6 = 1; //??
- DelayUs(500);
- }
-
- }
-
復(fù)制代碼
以上資料51hei提供下載:
6腳數(shù)碼管測試.zip
(355.97 KB, 下載次數(shù): 49)
2021-1-3 18:15 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
|