當前位置:首頁 » 硬碟大全 » 單片機緩存區移位
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

單片機緩存區移位

發布時間: 2023-02-18 18:39:55

1. 單片機 移位問題

0x7F是八位的,在單片機裡面代表 0B01111111,最左邊是0,這樣與0B10000000與後就是0了

2. 51單片機點陣屏數據緩沖區

我覺得先分析時間問題:即顯示屏的刷新率、595串並移位的速度、控制器(單片機什麼的)的速度問題。如果控制器能夠在輸出595移位信號使數據就緒的時間上綽綽有餘,完全可以從內部的ROM內讀取。
循環方法:讀取字模里的點陣數據,把第一行數據一個比特一個比特的輸出到595(視你的電路可能要進行並串轉換),移位型號要周期運行128次,數據就緒,使能595鎖信號,使能第一行選信號,顯示第一行。然後輸出下一組數據……使能595鎖信號,使能第二行選信號,顯示第二行,如此循環。注意:在切換行的時候要使屏幕什麼都不顯示,否則會什麼都看不清。

3. 單片機 移位 問題

0x7f:0111,1111
>>1
______________
=0011,1111
移位後,最低位的1移出去了,最高位補0。不是循環移位。
可以自己實現循環移位功能:
unsigned char i;
for(i=128;i>0;i=i/2)
{
P0= 0xff - i ; //假設P0輸出0時LED亮
delay_ms(100); //延時100ms

//如果要LED一直挨個放光,把下一行的注釋去掉
//if(i==1) i=128;
}

4. 求單片機(鍵盤輸入LED顯示)實驗代碼注釋

這是鍵盤顯示晶元8279的驅動程序。
程序中,原來有一些注釋,其中的8279,都誤寫成了8259。
盡量加寫了一些注釋,其中對8279的一些命令、數據,沒有多寫,建議樓主參考8279的資料。

CPORT EQU 5FFFH ;8259 {應該是8279} 控制埠地址
DPORT EQU 5EFFH ;?? 應該是8279 數據埠地址
DBUF EQU 30H

ORG 0000H
LJMP START ;主程序入口地址

ORG 0013H
LJMP INT1 ;中斷處理子程序入口

START: ;主程序
MOV SP, #6FH ;???設定棧底

MOV DPTR, #CPORT ;8259 {應該是8279} 控制埠
MOV A, #0DCH ;清除命令字
MOVX @DPTR, A ;清除{8279}的顯示內容
CLEAN :
MOVX A, @DPTR ;讀{8279的}狀態字
JB ACC.7, CLEAN ;判斷顯示RAM是否可操作
MOV A, #00H ;{8279}的方式命令字
MOVX @DPTR,A ;寫入{8279}
MOV A, #2AH ;{8279}的分頻系數
MOVX @DPTR,A ;寫入{8279}
;=========================以上是設定8279的工作方式
MOV R7, #6H
MOV R0, #DBUF
MOV A, #10H ;設置顯示緩存區內容
===========================================================
;以下部分
CDBUF:
MOV @R0, A
INC R0
DJNZ R7, CDBUF
;=========================以上是清除顯示緩存區內容
LCALL DISP ;調用顯示子程序

CLR IT1 ;IT1清0,開外中斷1
NOP ;空操作
SETB EA
NOP ;空操作
SETB EX1 ;置EX1(外部中斷1中斷允許位)為1
NOP ;空操作
CLEAN1:
LJMP CLEAN1 ;等待中斷

INT1: ;外部中斷程序
PUSH ACC ;保護現場
PUSH DPH
PUSH DPL

MOV DPTR, #CPORT ;8279的控制埠
MOV A, #40H ;01000000B
MOVX @DPTR, A ;將40H當做命令寫入8279

MOV DPTR, #DPORT ;8279的數據埠
MOVX A, @DPTR ;讀出按鍵數值

MOV R7, #6H
MOV R0, #DBUF
MOV @R0, A ;按鍵數值寫入顯示緩沖區

LCALL DISP ;顯示
LCALL L_SHIFT ; 顯示緩沖區內容移位

POP DPL ;恢復現場
POP DPH
POP ACC
RETI ;中斷程序結束

L_SHIFT: ; 顯示緩沖區內容移位
MOV R7, #6H ; 移位6次
MOV R0, #DBUF+4
MOV R1, #DBUF+5
NEXT0:
MOV A, @R0 ;取第四個
MOV @R1, A ;送到第五個
DEC R0
DEC R1 ;修改地址號碼
DJNZ R7, NEXT0 ;循環6次移位
RET
以上部分
================================================================
DISP:
MOV DPTR, #CPORT
MOV A, #092H
MOVX @DPTR, A
MOV R0, #DBUF ;R0中存放的是緩沖區的首地址
MOV R7, #06H
NEXTC:
MOV A, @R0
INC R0
MOV DPTR, #DCODE
MOVC A, @A+DPTR
MOV DPTR, #DPORT
MOVX @DPTR, A
DJNZ R7, NEXTC
RET ;返回

DCODE: DB 0C0H,0F9H,0A4H,0B0H ; 字型編碼表
DB 099H,092H,082H,0F8H
DB 080H,090H,088H,083H
DB 0C6H,0A1H,086H,08EH,0FFH

END

5. 有關於單片機數據移位的問題,希望大蝦們可以幫幫忙啊!!!小弟感激不盡啊。。。

sbit P1_7=P1^7;//需要先聲明各個位引腳,因為C語言不能直接給P1.7幅值
sbit P1_6=P1^6;
sbit P1_5=P1^5;
sbit P1_4=P1^4;
sbit P1_3=P1^3;

pp=pp<<6; //整型變數16位,移動6位,讓最高位到D15位置
if(pp&0x8000) P1_7=1; //最高位幅值給P1.7
else P1_7=0;

pp=pp<<1; //左移一位,讓次高位到最高位位置
if(pp&0x8000) P1_6=1; //次高位賦值給P1.6
else P1_6=0;

pp=pp<<1; //左移一位,讓次高位到最高位位置
if(pp&0x8000) P1_5=1; //依次類推P1_5,P1_4.......
else P1_5=0;

pp=pp<<1; //左移一位,讓次高位到最高位位置
if(pp&0x8000) P1_4=1; //依次類推P1_4.......
else P1_4=0;

pp=pp<<1; //左移一位,讓次高位到最高位位置
if(pp&0x8000) P1_3=1; //依次類推P1_3.......
else P1_3=0;

}