单片机C语言LED灯点亮程序完全版
- 格式:docx
- 大小:9.35 KB
- 文档页数:13
KeilC51学习2点亮LED灯P0⼝联接8个LED灯,P1^0~P1^7;#include<reg52.h>sbit LED=P1^0;void main(){LED=0;while(1);}//此⽅法使⽤1个字节对单个端⼝赋值P1 = 0xFF; //P1⼝全部为⾼电平,对应的LED灯全灭掉,//ff换算成⼆进制是 1111 1111P1 = 0xfe; //P1⼝的最低位点亮,可以更改数值是其他的灯点亮//0xfe是16进制,0x开头表⽰16进制数,//fe换算成⼆进制是 1111 1110全部取反,主函数中的代码修改为LED=~LED;#include<reg52.h>unsigned int i,j;void main(){while(1){P1=~(1<<j++);if(j==8){j=0;}for(i=0;i<50000;i++);}}1void main (void)2 {3while (1) //主循环4 { //主循环中添加其他需要⼀直⼯作的程序5 LED=~LED;6//将P1.0⼝赋值 0,对外输出低电平7 delay(100);//执⾏100次8 }9 }10void delay(int time)//延时函数11 {12int i=0;13while(time--)14 {15 i=4000;16while(i--);17 }18 }延时闪烁1void delay(int time)//延时函数2 {3int i=0;4while(time--)5 {6 i=4000;7while(i--);8 }9 }10void main (void)11 {12while (1) //主循环13 { //主循环中添加其他需要⼀直⼯作的程序1415 unsigned char i; //定义⼀个⽆符号字符型局部变量 i 取值范围 0~25516//P1=0xfe; //赋初始值17for(i=0;i<8;i++) //加⼊ for循环,表明for循环⼤括号中的程序循环执⾏8次18 {19 P1<<=1;20 delay(100);//执⾏100次21 }22 }23 }延时左移1void delay(int time)//延时函数2 {3int i=0;4while(time--)5 {6 i=4000;7while(i--);8 }9 }10void main (void)11 {1213 unsigned char i; //定义⼀个⽆符号字符型局部变量 i 取值范围 0~25514 delay(100);15 P1=0xfe; //赋初始值16while (1) //主循环17 {18for(i=0;i<8;i++) //加⼊ for循环,表明for循环⼤括号中的程序循环执⾏8次19 {20 delay(100);21 P1<<=1;22 P1=P1|0x01; //左移后,最右端⾃动赋值0,所以需要该语句赋值123 }24 P1=0xfe; //重新赋初始值25//主循环中添加其他需要⼀直⼯作的程序26 }27 }循环左移1 sbit LED0=P1^0;2void delay(int i)//延时函数3 {4while(i--);5 }6void main (void)7 {89 unsigned int CYCLE=600,PWM_LOW=0;//定义周期并赋值10while (1) //主循环11 {12 LED0=1;13 delay(60000); //特意加延时,可以看到熄灭的过程14for(PWM_LOW=1;PWM_LOW<CYCLE;PWM_LOW++){ //PWM_LOW表⽰低15//电平时间,这个循环中低电平时长从1累加到CYCLE(周期)的值,即600次1617 LED0=0; //点亮LED18 delay(PWM_LOW);//延时长度,600次循环中从1加⾄59919 LED0=1; //熄灭LED20 delay(CYCLE-PWM_LOW);//延时长度,600次循环中从599减⾄12122 }23 LED0=0;24for(PWM_LOW=CYCLE-1;PWM_LOW>0;PWM_LOW--){ //与逐渐变亮相反的过程2526 LED0=0;27 delay(PWM_LOW);28 LED0=1;29 delay(CYCLE-PWM_LOW);30 }31//主循环中添加其他需要⼀直⼯作的程序32 }33 }呼吸灯流⽔灯1 #include<reg52.h> //包含头⽂件,⼀般情况不需要改动,2//头⽂件包含特殊功能寄存器的定义34void delay100ms(unsigned char num);5/*------------------------------------------------6流⽔灯7------------------------------------------------*/8void main (void)9 {10 unsigned char led=0xff,mask=0x1,flag=0;11//unsigned char tflag=0,time=100;12while(1)13 {14 P1=led^mask; //mask为0 全灭15 delay100ms(5); //延时500ms16if(0x80==mask)17 flag=0;// 让mask向右位移18if(0x1==mask)19 flag=1;//让mask向左位移20 flag?(mask<<=1):(mask>>=1);21 }22 }2324void delay100ms(unsigned char num)25 {26 unsigned char n,m;27for(;num;num--)28 {29for(n=200;n;n--)30 {31for(m=250;m;m--);32 }33 }34 }流⽔灯函数实现流⽔灯1 #include<reg52.h> //包含头⽂件,⼀般情况不需要改动,2 #include<intrins.h>3#define uchar unsigned char //头⽂件包含特殊功能寄存器的定义 4void delay100ms(unsigned char num);5/*------------------------------------------------6利⽤_crol_、_cror_实现流⽔灯7_crol_ 将char型变量循环左移8_cror_ 将char型变量循环右移9------------------------------------------------*/10void main (void)11 {12 uchar x=0x3;13 bit flag=0;14while(1)15 {16 P1=x;17 delay100ms(10);18if(0x3==x)19 flag=0;20else if(0xc0==x)21 flag=1;22 flag?(x=_cror_(x,2)):(x=_crol_(x,2));23 }24 }25//延时函数26void delay100ms(unsigned char num)27 {28 unsigned char n,m;29for(;num;num--)30 {31for(n=200;n;n--)32 {33for(m=250;m;m--);34 }35 }36 }流⽔灯2指针实现流⽔灯#include <reg52.h>void delay(unsigned int);//指针实现流⽔灯代码unsigned char dis[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};void main(){unsigned char i,*p;//定义⼀个⽆符号字符型变量i各⼀个指向⽆符号字符型变量的指针变量P while(1){p=&dis[0];//把数组中第⼀个成员数据(0xFE)所占的内存地址赋给指针变量P for(i=0;i<8;i++){P1=*p;//取指针指向的数组元素,并拷贝给单⽚机的P0⼝p++; //指针加1,指向数组的下⼀个元素delay(10);}}}void delay(unsigned int i){unsigned int j;for(;i!=0;i--){for(j=3000;j!=0;j--);}}指针实现流⽔灯花样流⽔灯1 #include<reg52.h> //包含头⽂件,⼀般情况不需要改动,2#define uchar unsigned char //头⽂件包含特殊功能寄存器的定义3 uchar code tab[]={40x1,0x2,0x4,0x8,0x10,0x20,0x40,0x80, //正向流⽔灯50x40,0x20,0x10,0x8,0x4,0x2,0x1,0x0, //反向流⽔灯60x55,0xaa,0x55,0xaa,0x55,0xaa,0x0, //隔灯闪烁70x0f,0xf0,0x0f,0xf0,0x0, //⾼四盏底四盏闪烁80xcc,0x33,0xcc,0x33,0xcc,0x33,0x0//隔两盏灯闪烁9 };10void delay100ms(unsigned char num);11/*------------------------------------------------12花样流⽔灯13------------------------------------------------*/14void main (void)15 {16 uchar x;17while(1)18 {19for(x=0;x<35;x++)20 {21 P1=tab[x];22 delay100ms(10);23 }24 }25 }2627void delay100ms(unsigned char num)28 {29 unsigned char n,m;30for(;num;num--)31 {32for(n=200;n;n--)33 {34for(m=250;m;m--);35 }36 }37 }花样流⽔灯指针,⼆维数组花样流⽔灯#include <reg52.h>void delay(unsigned int ); //延时函数的声明//*******定义⼀个⼆维数组,存储40个彩灯数据。
1例子1第二个灯亮include<reg52.h>voidmain{P1=0xfd;}include<reg52.h>SbitD1=P1^0;Voidmain{D1=0}注意:稍微改程序时需重新hex化例子2第一个灯亮include<reg52.h>//52单片机头文件sbitled1=P1^0;//单片机管脚位声明voidmain //主函数{led1=0; //将单片机P1.0口清零while1;//程序停止在这里,在后面会讲到为什么这样写;}例子3第一个灯亮include<reg52.h>//52单片机头文件voidmain //主函数{P1=0xfe;while1;//程序停止在这里,在后面会讲到为什么这样写;}2例子1第三个灯闪烁fir循环include<reg52.h>sbitD2=P1^2;unsignedinta;voidmain{D2=0;fora=0;a<=10000;a++{};D2=1;fora=0;a<=10000;a++{};}例子2第三个闪烁while循环include<reg52.h>sbitD2=P1^2;unsignedinta;voidmain{a=5000;D2=0;whilea--;a=5000;D2=1;whilea--;}2.include<reg52.h>//52单片机头文件sbitled1=P1^0;//单片机管脚位声明voidmain //主函数{unsignedinti;//定义一个int型变量while1{i=50000;//变量赋初值为50000led1=0; //点亮灯whilei--;//延时i=50000;led1=1;//熄灭灯whilei--;}}3例子1357灯同时亮include<reg52.h>//52单片机头文件sbitled1=P1^0;//单片机管脚位声明sbitled3=P1^2;//单片机管脚位声明sbitled5=P1^4;//单片机管脚位声明sbitled7=P1^6;//单片机管脚位声明voidmain //主函数{led1=0; //将单片机P1.0口清零led3=0; //将单片机P1.2口清零led5=0; //将单片机P1.4口清零led7=0; //将单片机P1.6口清零while1;//程序停止在这里,在后面会讲到为什么这样写; }例子21357同时亮include<reg52.h>//52单片机头文件voidmain //主函数{P1=0xaa;while1;//程序停止在这里,在后面会讲到为什么这样写; }例子3流水灯一个一个接着亮不循环include<reg52.h>//52单片机头文件voidmain //主函数{unsignedinti;//定义一个int型变量while1{i=50000; //变量赋初值为50000P1=0xfe; //点亮第一个灯whilei--; //延时i=50000; //变量赋初值为50000P1=0xfd; //点亮第二个灯whilei--; //延时i=50000; //变量赋初值为50000P1=0xfb; //点亮第三个灯whilei--; //延时i=50000; //变量赋初值为50000P1=0xf7; //点亮第四个灯whilei--; //延时i=50000; //变量赋初值为50000P1=0xef; //点亮第五个灯whilei--; //延时i=50000; //变量赋初值为50000P1=0xdf; //点亮第六个灯whilei--; //延时i=50000; //变量赋初值为50000P1=0xbf; //点亮第七个灯whilei--; //延时i=50000; //变量赋初值为50000P1=0x7f; //点亮第八个灯whilei--; //延时}}例子4include<reg52.h>include<intrins.h>defineuintunsignedintdefineucharunsignedcharuchartemp,num,num1;sbitbeep=P2^3;voiddelayuint;voidmaintemp=0xfe;while1{fornum1=0;num1<3;num1++{fornum=0;num<8;num++{P1=temp;beep=0;delay100;temp=_crol_temp,1;P1=0xff;beep=1;delay100;}}fornum1=0;num1<3;num1++{fornum=0;num<8;num++{P1=temp;beep=0;delay100;temp=_cror_temp,1;P1=0xff;beep=1;delay100;}}while1;}}voiddelayuintz{uintx,y;forx=z;x>0;x--fory=110;y>0;y--;}4延时子程序voiddelay{uintx;forx=100;x>0;x--{};For的嵌套voiddelay{uintx,y; %局部变量forx=100;x>0;x-- %小括号后不加分号fory=600;y>0;y--; %小括号后的分号表示该语句是上一条语句的,分号将该句与下句隔开或者{fory=600;y>0;y--;}include<reg52.h>例子1include<reg52.h>defineuintunsignedintdefineucharunsignedcharsbitD1=P1^0;voiddelay; %注意分号不能少voidmain{while1{D1=0;delay;D1=1;delay;}}voiddelay{uintx,y;forx=100;x>0;x--fory=600;y>0;y--;}带参数的比不带参数的要方便例子2无参和有参的对比include<reg52.h>defineuintunsignedintdefineucharunsignedcharsbitD1=P1^0;//voiddelay;voiddelayuint;%带一个参数的,参数类型必须要写,参数可不写;比如可以写成uintz;也可以带多个参数voidmain{while1{D1=0;delay1200;%亮2秒D1=1;delay1200;}}/voiddelay{uintx,y;forx=100;x>0;x--fory=600;y>0;y--; }/voiddelayuintz{uintx;uchary;forx=z;x>0;x--fory=20;y>0;y--; }例子3include<reg52.h> defineuintunsignedint defineucharunsignedchar sbitD1=P1^0; voiddelayuint;voidmain{while1{D1=0;delay1200;D1=1;delay1200;}}voiddelayuintz{uintx;uchary;forx=z;x>0;x--fory=20;y>0;y--; }。
1. 闪烁灯1. 实验任务如图4、1、1 所示:在P1、0 端口上接一个发光二极管L1,使L1 在不停地一亮灭,一亮一灭的时间间隔为0、2 秒。
2. 电路原理图图4、1、13. 系统板上硬件连线把“单片机系统”区域中的P1、0 端口用导线连接到“八路发光二极管指示块”区域中的L1 端口上。
4. 程序设计内容(1). 延时程序的设计方法作为单片机的指令的执行的时间就是很短,数量大微秒级,因此,我们要求的闪烁时间间隔为0、2 秒,相对于微秒来说,相差太大,所以我们在执行某一指令时,插入延时程序,来达到我们的要求,但这样的延时程序就是如何设计呢?下面具体介绍其原理:2如图4、1、1 所示的石英晶体为12MHz,因此,1 个机器周期为1 微秒机器周期微秒MOV R6,#20 2 个机器周期2D1: MOV R7,#248 2 个机器周期2 2+2×248=498 20×DJNZ R7,$ 2 个机器周期2×248 498DJNZ R6,D1 2 个机器周期2×20=4010002因此,上面的延时程序时间为10、002ms。
由以上可知,当R6=10、R7=248 时,延时5ms,R6=20、R7=248 时,延时10ms,以此为基本的计时单位。
如本实验要求0、2 秒=200ms,10ms×R5=200ms,则R5=20,延时子程序如下:DELAY: MOV R5,#20D1: MOV R6,#20D2: MOV R7,#248DJNZ R7,$DJNZ R6,D2DJNZ R5,D1RET(2). 输出控制如图1 所示,当P1、0 端口输出高电平,即P1、0=1 时,根据发光二极管的单向导电性可知,这时发光二极管L1 熄灭;当P1、0 端口输出低电平,即P1、0=0 时,发光二极管L1 亮;我们可以使用SETB P1、0 指令使P1、0 端口输出高电平,使用CLR P1、0 指令使P1、0 端口输出低电平。
8051单片机c语言置位与复位操作点亮led方法8051单片机作为一种经典的微控制器,被广泛应用于工业控制、嵌入式系统等领域。
C语言因其高效性和易读性,成为编写8051单片机程序的首选语言。
本文将详细介绍如何使用C语言对8051单片机进行置位和复位操作,以点亮LED灯。
### 8051单片机C语言置位与复位操作点亮LED方法#### 1.硬件环境准备在开始编程之前,需要确保硬件环境搭建正确。
所需硬件包括:- 8051单片机开发板- LED灯一个- 电阻(与LED灯的电压和电流匹配)- 面包板(用于搭建电路)将LED灯的一个引脚连接到8051单片机的某个I/O口(如P1.0),另一个引脚通过电阻接地。
#### 2.软件环境准备- 使用Keil uVision IDE作为开发环境,编写和编译C语言代码。
- 确保安装了适用于8051单片机的C编译器。
#### 3.C语言代码编写以下是使用C语言对8051单片机进行置位(点亮LED)和复位(熄灭LED)操作的示例代码:```c#include <reg51.h> // 包含8051寄存器定义的头文件#define LED P1_0 // 定义LED连接的I/O口,这里以P1.0为例void delay(unsigned int); // 延时函数声明void main() {while(1) { // 无限循环LED = 1; // 置位P1.0,LED点亮delay(10000); // 延时LED = 0; // 复位P1.0,LED熄灭delay(10000); // 延时}}// 延时函数定义,具体的延时时间取决于单片机的晶振频率void delay(unsigned int count) {unsigned int i,j;for(i=0; i<count; i++)for(j=0; j<1275; j++); // 空循环实现延时}```#### 4.置位与复位操作说明在上面的代码中,`LED = 1;` 对应的是置位操作,将P1.0口置为高电平,电流流经LED,使其点亮。
led点亮电路的c语言程序设计以下是一个简单的使用C语言编写的LED点亮电路的程序:
c
#include <stdio.h>
#include <wiringPi.h>
#define LED_PIN 4
int main(void) {
初始化wiringPi库
if (wiringPiSetup() == -1) {
printf("wiringPi初始化失败!\n");
return 1;
}
设置LED引脚为输出模式
pinMode(LED_PIN, OUTPUT);
while (1) {
点亮LED
digitalWrite(LED_PIN, HIGH);
delay(1000); 延时1秒
关闭LED
digitalWrite(LED_PIN, LOW);
delay(1000); 延时1秒
}
return 0;
}
这个程序使用了WiringPi库,因此在编译之前需要先安装WiringPi库。
可以使用下面的命令在树莓派上安装WiringPi库:
sudo apt-get install wiringpi
编译程序使用下面的命令:
gcc -o led led.c -lwiringPi
然后运行程序:
./led
这个程序会让LED灯每隔1秒钟点亮和熄灭一次,不断循环。
在Raspberry Pi 的GPIO引脚中,将LED的正极连接到GPIO 4引脚,负极连接到地线上。
用c语言编写点灯程序点灯程序是指利用C语言编写的一段代码,可以控制硬件设备上的LED灯进行开关操作。
在嵌入式系统开发领域,点灯程序是入门级的示例程序,也是初学者熟悉硬件编程的重要一步。
我们需要了解一些基本的硬件知识。
在嵌入式系统中,LED灯是一种常见的输出设备,它通常由一个电源引脚和一个控制引脚组成。
通过控制引脚的高低电平,我们可以控制LED灯的亮灭状态。
在C语言中,我们可以通过操作硬件寄存器来控制LED灯的状态。
下面是一个简单的点灯程序示例:```#include <stdio.h>#include <wiringPi.h>#define LED_PIN 0int main(){// 初始化wiringPi库if (wiringPiSetup() == -1){printf("初始化wiringPi失败!\n");return 1;}// 设置LED引脚为输出模式pinMode(LED_PIN, OUTPUT);while (1){// 点亮LED灯digitalWrite(LED_PIN, HIGH);delay(1000); // 延时1秒// 熄灭LED灯digitalWrite(LED_PIN, LOW);delay(1000); // 延时1秒}return 0;}```以上代码使用了wiringPi库来进行GPIO控制。
首先,我们需要在程序中引入`wiringPi.h`头文件,并且定义LED引脚的宏。
接下来,在`main`函数中,我们先初始化wiringPi库,然后将LED引脚设置为输出模式。
在主循环中,我们使用`digitalWrite`函数将LED引脚的电平设置为高电平,从而点亮LED灯。
然后,通过`delay`函数延时1秒钟。
接着,我们将LED引脚的电平设置为低电平,熄灭LED灯,并再次延时1秒钟。
这样循环执行,LED灯就会周期性地亮灭。
1例子1第二个灯亮
include<reg52.h>
void main
{
P1=0xfd;
}
include<reg52.h>
Sbit D1=P1^0;
Void main
{
D1=0
}
注意:稍微改程序时需重新hex化
例子2第一个灯亮
include<reg52.h> //52单片机头文件
sbit led1=P1^0; //单片机管脚位声明
void main //主函数
{
led1=0; //将单片机P1.0口清零
while1; //程序停止在这里,在后面会讲到为什么这样写.
}
例子3第一个灯亮
include<reg52.h> //52单片机头文件
void main //主函数
{
P1=0xfe; //将单片机P1口的8个口由高到低分别赋值为11111110
while1; //程序停止在这里,在后面会讲到为什么这样写.
}
2例子1第三个灯闪烁fir循环
include<reg52.h>
sbit D2=P1^2;
unsigned int a;
void main
{
D2=0;
fora=0;a<=10000;a++{};
D2=1;
fora=0;a<=10000;a++{};
}
例子2第三个闪烁while循环
include<reg52.h>
sbit D2=P1^2;
unsigned int a;
void main
{
a=5000;
D2=0;
whilea--;
a=5000;
D2=1;
whilea--;
}
2.include<reg52.h> //52单片机头文件sbit led1=P1^0; //单片机管脚位声明void main //主函数
{
unsigned int i; //定义一个int型变量while1
{
i=50000; //变量赋初值为50000
led1=0; //点亮灯
whilei--; //延时
i=50000;
led1=1; //熄灭灯
whilei--;
}
}
3例子1 3 5 7灯同时亮
include<reg52.h> //52单片机头文件
sbit led1=P1^0; //单片机管脚位声明
sbit led3=P1^2; //单片机管脚位声明
sbit led5=P1^4; //单片机管脚位声明
sbit led7=P1^6; //单片机管脚位声明
void main //主函数
{
led1=0; //将单片机P1.0口清零
led3=0; //将单片机P1.2口清零
led5=0; //将单片机P1.4口清零
led7=0; //将单片机P1.6口清零
while1; //程序停止在这里,在后面会讲到为什么这样写.
}
例子2 1 3 5 7同时亮
include<reg52.h> //52单片机头文件
void main //主函数
{
P1=0xaa; //将单片机P1口的8个口由高到低分别赋值为10101010
while1; //程序停止在这里,在后面会讲到为什么这样写.
}
例子3流水灯一个一个接着亮不循环
include<reg52.h> //52单片机头文件
void main //主函数
{
unsigned int i; //定义一个int型变量
while1
{
i=50000; //变量赋初值为50000
P1=0xfe; //点亮第一个灯
whilei--; //延时
i=50000; //变量赋初值为50000
P1=0xfd; //点亮第二个灯
whilei--; //延时
i=50000; //变量赋初值为50000
P1=0xfb; //点亮第三个灯
whilei--; //延时
i=50000; //变量赋初值为50000
P1=0xf7; //点亮第四个灯
whilei--; //延时
i=50000; //变量赋初值为50000
P1=0xef; //点亮第五个灯
whilei--; //延时
i=50000; //变量赋初值为50000
P1=0xdf; //点亮第六个灯
whilei--; //延时
i=50000; //变量赋初值为50000
P1=0xbf; //点亮第七个灯
whilei--; //延时
i=50000; //变量赋初值为50000
P1=0x7f; //点亮第八个灯
whilei--; //延时
}
}
例子4
include<reg52.h>
include <intrins.h>
define uint unsigned int
define uchar unsigned char uchar temp,num,num1;
sbit beep=P2^3;
void delayuint;
void main
{
temp=0xfe;
while1
{
fornum1=0;num1<3;num1++ {
fornum=0;num<8;num++
{
P1=temp;
beep=0;
delay100;
temp=_crol_temp,1;
P1=0xff;
beep=1;
delay100;
}
}
fornum1=0;num1<3;num1++
{
fornum=0;num<8;num++
{
P1=temp;
beep=0;
delay100;
temp=_cror_temp,1;
P1=0xff;
beep=1;
delay100;
}
}
while1;
}
}
void delayuint z
{
uint x,y;
forx=z;x>0;x--
fory=110;y>0;y--;
}
4延时子程序
void delay
{
uint x;
forx=100;x>0;x--{};
}
For的嵌套
void delay
{
uint x,y; %局部变量
forx=100;x>0;x-- %小括号后不加分号
fory=600;y>0;y--; %小括号后的分号表示该语句是上一条语句的,分号将该句与下句隔开或者{fory=600;y>0;y--;}include<reg52.h>
例子1include<reg52.h>
define uint unsigned int
define uchar unsigned char
sbit D1=P1^0;
void delay; %注意分号不能少
void main
{
while1
{
D1=0;
delay;
D1=1;
delay;
}
}
void delay
{
uint x,y;
forx=100;x>0;x--
fory=600;y>0;y--;
}
带参数的比不带参数的要方便
例子2无参和有参的对比include<reg52.h>
define uint unsigned int
define uchar unsigned char
sbit D1=P1^0;
//void delay;
void delayuint;%带一个参数的,参数类型必须要写,参数可不写.比如可以写成uint z.也可以带多个参数
void main
{
while1
{
D1=0;
delay1200;%亮2秒
D1=1;
delay1200;
}
}
/
void delay
{
uint x,y;
forx=100;x>0;x--
fory=600;y>0;y--; }/
void delayuint z
{
uint x;
uchar y;
forx=z;x>0;x--
}
例子3include<reg52.h> define uint unsigned int define uchar unsigned char sbit D1=P1^0;
void delayuint;
void main
{
while1
{
D1=0;
delay1200;
D1=1;
delay1200;
}
}
void delayuint z
{
uint x;
uchar y;
forx=z;x>0;x--
}
5循环左移三位如10100101a5-001011012d。