微控制器8x8點陣讓數字0從右到左依次顯示迴圈
阿新 • • 發佈:2019-02-02
用的微控制器是普中的開發板,8x8點陣用的是74hc595進行段選,P0口位選
74hc595資料點選開啟連結
8x8點陣用的是共陰極(左邊的)
這次我要實現的是讓數字0從右到左依次顯示
#include <reg52.h> #include <intrins.h> typedef unsigned int u16; typedef unsigned char u8; sbit SCLK=P3^6; sbit RCK=P3^5; sbit SER=P3^4; u8 code duan0[8][8]={{0x00,0x3C,0x42,0x42,0x42,0x3C,0x00,0x00}, //數字0的段選 {0x3C,0x42,0x42,0x42,0x3C,0x00,0x00,0x00}, {0x42,0x42,0x42,0x3C,0x00,0x00,0x00,0x3C}, {0x42,0x42,0x3C,0x00,0x00,0x00,0x3C,0x42}, {0x42,0x3C,0x00,0x00,0x00,0x3C,0x42,0x42}, {0x3C,0x00,0x00,0x00,0x3C,0x42,0x42,0x42}, {0x00,0x00,0x00,0x3C,0x42,0x42,0x42,0x3C}, {0x00,0x00,0x3C,0x42,0x42,0x42,0x3C,0x00}}; u8 code wei[]={0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe}; // 位選 void delay(u16 c)//延時函式 { u8 a,b; for(;c>0;c--) for(b=142;b>0;b--) for(a=2;a>0;a--); } void sandbyte(u8 dat)//給74hc595傳送段選的資料 { u8 i; SCLK=0; RCK=0; for(i=0;i<8;i++) { SER=dat>>7; dat<<=1; SCLK=1; _nop_(); _nop_(); SCLK=0; } RCK=1; _nop_(); _nop_(); RCK=0; } void main() { u8 i,j; u8 num; while(1) { for(i=0;i<8;i++) { num=40; while (num--) //讓下面的for函式持續執行40次,讓數字0 能停留一段時間 { for(j=0;j<8;j++) { P0=wei[j]; sandbyte(duan0[i][j]); delay(1); sandbyte(0x00); } } delay(100); //這裡是掃描延時100ms } } }