16x16 LED Display |
缺席
|
tai012
一般會員 發表:3 回覆:0 積分:0 註冊:2007-12-10 發送簡訊給我 |
這是一個串行數據輸入去驅動LED,它用了8051的10腳(RXD),11腳(TXD)去傳輸控制LED,不過我想用這2隻腳去與PC溝通,問題如下: 1)可否改用其他port腳去驅動LED? 2)如果可以,program要如何改? #include "reg52.h" #define BLKN 8 #define TOTAL 4 #define CONIO P1 sbit G=CONIO^7; sbit CLK=CONIO^6; sbit SCLR=CONIO^5; unsigned char idata dispram[(BLKN/2)*32]={0}; //**************字表******************// unsigned char code Bmp[][32]={ { 0xEF,0xFF,0xEF,0x03,0x81,0xBB,0xDD,0xBB,0xDD,0xD7,0xEB,0xEF,0xF3,0xD7,0xCD,0xB9, 0x3E,0xFF,0xC0,0x07,0xFE,0xF7,0xFD,0xF7,0xFD,0xF7,0xFB,0xF7,0xF7,0xD7,0xEF,0xEF},//努 { 0xFE,0xFF,0xFE,0xFF,0xFE,0xFF,0xFE,0xFF,0x80,0x03,0xFE,0xFB,0xFE,0xFB,0xFE,0xFB, 0xFE,0xFB,0xFD,0xFB,0xFD,0xFB,0xFB,0xFB,0xFB,0xFB,0xF7,0xFB,0xEF,0xD7,0xDF,0xEF},//力 { 0xFE,0xF7,0xEF,0x73,0xF3,0x37,0xF7,0x6F,0x80,0x01,0xBF,0xFB,0x70,0x17,0xFF,0xBF, 0xFF,0x7F,0x80,0x01,0xFF,0x7F,0xFF,0x7F,0xFF,0x7F,0xFF,0x7F,0xFD,0x7F,0xFE,0xFF},//學 { 0xFF,0xFF,0xC0,0x03,0xFF,0xFB,0xF7,0xFB,0xFB,0xFB,0xFC,0xFB,0xFE,0xEB,0xFF,0x9B, 0xFE,0x7B,0xF9,0xFB,0xC7,0xFB,0xEF,0xFB,0xFF,0xFB,0xFF,0xDB,0xFF,0xEA,0xFF,0xF6},//習 }; //**************字表******************// unsigned char code Bmp1[][32]={ { 0xF9,0xBF,0xC7,0xAF,0xF7,0xB7,0xF7,0xB7,0xF7,0xBF,0x00,0x01,0xF7,0xBF,0xF7,0xB7, 0xF1,0xD7,0xC7,0xCF,0x37,0xDF,0xF7,0xAF,0xF6,0x6D,0xF7,0xF5,0xD7,0xF9,0xEF,0xFD }/*我*/, { 0xFF,0x07,0xC0,0x6F,0xED,0xEF,0xF6,0xDF,0xC0,0x01,0xDD,0xFD,0xBD,0xFF,0xC0,0x03, 0xFB,0xFF,0xF8,0x0F,0xF3,0xDF,0xF4,0xBF,0xEF,0x3F,0x9C,0xCF,0x73,0xF1,0xCF,0xFB }/*愛*/, { 0xF7,0xDF,0xF9,0xCF,0xFB,0xBF,0xC0,0x07,0xDE,0xF7,0xC0,0x07,0xDE,0xF7,0xDE,0xF7, 0xC0,0x07,0xDE,0xF7,0xFE,0xFF,0x00,0x01,0xFE,0xFF,0xFE,0xFF,0xFE,0xFF,0xFE,0xFF }/*單*/, { 0xFF,0xBF,0xEF,0xBF,0xEF,0xBF,0xEF,0xBB,0xE0,0x01,0xEF,0xFF,0xEF,0xFF,0xEF,0xFF, 0xE0,0x0F,0xEF,0xEF,0xEF,0xEF,0xEF,0xEF,0xDF,0xEF,0xDF,0xEF,0xBF,0xEF,0x7F,0xEF }/*片*/, { 0xEF,0xFF,0xEF,0x07,0xEF,0x77,0x01,0x77,0xEF,0x77,0xEF,0x77,0xC7,0x77,0xCB,0x77, 0xAB,0x77,0xAF,0x77,0x6E,0xF7,0xEE,0xF5,0xED,0xF5,0xED,0xF5,0xEB,0xF9,0xEF,0xFF }/*機*/, { 0xF8,0x3F,0xE7,0xCF,0xDF,0xF7,0xBF,0xFB,0xB3,0x9B,0x73,0x9D,0x7F,0xFD,0x7F,0xFD, 0x6F,0xED,0x67,0xCD,0xB3,0x9B,0xB8,0x3B,0xDF,0xF7,0xE7,0xCF,0xF8,0x3F,0xFF,0xFF }/*:)*/ }; // /***********delay(1ms)************/ void delay(unsigned int dt) { register unsigned char bt; for (; dt; dt--) for (bt=0; bt<255; bt ); } /*****************main program*********************/ void main(void) { register unsigned char i,j,k,l,q,w; //初始化 SCON = 0x00; //scon mode 0 TMOD = 0x01; TR0 = 1; CONIO = 0x3f; IE = 0x82; while (1) { delay(2000); //2ms //第一種顯示效果,顯示笑臉圖樣 for (i=0;i<32;i ) { for(q=0;q } delay(1000); //顯示文字 for (w=0;w for (i=0;i<32;i ) { for(q=0;q } delay(3000); } //第一種顯示效果,顯示笑臉圖樣 for (i=0;i<32;i ) { for(q=0;q } delay(1000); //向上滾屏顯示 for (i=0; i for (j=0; j<16; j ) { for (k=0; k<15; k ) { for(q=0;q } for(q=0;q delay(100); } delay(3000);//滾動停止 } //黑屏 for (i=0;i<32;i ) { for(q=0;q } delay(1000); //左移顯示 for (i=0; i for (j=0; j<2; j ) for (k=0; k<8; k ) { for (l=0; l<16; l ) { for(q=0;q dispram[l*2 q*32] = dispram[l*2 q*32]<<1 | dispram[l*2 1 q*32]>>7; if(q==BLKN/2-1) dispram[l*2 1 q*32] = dispram[l*2 1 q*32]<<1 | Bmp[i][l*2 j]>>(7-k); else dispram[l*2 1 q*32] = dispram[l*2 1 q*32]<<1 | dispram[l*2 (q 1)*32]>>7; } } delay(100); } } delay(3000); //菴珨笱珆尨虴彆:橙螫堤窪 for (i=0;i<32;i ) { for(q=0;q } delay(1000); //右移顯示 for (i=0; i for (j=2; j>0; j--) for (k=0; k<8; k ) { for (l=0; l<16; l ) { for(q=0;q dispram[l*2 1 q*32] = dispram[l*2 1 q*32]>>1 | dispram[l*2 q*32]<<7; if(q==0) dispram[l*2 q*32] = dispram[l*2 q*32]>>1 | Bmp[i][l*2 j-1]<<(7-k); else dispram[l*2 q*32] = dispram[l*2 q*32]>>1 | dispram[l*2 1 (q-1)*32]<<7; } } delay(100); } } delay(3000); for (i=0;i<32;i ) { for(q=0;q if (i%2) delay(100); } } } //結束 // /**********T0中斷**********/ void leddisplay(void) interrupt 1 using 1 { register unsigned char m, n=BLKN; TH0 = 0xFc; TL0 = 0x18; m = CONIO; m = m & 0x0f; do { n--; SBUF = dispram[m*2 (n/2)*30 n]; while (!TI); TI = 0; }while (n); G = 1; CONIO &= 0xf0; CLK=1; CONIO |= m; CLK=0; G = 0; } 感激萬分m - - m |
lishang83
初階會員 發表:12 回覆:44 積分:31 註冊:2005-07-30 發送簡訊給我 |
可以用其它I/O控制595.
void ShiftByte(uchar i) {uchar data j; number=i; for(j=8;j>0;j--) {SClk=0; SClk=0; Ssda=number0; SClk=1; SClk=1; number=number<<1; } SClk=0; } void display(void) { ShiftByte(bit_table[disp]); ShiftByte(seg_table[disp_buff_temp[disp]]); Sset=1; Sset=0; disp ; if(disp>7) { disp=0x00; } }
------
☆☆ 网事如潮人如水,只叹世间人几回。 ☆☆ |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |