|
10黑幣
我是最近學(xué)單片機(jī)的萌新 我用的 兩塊74HC138級(jí)聯(lián)加三極管 作為行驅(qū)動(dòng) 兩塊74HC595級(jí)聯(lián)作為列驅(qū)動(dòng) 連接如圖片所示
字符取碼逐行式 低位在前 高位在后 我已經(jīng)完成了 拉幕顯示 從下往上移顯示 現(xiàn)在問(wèn)題是由于我是只能是逐行式掃描 我要怎么進(jìn)行從右往左移顯示啊 有點(diǎn)想不通 希望各位大神能給一點(diǎn)指點(diǎn) 編程的思路 萬(wàn)分感謝 我不想更改595和138的驅(qū)動(dòng)程序
下面是我發(fā)送數(shù)據(jù)的595和138的驅(qū)動(dòng)代碼
void HC595_Data_Send(uchar daH,daL,hang) //¸高八位在點(diǎn)陣屏幕的右八位 因此我先移如高八位再移入第八位
{
uchar i;
Latch_port = 0;//關(guān)閉鎖存器的存儲(chǔ)寄存器 不輸出數(shù)據(jù)
CLK_port = 0;//鎖存器移位寄存器的時(shí)鐘輸入口置0
for(i=0;i<8;i++){
if((daH&0x80)!=0) DA_in_port = 1;
else DA_in_port = 0;
CLK_port = 1;
CLK_port = 0;
daH <<= 1;
}
for(i=0;i<8;i++){
if((daL&0x80)!=0) DA_in_port = 1;
else DA_in_port = 0;
CLK_port = 1;
CLK_port = 0;
daL <<= 1;
}
EN_port = 1; /關(guān)閉顯示 使138輸出全為1 點(diǎn)陣不顯示
switch (hang){
case 0:
A_port = 0; B_port = 0; C_port = 0; D_port = 0; //D為0時(shí) 對(duì)應(yīng)上八行有可能不顯示
break;
case 1:
A_port = 1; B_port = 0; C_port = 0; D_port = 0;
break;
case 2:
A_port = 0; B_port = 1; C_port = 0; D_port = 0;
break;
case 3:
A_port = 1; B_port = 1; C_port = 0; D_port = 0;
break;
case 4:
A_port = 0; B_port = 0; C_port = 1; D_port = 0;
break;
case 5:
A_port = 1; B_port = 0; C_port = 1; D_port = 0;
break;
case 6:
A_port = 0; B_port = 1; C_port = 1; D_port = 0;
break;
case 7:
A_port = 1; B_port = 1; C_port = 1; D_port = 0;
break;
case 8:
A_port = 0; B_port = 0; C_port = 0; D_port = 1; //D為1時(shí) 下有可能八行顯示
break;
case 9:
A_port = 1; B_port = 0; C_port = 0; D_port = 1;
break;
case 10:
A_port = 0; B_port = 1; C_port = 0; D_port = 1;
break;
case 11:
A_port = 1; B_port = 1; C_port = 0; D_port = 1;
break;
case 12:
A_port = 0; B_port = 0; C_port = 1; D_port = 1;
break;
case 13:
A_port = 1; B_port = 0; C_port = 1; D_port = 1;
break;
case 14:
A_port = 0; B_port = 1; C_port = 1; D_port = 1;
break;
case 15:
A_port = 1; B_port = 1; C_port = 1; D_port = 1;
break;
}
Latch_port = 1; //595數(shù)據(jù)輸出到Q1---Q8端
EN_port = 0; /*138輸出有效打開(kāi)顯示*/
Latch_port = 0; /*595輸出鎖定*/
}
|
|