我是最近學單片機的萌新 我用的 兩塊74HC138級聯加三極管 作為行驅動 兩塊74HC595級聯作為列驅動 連接如圖片所示
字符取碼逐行式 低位在前 高位在后 我已經完成了 拉幕顯示 從下往上移顯示 現在問題是由于我是只能是逐行式掃描 我要怎么進行從右往左移顯示啊 有點想不通 希望各位大神能給一點指點 編程的思路 萬分感謝 我不想更改595和138的驅動程序
下面是我發送數據的595和138的驅動代碼
void HC595_Data_Send(uchar daH,daL,hang) //¸高八位在點陣屏幕的右八位 因此我先移如高八位再移入第八位
{
uchar i;
Latch_port = 0;//關閉鎖存器的存儲寄存器 不輸出數據
CLK_port = 0;//鎖存器移位寄存器的時鐘輸入口置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; /關閉顯示 使138輸出全為1 點陣不顯示
switch (hang){
case 0:
A_port = 0; B_port = 0; C_port = 0; D_port = 0; //D為0時 對應上八行有可能不顯示
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時 下有可能八行顯示
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數據輸出到Q1---Q8端
EN_port = 0; /*138輸出有效打開顯示*/
Latch_port = 0; /*595輸出鎖定*/
}
|