当前位置:首页 » 硬盘大全 » 单片机缓存区移位
扩展阅读
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;

}