線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:1585
推到 Plurk!
推到 Facebook!

16x16 LED Display

缺席
tai012
一般會員


發表:3
回覆:0
積分:0
註冊:2007-12-10

發送簡訊給我
#1 引用回覆 回覆 發表時間:2007-12-17 22:22:07 IP:124.244.xxx.xxx 訂閱

這是一個串行數據輸入去驅動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 if (i%2) delay(120);
}
delay(1000);
//顯示文字
for (w=0;w{
for (i=0;i<32;i )
{
for(q=0;q if (i%2) delay(120);
}
delay(3000);
}
//第一種顯示效果,顯示笑臉圖樣
for (i=0;i<32;i )
{
for(q=0;q if (i%2) delay(120);
}
delay(1000);
//向上滾屏顯示
for (i=0; i {
for (j=0; j<16; j )
{
for (k=0; k<15; k )
{
for(q=0;q {dispram[k*2 q*32] = dispram[(k 1)*2 q*32];dispram[k*2 1 q*32] = dispram[(k 1)*2 1 q*32];}
}
for(q=0;q {dispram[30 q*32] = Bmp[q i*BLKN/2][j*2];dispram[31 q*32] = Bmp[q i*BLKN/2][j*2 1];}
delay(100);
}
delay(3000);//滾動停止
}
//黑屏
for (i=0;i<32;i )
{
for(q=0;q if (i%2) delay(120);
}
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 if (i%2) delay(120);
}
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 {dispram[i q*32]= 0x00;}
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

發送簡訊給我
#2 引用回覆 回覆 發表時間:2007-12-17 22:53:19 IP:123.52.xxx.xxx 訂閱
可以用其它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;
}
}
------

☆☆ 网事如潮人如水,只叹世间人几回。 ☆☆
編輯記錄
lishang83 重新編輯於 2007-12-17 22:55:01, 註解 無‧
lishang83 重新編輯於 2007-12-17 22:55:36, 註解 無‧
lishang83 重新編輯於 2007-12-17 22:56:07, 註解 無‧
系統時間:2024-05-07 23:45:19
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!