兩個顯示的硬件是連接在一起的接對嗎?
51hei.jpg (180.93 KB, 下載次數: 28)
下載附件
2023-4-27 00:54 上傳
程序改對嗎?
- /*------------------------------------------------------------------*/
- /* --- STC MCU International Limited -------------------------------*/
- /* --- STC 1T Series MCU RC Demo -----------------------------------*/
- /* If you want to use the program or the program referenced in the */
- /* article, please specify in which data and procedures from STC */
- /*------------------------------------------------------------------*/
- /*********************************************************/
- #define MAIN_Fosc 11059200L //定義主時鐘
- #include "..\..\STC8Hxxx.h"
- /************* 功能說明 *************
- 同時驅動8段16個共陰數碼管和8段16個共陽數碼管自動掃描顯示.
- P4.0~P4.7: 接SEG0~SEG7, 這8根SEG線跟LED連接要串聯限流電阻(建議300歐姆以上).
- P0.0~P0.3: 接SEG8~SEG11, 這4根SEG線跟LED連接要串聯限流電阻(建議300歐姆以上).
- P3.4~P3.7: 接SEG12~SEG15,這4根SEG線跟LED連接要串聯限流電阻(建議300歐姆以上).
- P2.0~P2.7: 接COM0~COM7
- P4.0 P4.1 P4.2 P4.3 P4.4 P4.5 P4.6 P4.7 P0.0 P0.1 P0.2 P0.3 P3.4 P3.5 P3.6 P3.7
- SEG0 SEG1 SEG2 SEG3 SEG4 SEG5 SEG6 SEG7 SEG8 SEG9 SEG10 SEG11 SEG12 SEG13 SEG14 SEG15
- A B C D E F G H A B C D E F G H
- P2.0-COM0
- P21.-COM1
- P22.-COM2
- P23.-COM3
- P24.-COM4
- P25.-COM5
- P26.-COM6
- P27.-COM7
- ******************************************/
- /************* 本地常量聲明 **************/
- /************* 本地變量聲明 **************/
- /************* 本地函數聲明 **************/
- void delay_ms(u8 ms);
- /**************** 外部函數聲明和外部變量聲明 *****************/
- u8 code T_LED_CODE[]={ //標準字庫
- //代碼 0x00 0x01 0x02 0x03 0x04 0x05 0x06 0x07 0x08 0x09 0x0A 0x0B 0x0C 0x0D 0x0E 0x0F
- //顯示字符 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,
- //代碼 0x10 0x11 0x12 0x13 0x14 0x15 0x16 0x17 0x18 0x19 0x1A 0x1B 0x1C 0x1D 0x1E 0x1F
- //顯示字符 0. 1. 2. 3. 4. 5. 6. 7. 8. 9. 空
- 0xBF,0x86,0xDB,0xCF,0xE6,0xED,0xFD,0x87,0xFF,0xEF,0x00};
-
- //共陰數碼管字庫導入, i為LED位置0~15, dis為要顯示的代碼 0~9, A~F, 1.~9., 空
- void LoadLED_A(u8 i, u8 dis)
- {
- u8 xdata *px;
-
- px = &COM0_DCL + 15 - i; //PCB布局低位數碼管在右邊, 所以用(15-i)反一下
- *px = T_LED_CODE[dis & 0x0f];
- }
- //共陽數碼管字庫導入, i為LED位置0~15, dis為要顯示的代碼 0~9, A~F, 1.~9., 空
- void LoadLED_B(u8 i, u8 dis)
- {
- u8 xdata *px;
-
- px = &COM0_DAL + 15 - i; //PCB布局低位數碼管在右邊, 所以用(15-i)反一下
- *px = T_LED_CODE[dis & 0x0f];
- }
- /**********************************************/
- void main(void)
- {
- u8 i;
- P_SW2 |= 0x80; //允許訪問XSFR(擴展特殊功能寄存器)
- // XOSCCR = 0xc0; //啟動外部晶振
- // while (!(XOSCCR & 1)); //等待時鐘穩定
- // CLKDIV = 0x00; //時鐘不分頻
- // CKSEL = 0x01; //選擇外部晶振
- P2n_push_pull(0xff); //COM0~COM7線設置為推挽輸出
- P4n_push_pull(0xff); //SEG0~SEG7(P4.0~P4.7)線設置為推挽輸出
- P0n_push_pull(0x0f); //SEG8~SEG11(P0.0~P0.3)線設置為推挽輸出
- P3n_push_pull(0xf0); //SEG12~SEG15(P3.4~P3.7)線設置為推挽輸出
- P2DR = 0x00; //COM0~COM7線設置為強電流驅動
- P4DR = 0x00; //SEG0~SEG7線設置為強電流驅動
- P0DR = 0xf0; //SEG8~SEG11線設置為強電流驅動
- P3DR = 0x0f; //SEG12~SEG15線設置為強電流驅動
- COMEN = 0xff; //允許8個COM
- SEGENL = 0xff; //允許8個SEG 低字節
- SEGENH = 0xff; //允許8個SEG 高字節
- LEDCTRL = 0x80 + (2<<4) + 0; //B7=1: ON, B5 B4: 0共陰, 1共陽, 2共陰共陽, 3保留, B2 B1 B0: 0占空比100%, 1~7占空比7/8~1/8
- LEDCKS = 4; //數碼管COM掃描顯示的主頻時鐘數 = 160*9*LEDCKS, 每個COM顯示時間=1440*LEDCKS/fosc(MHz) us, COM掃描頻率=fosc/(1440*LEDCKS *COM數).
- //例如 fosc = 11.0592MHz, 共陰共陽一共16個COM, LEDCKS = 4, 則每個COM顯示時間=1440*4/11.0592 = 521 us, COM掃描頻率=11059200/(1440*4*16)=120Hz.
- //已知掃描時間t(us)計算 LEDCKS = t*fosc(MHz)/1440, 比如fosc = 24MHz, 要求1個COM掃描1ms, 則 LEDCKS = 1000*24/1440 = 16.7, 取整數17.
- for(i=0; i<16; i++) LoadLED_A(i,i); //共陰,顯示0123456789ABCDEF
- for(i=0; i<16; i++) LoadLED_B(i,15-i); //共陽,顯示FEDCBA9876543210
-
-
- while (1)
- {
- //刷新COM0_DCL~COM7_DCL, COM0_DCH~COM7_DCH,即可刷新共陰顯示內容.
- //刷新COM0_DAL~COM0_DAL, COM0_DAH~COM0_DAH,即可刷新共陽顯示內容.
-
- }
- }
- /**********************************************/
-
復制代碼
|