当前位置:文档之家› 单片机简单程序

单片机简单程序

单片机简单程序
单片机简单程序

*************************

数码管动态显示

*************************

#include

#define uint unsigned int

#define uchar unsigned char

sbit dula=P3^7;

uchar code table1[]={0,1,2,3,4,5,6,7};

uchar code table[]={

0x3f,0x06,0x5b,0x4f,

0x66,0x6d,0x7d,0x07,

0x7f,0x6f,0x77,0x7c,

0x39,0x5e,0x79,0x71};

void delay(uint z);

void main()

{

uchar i=0;

uchar num=0;

while(1)

{

P0=table[num];

P2=table1[i];

delay(2);

num++;

i++;

if(i==8)

{

num=0;i=0 ;

}

}

}

void delay(uint z)

{

uint x,y;

for(x=100;x>0;x--)

for(y=z;y>0;y--);

}

**************************************** 数码管静态显示

**************************************** #include

#define uint unsigned int

#define uchar unsigned char

sbit dula=P3^7;

sbit wela=P2;

void delay(uint z);

void main()

{

wela=1;

P2=0xf8;

wela=0;

dula=1;

P0=0x71;

dula=0;

while(1);

}

void delay(uint z)

{

uint x,y;

for(x=100;x>0;x--)

for(y=z;y>0;y--);

}

***************************************** 流水灯

***************************************** #include

#include

#define uint unsigned int

#define uchar unsigned char

uchar a;

uint i,j;

void delay(uint);

void main()

{

a=0xfe;

P0=a;

while(1)

{

a=_crol_(a,1);

delay(600);

P0=a;

delay(600);

}

}

void delay(uint z)

{

uint x,y;

for(x=10;x>0;x--)

for(y=z;y>0;y--);

}

**************************************** 跑马灯

****************************************

#include

#define LED P0

void delay()

{

unsigned int i;

for(i=0;i<10000;i++);

}

void main()

{

unsigned char i,k;

for(;;)

{

k=0xfe;

for(i=0;i<8;i++)

{

LED=k;

delay();

k=k<<1;

}

}

}

********************************

#include

#define uint unsigned int

#define uchar unsigned char

#define wela P2

sbit dula=P3^7;

sbit led=P0^0;

uchar code table1[]={0,1,2,3,4,5,6,7};

uchar code table[]={

0x3f,0x06,0x5b,0x4f,

0x66,0x6d,0x7d,0x07,

0x7f,0x6f,0x77,0x7c,

0x39,0x5e,0x79,0x71};

void main()

{

wela=1;

P2=0xff;

wela=1;

dula=1;

P0=0x71;

dula=0;

while(1);

/*uchar i,num;

while(1)

{

wela=table1[i];

for(i=0;i<8;i++)

{

dula=1;

P0=table[num];

dula=0;

num++;

}

i++;

} */

}

************************************

中断

*************************************

#include

#define uint unsigned int

#define uchar unsigned char

#define wela P2

sbit dula=P3^7;

sbit led=P1^2;

uchar i,num;

uchar code table1[]={0xff,0xfe,0xfd,0xfc,0xfb,0xfa,0xf9,0xf8}; uchar code table[]={

0x3f,0x06,0x5b,0x4f,

0x66,0x6d,0x7d,0x07,

0x7f,0x6f,0x77,0x7c,

0x39,0x5e,0x79,0x71};

void delay(uint);

void main()

{

EA=1;

EX0=1;

IT0=1;

while(1)

{

wela=table1[i];

dula=1;

P0=table[num];

delay(6000);

dula=0;

num++;

i++;

if(i==8)

{

i=0;

}

if(num==16)

{

num=0;

}

}

}

void delay(uint z)

{

uint x,y;

for(x=10;x>0;x--)

for(y=z;y>0;y--);

}

void exter0() interrupt 0

{

led=0;

}

********************************** 定时器

********************************* #include

#define uint unsigned int

#define uchar unsigned char

#define wela P2

sbit dula=P3^7;

sbit led=P1^2;

uchar i,num,tt;

uchar code table1[]={0xff,0xfe,0xfd,0xfc,0xfb,0xfa,0xf9,0xf8}; uchar code table[]={

0x3f,0x06,0x5b,0x4f,

0x66,0x6d,0x7d,0x07,

0x7f,0x6f,0x77,0x7c,

0x39,0x5e,0x79,0x71};

void delay(uint);

void main()

{

tt=0;

TMOD=0x01;//设置定时器0为工作方式1

TH0=(65536-50000)/256;

TL0=(65536-50000)%256;

EA=1;

ET0=1;//开定时器0中断

TR0=1;

while(1)

{

if(tt==4)

{

tt=0;

wela=table1[i];

dula=1;

P0=table[num];

dula=0;

num++;

i++;

}

if(i==8)

{

i=0;

}

if(num==16)

{

num=0;

}

}

}

void delay(uint z)

{

uint x,y;

for(x=10;x>0;x--)

for(y=z;y>0;y--);

}

void exter0() interrupt 1

{

TH0=(65536-50000)/256;

TL0=(65536-50000)%256;

tt++;

}

************************************** 矩阵键盘

**************************************** #include

#define uint unsigned int

#define uchar unsigned char

sbit dula=P3^7;

uchar code table[]={

0x3f,0x06,0x5b,0x4f,

0x66,0x6d,0x7d,0x07,

0x7f,0x6f,0x77,0x7c,

0x39,0x5e,0x79,0x71,0};

uchar num,temp,num1;

uchar keyscan();

void delay(uint z)

{

uint x,y;

for(x=100;x>0;x--)

for(y=z;y>0;y--);

}

void main()

{

num=17;

P2=0xff;

dula=1;

P0=0;

dula=0;

P0=0xff;

while(1)

{

num1=keyscan();

dula=1;

P0=table[num1-1];

dula=0;

}

}

uchar keyscan()

{

P1=0xfe;

temp=P1;

temp=temp&0xf0;

while(temp!=0xf0)

{

delay(5);

temp=P1;

temp=temp&0xf0;

while(temp!=0xf0)

{

switch(temp)

{

case 0xe0:num=1;break;

case 0xd0:num=2;break;

case 0xb0:num=3;break;

case 0x70:num=4;break;

}

while(temp!=0xf0)

{

temp=P1;

temp=temp&0xf0;

}

}

}

P1=0xfd;

temp=P1;

temp=temp&0xf0;

while(temp!=0xf0)

{

delay(5);

temp=P1;

temp=temp&0xf0;

while(temp!=0xf0)

{

switch(temp)

{

case 0xe0:num=5;break;

case 0xd0:num=6;break;

case 0xb0:num=7;break;

case 0x70:num=8;break;

}

while(temp!=0xf0)

{

temp=P1;

temp=temp&0xf0;

}

}

}

P1=0xfb;

temp=P1;

temp=temp&0xf0;

while(temp!=0xf0)

{

delay(5);

temp=P1;

temp=temp&0xf0;

while(temp!=0xf0)

{

switch(temp)

{

case 0xe0:num=9;break;

case 0xd0:num=10;break;

case 0xb0:num=11;break;

case 0x70:num=12;break;

}

while(temp!=0xf0)

{

temp=P1;

temp=temp&0xf0;

}

}

}

P1=0xf7;

temp=P1;

temp=temp&0xf0;

while(temp!=0xf0)

{

delay(5);

temp=P1;

temp=temp&0xf0;

while(temp!=0xf0)

{

switch(temp)

{

case 0xe0:num=13;break;

case 0xd0:num=14;break;

case 0xb0:num=15;break;

case 0x70:num=16;break;

}

while(temp!=0xf0)

{

temp=P1;

temp=temp&0xf0;

}

}

}

return num;

}

************************************

串行通信

*************************************** #include

unsigned char flag,a;

void main()

{

TMOD=0x20;//设置定时器1为工作方式2

TH1=0xfd;

TL1=0xfd;

TR1=1;

REN=1;

SM0=0;

SM1=1;

EA=1;

ES=1;

while(1)

{

/* if(RI==1)

{

RI=0;

P0=SBUF;

} */

if(flag==1)

{

ES=0;

flag=0;

SBUF=a;

while(!TI);

TI=0;

ES=1;

}

}

}

void ser() interrupt 4

{

RI=0;

P0=SBUF;

a=SBUF;

flag=1;

}

************************************ E2p

************************************ #include

#define uchar unsigned char

sbit sda=P3^6;

sbit scl=P1^5;

uchar a;

void delay()

{;;}

void delay1(uchar x)

{

uchar a,b;

for(a=x;a>0;a--)

for(b=100;b>0;b--);

}

void start() //开始信号

{

sda=1;

delay();

scl=1;

delay();

sda=0;

delay();

}

void stop() //停止信号

{

sda=0;

delay();

scl=1;

delay();

sda=1;

delay();

}

void respons() //应答信号

{

char i;

scl=1;

delay();

while((sda==1)&&(i<250))i++;

scl=0;

delay();

}

void init()

{

sda=1;

scl=1;

}

void write_byte(uchar date)

{

uchar i,temp;

temp=date ;

scl=0;

delay();

for(i=0;i<8;i++)

{

temp=temp<<1;

sda=CY;

delay();

scl=1;

delay();

scl=0;

delay();

}

sda=1;

delay();

}

uchar read_byte()

{

uchar i,j,k;

scl=0;

delay();

sda=1;

delay();

for(i=0;i<8;i++)

{

scl=1;

delay();

j=sda;

k=(k<<1)|j;

scl=0;

delay();

}

return k;

}

void write_add(uchar address,uchar date) {

start();

write_byte(0xa0);

respons();

write_byte(address);

respons();

write_byte(date);

respons();

stop();

}

uchar read_add(uchar address)

{

uchar date;

start();

write_byte(0xa0);

respons();

write_byte(address);

respons();

start();

write_byte(0xa1);

respons();

date=read_byte();

stop();

return date;

}

void main()

{

init();

write_add(23,0xaa);

delay1(100);

P0=read_add(23);

while(1);

}

**********************************

计数

***********************************

#include

#define uint unsigned int

#define uchar unsigned char

#define wela P2

sbit dula=P3^7;

uchar ge,shi,bai,num,temp,aa,numdu;

uchar code table1[]={0xff,0xfe,0xfd,0xfc,0xfb,0xfa,0xf9,0xf8}; uchar code table[]={

0x3f,0x06,0x5b,0x4f,

0x66,0x6d,0x7d,0x07,

0x7f,0x6f,0x77,0x7c,

0x39,0x5e,0x79,0x71};

void delay(uint);

void display(uchar bai,uchar shi,uchar ge);

void init();

void main()

{

init();//初始化子程序

while(1)

{

if(aa==2)

{

aa=0;

temp++;

if(temp==100)

{

temp=0;

}

bai=temp/100;

shi=temp%100/10;

ge=temp%10;

}

display(bai,shi,ge);

}

}

void delay(uint z)

{

uint x,y;

for(x=100;x>0;x--)

for(y=z;y>0;y--);

}

void display(uchar bai,uchar shi,uchar ge) {

P2=0xff;

dula=1;

P0=table[ge];

dula=0;

delay(3);

P2=0xfe;

dula=1;

P0=table[shi];

dula=0;

delay(3);

P2=0xfd;

dula=1;

P0=table[bai];

dula=0;

delay(3);

}

void init()

{

temp=0;

TMOD=0x01;

TH0=(65536-50000)/256;

TL0=(65536-50000)%256;

EA=1;

ET0=1;

TR0=1;

}

void timer0() interrupt 1

{

aa++;

TH0=(65536-50000)/256;

TL0=(65536-50000)%256; }

51单片机常用子程序汇总

目录 1、通过串口连续发送n个字节的数据 /*************************************************************** 模块功能:通过串口连续发送n个字节的数据 参数说明: s:待发送数据的首地址 n:要发送数据的字节数 ***************************************************************/ void SendD(unsigned char *s,unsigned char n) { unsigned char unX; if(n>0) { ES=0; // 关闭串口中断 for(unX=0;unX #include #define Nop() _nop_() //空指令

sbit SDA=P1^3; sbit SCL=P1^2; bit ACK; void Start_I2c() { SDA=1; Nop(); SCL=1; Nop(); Nop(); Nop(); Nop(); Nop(); SDA=0; Nop(); Nop(); Nop(); Nop(); Nop(); SCL=0; //钳住I2C总线,准备发送或接受数据Nop(); Nop(); } (2)结束总线函数 /*************************************************************** 模块功能:发送I2C总线结束条件 ***************************************************************/ void Stop_I2c() { SDA=0; Nop(); SCL=1; Nop(); Nop(); Nop(); Nop(); Nop(); SDA=1; Nop(); Nop(); Nop(); Nop();

一个单片机小程序编写

一个单片机小程序编写 单片机在家用电器和工业系统中应用广泛,下面给大家介绍一个单片机小程序的编写。 1、设计任务: 如果开关合上,L1亮,开关打开,L1熄灭,如图1所示。监视开关K1(接在P3.0端口上),用发光二极管L1(接在单片机P1.0端口上)显示开关状态。 2、电路原理图: 图1 3、系统板上硬件连线:如图1所示,图中VCC = +5V。 4、程序设计内容: (1)开关状态的检测过程: 开关状态是从单片机的P3.0端口输入信号,当拨开开关K1拨上去(开关断开),即输入高电平;当拨动开关K1拨下去(开关闭合),即输入低电平。可以采用JB BIT,REL 指令来完成对开关状态的检测即可。 (2)输出控制: 如图1所示,当P1.0端口输出高电平,即P1.0=1时,根据发光二极管的单向导电性可知,这时发光二极管L1熄灭;当P1.0端口输出低电平,即P1.0=0时,发光二极管L1亮。我们可以使用SETB P1.0指令使P1.0端口输出高电平,使用CLR P1.0指令使P1.0端口输出低电平。 5、程序框图:如图2所示。

图2 6、汇编源程序的编写: ORG 00H START: JB P3.0,D1 CLR P1.0 SJMP START D1: SETB P1.0 SJMP START END 7、用“keil软件编”写好汇编程序,然后转换成HEX文件并保存。 8、用“增强型A51编程器”把刚才写好的HEX文件烧写入单片机中。 9、把已写入程序的单片机,装入图1的电路,然后通电。当拨动开关K1拨下去(开关闭合),发光二极管L1亮;拨开开关K1拨上去(开关断开),发光二极管L1灭。说明刚才编写的程序达到了我们的设计要求。

单片机-- 简易计算器汇编程序

NAME T11 单片机--简易计算器汇编程序 ;将键盘的KA10~KA12接8259的KA0~KA2;RL10~RL17接8255A的RL0~RL7 ; T11 8279键盘显示接口实验二 CSEG AT 0000H LJMP START CSEG AT 4100H START: MOV DPTR,#00CFE9H ;8279命令字 MOV A,#0D1H ;清显示 MOVX @DPTR,A LOOP1: MOVX A,@DPTR ANL A,#0FH JZ LOOP1 ;有键按下?没有则循环等待 MOV A,#0A0H ;显示\消隐命令 MOVX @DPTR,A MOV A,#40H ;读FIFO命令 MOVX @DPTR,A MOV DPTR,#0CFE8H ;读键值 MOVX A,@DPTR MOV R1,A ;保存键值加个F MOV DPTR,#0CFE9H ;写显示RAM命令 MOV A,#80H ;选中LED1 MOVX @DPTR,A MOV A,R1 ANL A,#0FH ;取后半字节 MOV DPTR,#TAB MOVC A,@A+DPTR ;取段显码 MOV DPTR,#0CFE8H ;写显示RAM MOVX @DPTR,A MOV DPTR,#0CFE9H ;写显示RAM命令 LOOP2: MOVX A,@DPTR ;输入显示符号 ANL A,#0FH JZ LOOP2 ;有键按下?没有则循环等待 MOV A,#0A0H ;显示\消隐命令 MOVX @DPTR,A MOV A,#40H ;读FIFO命令 MOVX @DPTR,A MOV DPTR,#0CFE8H ;读键值 MOVX A,@DPTR MOV R2,A ;保存键值 MOV DPTR,#0CFE9H ;写显示RAM命令 MOV A,#81H ;选中LED2 MOVX @DPTR,A MOV A,R2 ANL A,#0FH ;取后半字节

51单片机汇编程序范例

16位二进制数转换成BCD码的的快速算法-51单片机2010-02-18 00:43在做而论道上篇博文中,回答了一个16位二进制数转换成BCD码的问题,给出了一个网上广泛流传的经典转换程序。 程序可见: http: 32.html中的HEX2BCD子程序。 .说它经典,不仅是因为它已经流传已久,重要的是它的编程思路十分清晰,十分易于延伸推广。做而论道曾经利用它的思路,很容易的编写出了48位二进制数变换成16位BCD码的程序。 但是这个程序有个明显的缺点,就是执行时间太长,转换16位二进制数,就必须循环16遍,转换48位二进制数,就必须循环48遍。 上述的HEX2BCD子程序,虽然长度仅仅为26字节,执行时间却要用331个机器周期。.单片机系统多半是用于各种类型的控制场合,很多时候都是需要“争分夺秒”的,在低功耗系统设计中,也必须考虑因为运算时间长而增加系统耗电量的问题。 为了提高整机运行的速度,在多年前,做而论道就另外编写了一个转换程序,程序的长度为81字节,执行时间是81个机器周期,(这两个数字怎么这么巧!)执行时间仅仅是经典程序的!.近来,在网上发现了一个链接: ,也对这个经典转换程序进行了改进,话是说了不少,只是没有实质性的东西。这篇文章提到的程序,一直也没有找到,也难辩真假。 这篇文章好像是选自某个著名杂志,但是在术语的使用上,有着明显的漏洞,不像是专业人员的手笔。比如说文中提到的:

“使用51条指令代码,但执行这段程序却要耗费312个指令周期”,就是败笔。51条指令代码,真不知道说的是什么,指令周期是因各种机型和指令而异的,也不能表示确切的时间。 .下面说说做而论道的编程思路。;----------------------------------------------------------------------- ;已知16位二进制整数n以b15~b0表示,取值范围为0~65535。 ;那么可以写成: ; n = [b15 ~ b0] ;把16位数分解成高8位、低8位来写,也是常见的形式: ; n = [b15~b8] * 256 + [b7~b0] ;那么,写成下列形式,也就可以理解了: ; n = [b15~b12] * 4096 + [b11~b0] ;式中高4位[b15~b12]取值范围为0~15,代表了4096的个数; ;上式可以变形为: ; n = [b15~b12] * 4000 + {[b15~b12] * (100 - 4) + [b11~b0]} ;用x代表[b15~b12],有: ; n =x * 4000 + {x * (100 - 4) + [b11~b0]} ;即: ; n =4*x (千位) + x (百位) + [b11~b0] - 4*x ;写到这里,就可以看出一点BCD码变换的意思来了。 ;;上式中后面的位:

汇编51单片机考试常见试题

一、填空题 1.单片机是把中央处理器、存储器、定时器/计数器以及I/O接口电路等主要计算机部件集成在一块集成电路芯片上的微型计算机。 2.除了单片机这一名称之外,单片机还可称为微控制器、嵌入式控制器。 3.计算机的系统总线有地址总线、控制总线和数据总线。 4.80C51单片机基本型内部RAM有 128 个字节单元,这些单元可以分为三个用途不同的区域,一是工作寄存器区、二是位寻址区、三是数据缓冲区。5.8051单片机有2 个16位定时/计数器。 6.单片机存储器的主要功能是存储程序和数据。80C51含4 KB掩膜ROM。7.80C51在物理上有4个独立的存储器空间。 8.通常、单片机上电复位时PC= 0000H,SP= 07H;而工作寄存器则缺省采用第00 组,这组寄存器的地址范围是从00H~ 07H。 9.8051的堆栈是向地址的高端生成的。入栈时SP先加1,再压入数据。10.使用8031芯片时,需将/EA引脚接低电平,因为其片内无程序存储器。11.MCS-51特殊功能寄存器只能采用直接寻址方式。 12.汇编语言中可以使用伪指令,它们不是真正的指令,只是用来对汇编过程进行某种控制。 13.半导体存储器的最重要的两个指标是存储容量和存储速度。 14.当PSW4=1,PSW3=0时,工作寄存器Rn,工作在第2组。 15.在8051单片机中,由 2 个振荡(晶振)周期组成1个状态(时钟)周期,由 6个状态周期组成1个机器周期。 16.假定累加器A的内容30H,执行指令:1000H:MOVC A,@A+PC后,把程序存储器1031H单元的内容送累加器A中。 17.MCS-51单片机访问外部存储器时,利用ALE信号锁存来自P0口的低8位地址信号。 18.内部RAM中,位地址为30H的位,该位所在字节的字节地址为26H。 19.若A中的内容为63H,那么,P标志位的值为0。 20.在基址加变址寻址方式中,以累加器A作变址寄存器,以DPTR或PC作基址寄存器。 21.指令格式是由操作码和操作数所组成,也可能仅由操作码组成。 22.通过堆栈操作实现子程序调用,首先就要把PC的内容入栈,以进行断点保护。调用返回时,再进行出栈保护,把保护的断点送回到PC。 23.MCS-51单片机程序存储器的寻址范围是由程序计数器PC的位数所决定的,因为MCS-51的PC是16位的,因此其寻址的范围为64KB。 24.在寄存器间接寻址方式中,其“间接”体现在指令中寄存器的内容不是操作数,而是操作数的地址。 25.假定累加器A中的内容为30H,执行指令1000H:MOVC A,@A+PC 后,把程序存储器1031H单元的内容送入累加器A中。 26.12根地址线可寻址4 KB存储单元。 27.:假定A=55H,R3=0AAH,在执行指令ANL A,R3后,A=00H,R3=0AAH。28.MCS-51的P0口作为输出端口时,每位能驱动8个LSTTL负载。 29.MCS-51有4个并行I/O口,其中P1~P3是准双向口,所以由输出转输入时必须先写入“1”。 30.MCS-51的堆栈是软件填写堆栈指针临时在片内数据存储器内开辟的区域。

单片机考试小程序

编程题 1,清零程序 将片外数据存储器中5000h~500ffh单元全部清零 ORG OOOOH MOV DPTR, #5000H MOV R0,#00H CLR A LOOP: MOVX @DPTR,A INC DPTR DJNZ RO,LOOP HERE: SJMP HERH 2.试着编写程序,查找在内部 RAM的20h~40h单元中出现00h这一数据的次数将查到的结果存入41h单元 ORG 0000H MOV R0,#20H MOV R1,#21H MOV 41H,#00H LOOP: CJNE @RO,#00H,NEXT INC 41H NEXT: INC R0 DJNZ RI,LOOP HERE: SJMP HERE 3查找在内部RAM的30h~50单元中是否有0AAH这一数据,若有则将51H单元置为01H;若未找到;则将51H单元置为00H. ORG 0000H MOV R0,#30H MOV R1,#21H LOOP: CJNE @R0,0AAH,NEXT MOV 51H,#01H SJMP HERE NEXT: INC R0 DJNZ R1,LOOP MOV 51H,#00H HERE: SJMP HERE 4编写程序功能为把1000H开始的外部RAM单元中的数据送到内部RAM50H开始的单元中,数据的个数存放在了内部RAM60H单元。 ORG 0000H MOV DPTR #1000H MOV R0,#50H MOV R1,60H LOOP: MOVX A,@DPTR MOV 50H,A INC DPTR INC R0

DJNZ RI,LOOP HERE: SJMP HERE 5.编写请将ROM3000H单元内容送R7. ORG 0000H MOV DPTR, #3000H CLR A MOVC A ,@A+DPTR MOV R7,A END 6.片外RAM2000H单元内容送到片外RAM1000H的单元中。 ORG 0000H MOV DPTR,#2000H MOVX A,@DPTR MOV DPTR,,#1000H\ MOVX @DPTR,A 7.锯齿形波: ORG 2000H START: MOV R0,#0FEH MOV A,#00H LOOP: MOVX @R0,A INC A SJMP LOOP 8三角形波 ORG 2000H START MOV R0,#0FEH MOV A,#00H UP: MOVX @R0,A INC A JNZ UP DOWN: DEC A MOVX @DPTR,A JNZ DOWN SJMP UP

单片机设计简易计算器

简易计算器 Simply Calculator 1 设计思想 此计算器有键盘部分、单片机、显示部分三部分组成,键盘部分主要完成输入功能;单片机主要完成数据处理功能,包括确定按键,完成运算,以及输出数据;显示器部分主要完成单片机输出的显示。 本设计的思路是利用单片机性能好,稳定性强的优点来实现系统的运行。设计大致可以分为三个步骤:第一步,硬件的选取和设计;第二步,程序的设计和调试;第三步,Protues 系统仿真。 硬件是设计的骨骼,不仅关系到设计总体方向的确定,还要综合考虑节能,环保,以及稳定性和经济性等各种因素。因此需要花费大量的时间。硬件的选取最为重要,包括选用的芯片,显示设备的选取,输入设备的选取等。本设计是通过单片机来实现的,因此选用了ATMEGA16单片机作为主体,输入设备选用矩阵键盘。程序是硬件的灵魂,是实现设计的中心环节。本设计使用的程序语言是C语言,在“ICC AVR”中运行,调试,直到运行出正确结果,然后输出后缀名为.HEX格式的文件,以备在Protues中仿真使用。程序是设计的关键,程序的调试需要大量的时间,耐心,还够要有足的细心才能成功。本设计中就出现了大量的错误,经过认真修改,最终才能运行出正确结果。最后的系统仿真是设计是否成功的验证,是设计不可缺少的重要环节。这就要求能掌握Protues的一些基本操作。2原理分析 矩阵键盘的扫描 —

》 图矩阵键盘图 如图所示,单片机的8个I/O口和矩阵键盘相连,用8个I/O口来控制矩阵键盘的16个按键是非常有意思的,首先我们设置单片机的PD0—PD7为输出,且PD0—PD3依次设置为低电平,而PD4—PD7设置为高电平,然后我们设置PD4—PD7为输入,而PD0—PD3仍然为输出,假如此时M1键按下,则PD0与PD4相连,因为PD0是低电平,而PD4是输入,所以PD4会被拉为低电平,同理,如果M2被按下,则PD5会被拉低,M3按下,PD6会被拉低,M4按下,PD7被拉低。这是判断有无键盘按下的过程,当我们判断是那一个键盘按下时,我们首先设置8个I/O口为输出,输出为FE,即,PD0为低电平,其他全为高电平,然后我们设置PD4—PD7为输入,如果M1被按下,则PD4会比被拉为低电平,此时会变成EE,同理可以知道M2被按下时会变为DE,M3被按下时会变为BE,M4被按下时会变为7E。同理我们可以设置8个I/O口输出FD来检测M5—M8是否被按下,设置8个I/O口输出FC来来检测M9—M12,设置8个I/O口输出F7来检测M13—M16,如果M1—M4没有被按下,就继续检测M4—M8,一次类推,就可以检测出16个按键了。在这次设计中,16个按键M1—M16所对应检测值分别为:EE,DE,BE,7E,ED,DD,BD,7D,EB,DB,BB,7B,E7,D7,B7,77。 数字显示与计算 本次设计选用的显示器是1602液晶显示器,此液晶显示器能显示32个字符,VSS接地,VDD接电源正极,E为时使能信号,R/W为读写选择端(H/L),RS为数据/命令选择端(H/L),D0—D7为数据I/O口。 首先我们初始化液晶显示器,然后显示出第一个被按下的数,并且使光标右移,如果有第二个数按下,则据继续显示,以此类推,然后把所有显示出来的数换算成一个数,如果按下“+”号,则显示出“+”,并且同理显示出“+”号后面按下的数字,然后调用加子程序,运算出结果,如果按下的是“-”,则调用减子程序,如果按下“*”,则调用乘子程序,如果按下“/”,则调用除子程序。然后再调用显示结果子程序,显示出结果。 《

单片机的各种程序

单片机的各种程序 1. 八个灯循环点亮 ORG 0030H START:MOV SP,#5FH MOV R2,#08H MOV A,#0FEH NEXT:MOV P1,A ACALL DELAY RL A DJNZ R2,NEXT MOV R2,#08H MOV A,#7FH NEXT1:MOV P1,A ACALL DELAY RR A DJNZ R2,NEXT1 SJMP START DELAY:MOV R3,#0FFH DEL1:MOV R4,#0FFH DJNZ R4,$ DJNZ R3,DEL1 RET END 2. 查表的例子 org 0000h start: mov dptr,#ledtab movc a,@a+dptr mov p0,a sjmp start ledtab: db:0c0h,0f9h,04h,0b0h,99h,92h,82h,0f8h,80h end https://www.doczj.com/doc/f218258444.html, 0000H MOV A,#0FEH SHIFT: LCALL FLASH

RL A SJMP SHIFT FLASH: MOV R2,0AH FLASH1:MOV P1,A LCALL DELAY MOV P1,#0FFH LCALL DELAY DJNZ R2,FLASH1 RET DELAY:MOV R5,#200 D1:MOV R6,#123 NOP DJNZ R6,$ DJNZ R5,D1 RET 4.数码显示管显示2015循环 org 0000h start: loop: mov p1,#0c0h lcall DELAY mov p1,#0f9h lcall DELAY mov p1,#0a4h lcall DELAY mov p1,#0b0h lcall DELAY mov p1,#99h lcall DELAY mov p1,#92h lcall DELAY mov p1,#82h lcall DELAY mov p1,#0f8h lcall DELAY mov p1,#80h lcall DELAY

单片机C语言编程实例

单片机C语言编程实例 前言 INTEL公司的MCS-51单片机是目前在我国应用得最广泛的单片机之一.随着 单片机应用技术的不断发展,许多公司纷纷以51单片机为内核,开发出与其兼容的 多种芯片,从而扩充和扩展了其品种和应用领域。 C语言已成为当前举世公认的高效简洁而又贴近硬件的编程语言之—。将C语言向单片机上的移植,始于20世纪80年代的中后期。经过十几年的努力,C语言终于成为专业化单片机上的实用高级语言。用C语言编写的8051单片机的软件,可以大大缩短开发周期,且明显地增加软件的可读性,便于改进和扩充,从而研制出规模更大、性能更完善的系统。因此,不管是对于新进入这一领域的开发者来说,还是对于有多年单片机开发经验的人来说,学习单片机的C语言编程技术都是十分必要的。. C语言是具有结构化.模块化编译的通用计算机语言,是国际上应用最广.最多的计算语言之一。C51是在通用C语言的基础上开发出的专门用于51系列单片机编程的C语言.与汇编语言相比,C51在功能上.结构上以及可读性.可移植性.可维护性等方面都有非常明显的优势。目前 最先进、功能最强大、国内用户最多的C51编译器是Keil Soft ware公司推出的KeilC51。第 一章单片机C语言入门 1.1建立您的第一个C项目 使用C语言肯定要使用到C编译器,以便把写好的C程序编译为机器码, 这样单片机才能执行编写好的程序。KEIL uVISION2是众多单片机应用开发软 件中优秀的软件之一,它支持众多不同公司的MCS51架构的芯片,它集编辑, 编译,仿真等于一体,同时还支持PLM、汇编和C语言的程序设计,它的界面 和常用的微软VC++的界面相似,界面友好,易学易用,在调试程序,软件仿真 方面也有很强大的功能。因此很多开发51应用的工程师或普通的单片机爱好者,都对它十分喜欢。 以上简单介绍了KEIL51软件,要使用KEIL51软件,必需先要安装它。KEIL51是一个商业的软件,对于我们这些普通爱好者可以到KEIL中国代理周 立功公司的网站上下载一份能编译2K的DEMO版软件,基本可以满足一般的个

程序简洁的单片机6位数字钟

程序简洁的单片机6位数字钟 51单片机作的电子钟程序在很多地方已经有了介绍,对于单片机学习者而言这个程序基本上是一道门槛,掌握了电子钟程序,基本上可以说51单片机就掌握了80%。常见的电子钟程序由显示部分,计算部分,时钟调整部分构成,这样程序就有了一定的长度和难度。这里我们为了便于大家理解和掌握单片机,我们把时钟调整部分去除,从而够成了这个简单的电子钟程序。 时钟的基本显示原理:时钟开始显示为0时0分0秒,也就是数码管显示000000,然后每秒秒位加1 ,到9后,10秒位加1,秒位回0。10秒位到5后,即59秒,分钟加1,10秒位回0。依次类推,时钟最大的显示值为23小时59分59秒。这里只要确定了1秒的定时时间,其他位均以此为基准往上累加。 开始程序定义了秒,十秒,分,十分,小时,十小时,共6位的寄存器,分别存在30h,31h,32h,33h,34h,35h单元,便于程序以后调用和理解。 电路原理图: 为了节省硬件资源,电路部分采用6位共阳极动态扫描数码管,数码管的段位并联接在51单片机的p0口,控制位分别由6个2N5401的PNP三极管作驱动接在单片机的p2.1,p2.2,p2.3,p2.4,p2.5,p2.6口。 从标号star开始把这些位全部清除为0,从而保证了开始时显示时间为0时0分0秒。 然后是程序的计算部分: inc a_bit(秒位),这里用到了一个inc指令,意思是加1,程序运行到这里自动加1。然后把加1后的数据送acc:mov a,a_bit (秒位),这时出现了一个问题,如果不断往上加数字不会加爆? 所以有了下面的一句话cjne a,#10,stlop; 如果秒位到10那么转到10秒处理程序。cjne是比较的意思,比较如果a等于10 就转移到10秒处理程序,实际上也就限定了在这里a的值最大只能为9,同时 mov a_bit,#00h,这时 a_bit(秒位)被强行清空为0,又开始下一轮的计数。 秒位处理完了到下面10秒的处理程序:inc b_bit,把10秒位b_bit加1,由于程序开始对各位的寄存器已经清0,这时10秒位就变成1 ,然后同样送到累加器ACC:mov a,b_bit 现在开始新一轮的10秒位计数cjne a,#6,stlop ;如果10秒到了6那么到分位处理程序。也就限

单片机串口通信C程序及应用实例

一、程序代码 #include//该头文件可到https://www.doczj.com/doc/f218258444.html,网站下载#define uint unsigned int #define uchar unsigned char uchar indata[4]; uchar outdata[4]; uchar flag; static uchar temp1,temp2,temp3,temp; static uchar R_counter,T_counter; void system_initial(void); void initial_comm(void); void delay(uchar x); void uart_send(void); void read_Instatus(void); serial_contral(void); void main() { system_initial(); initial_comm(); while(1) { if(flag==1) { ES = 0; serial_contral(); ES = 1; flag = 0; } else read_Instatus(); } } void uart_send(void) { for(T_counter=0;T_counter<4;T_counter++) { SBUF = outdata[T_counter]; while(TI == 0);

TI = 0; } T_counter = 0; } uart_receive(void) interrupt 4 { if(RI) { RI = 0; indata[R_counter] = SBUF; R_counter++; if(R_counter>=4) { R_counter = 0; flag = 1; } } } void system_initial(void) { P1M1 = 0x00; P1M0 = 0xff; P1 = 0xff; //初始化为全部关闭 temp3 = 0x3f;//初始化temp3的值与六路输出的初始值保持一致 temp = 0xf0; R_counter = 0; T_counter = 0; } void initial_comm(void) { SCON = 0x50; //设定串行口工作方式:mode 1 ; 8-bit UART,enable ucvr TMOD = 0x21; //TIMER 1;mode 2 ;8-Bit Reload PCON = 0x80; //波特率不加倍SMOD = 1 TH1 = 0xfa; //baud: 9600;fosc = 11.0596 IE = 0x90; // enable serial interrupt TR1 = 1; // timer 1 RI = 0; TI = 0; ES = 1; EA = 1; }

最经典的51单片机经典流水灯汇编程序

单片机流水灯汇编程序设计 开发板上的8只LED为共阳极连接,即单片机输出端为低电平时即可点亮LED。 程序A: ;用最直接的方式实现流水灯 ORG 0000H START:MOV P1,#01111111B ;最下面的LED点亮 LCALL DELAY;延时1秒 MOV P1,#10111111B ;最下面第二个的LED点亮 LCALL DELAY;延时1秒 MOV P1,#11011111B ;最下面第三个的LED点亮(以下省略) LCALL DELAY MOV P1,#11101111B LCALL DELAY MOV P1,#11110111B LCALL DELAY MOV P1,#11111011B LCALL DELAY MOV P1,#11111101B LCALL DELAY MOV P1,#11111110B LCALL DELAY MOV P1,#11111111B ;完成第一次循环点亮,延时约0.25秒 AJMP START ;反复循环 ;延时子程序,12M晶振延时约250毫秒 DELAY: MOV R4,#2 L3: MOV R2 ,#250 L1: MOV R3 ,#250 L2: DJNZ R3 ,L2 DJNZ R2 ,L1 DJNZ R4 ,L3 RET END 程序B: ;用移位方式实现流水灯

ajmp main ;跳转到主程序 org 0030h ;主程序起始地址 main: mov a,#0feh ;给A赋值成11111110 loop: mov p1,a ;将A送到P1口,发光二极管低电平点亮 lcall delay ;调用延时子程序 rl a ;累加器A循环左移一位 ajmp loop ;重新送P1显示 delay: mov r3,#20 ;最外层循环二十次 d1: mov r4,#80 ;次外层循环八十次 d2: mov r5,#250 ;最内层循环250次 djnz r5,$ ;总共延时2us*250*80*20=0.8S djnz r4,d2 djnz r3,d1 ret end 51单片机经典流水灯程序,在51单片机的P2口接上8个发光二极管,产生流水灯的移动效果。 ORG 0 ;程序从0地址开始 START: MOV A,#0FEH ;让ACC的内容为11111110 LOOP: MOV P2,A ;让P2口输出ACC的内容 RR A ;让ACC的内容左移 CALL DELAY ;调用延时子程序 LJMP LOOP ;跳到LOOP处执行 ;0.1秒延时子程序(12MHz晶振)=================== DELAY: MOV R7,#200 ;R7寄存器加载200次数 D1: MOV R6,#250 ;R6寄存器加载250次数 DJNZ R6,$ ;本行执行R6次 DJNZ R7,D1 ;D1循环执行R7次 RET ;返回主程序

51单片机考试常见试题简答 题

简答题部分 1、什么叫堆栈? 答:堆栈是在片内RAM中专门开辟出来的一个区域,数据的存取是以"后进先出"的结构方式处理的。实质上,堆栈就是一个按照"后进先出"原则组织的一段内存区域。 2、进位和溢出? 答:两数运算的结果若没有超出字长的表示范围,则由此产生的进位是自然进位;若两数的运算结果超出了字长的表示范围(即结果不合理),则称为溢出。 3、在单片机中,片内ROM的配置有几种形式?各有什么特点? 答:单片机片内程序存储器的配置形式主要有以下几种形式:(1)掩膜(Msak)ROM型单片机:内部具有工厂掩膜编程的ROM,ROM中的程序只能由单片机制造厂家用掩膜工艺固 化,用户不能修改ROM中的程序。掩膜ROM单片机适合于 大批量生产的产品。用户可委托芯片生产厂家采用掩膜方法 将程序制作在芯片的ROM。 (2)EPROM型单片机:内部具有紫外线可擦除电可编程的只读存储器,用户可以自行将程序写入到芯片内部的EPROM 中,也可以将EPROM中的信息全部擦除。擦去信息的芯片 还可以再次写入新的程序,允许反复改写。 (3)无ROM型单片机:内部没有程序存储器,它必须连接程序存储器才能组成完整的应用系统。 无ROM型单片机价格低廉,用户可根据程序的大小来选择外接 程序存储器的容量。这种单片机扩展灵活,但系统结构较复 杂。 (4)E2ROM型单片机:内部具有电可擦除叫可编程的程序存储器,使用更为方便。该类型目前比较常用 (5) OTP(One Time Programmable)ROM单片机:内部具有一次可编程的程序存储器,用户可以在编程器上将程序写入片 内程序存储器中,程序写入后不能再改写。这种芯片的价 格也较低。 4、什么是单片机的机器周期、状态周期、振荡周期和指令周期?它们之间是什么关系? 答:某条指令的执行周期由若干个机器周期(简称M周期)构成,一个机器周期包含6个状态周期(又称时钟周期,简称S周期),而一个状态周期又包含两个振荡周期(P1和P2,简称P周期)。也就是说,指令执行周期有长有短,但一个机器周期恒等于6个状态周期或12个振荡周

单片机C语言小程序

单片机C语言小程序 #include #include #define V AR XBYTE[0x00] /*V AR为外部位址0000*/ #define read 0 /*93c46读取的识别码READ=0*/ #define write 2 /*93c46写入的识别码WRITE=2*/ #define ewen 4 /*93C46写致能的识别码EWEN=4*/ #define ewds 6 /*93C46写除能的识别码EWDS=6*/ #define cs INT0 /*93C46 CS接脚=8051 RD P3.2*/ #define clk INT1 /*93C46 CLK接脚=8051 WR P3.3*/ #define di T0 /*93C46 DI接脚=8051 T1 P3.4*/ #define d0 T1 /*93C46 DO接脚=8051 T0 P3.5*/ #define LOW 0x49 /*存放测试温度的下限值*/ #define HIGH 0x51 /*存放测试温度的上限值*/ bit FLAG0=0; /*宣告TIMER0响应旗号*/ //外接工业专用温度传感器时,目前设置测量温度为0-99度: static const char tab[13]={0x3a,0x53,0x6f,0x8a,0xa3, /*0度,10度,20度,30度,40度*/ 0xB8,0xC8,0xD5,0xDE,0xE5, /*50度,60度,70度,80度,90度*/ 0xEA,0xEE}; /*100度,110度*/ //使用板上AD590温度传感器时,目前设置测量温度为0-99度: //static const char tab[13]={0x88,0x8d,0x92,0x97,0x9c, /*0度,10度,20度,30度,40度,*/ // 0xa1,0xa6,0xab,0xb0,0xb5, /*50度,60度,70度,80度,90度*/ // 0xba,0xc0}; /*100度,110度*/ char data1[2]; char C,S,k=0; char MEP[7]; /*显示器值存放阵列*/ //MEP[0]=数码管最低位显示值,温度指示小数点后位 //MEP[1]=数码管次低位显示值,温度指示个位数 //MEP[2]=数码管高位显示值,温度指示十位数 //MEP[3]=数码管最低位显示值,功能显示目前定为1,2,3,4,5 //MEP[4]= //MEP[5]=暂放置温度显示值,高4位为温度指示十位数值,低4位为温度指示个位数值//MEP[6]=在温度显示与电压调整副程式中,将测量值C暂存MEP[6]中 unsigned char combuf[10]; unsigned char ADR46,CH,CL,m,C1,C2; /*ADR46,93C46位址,CH高位元组,CL低*/ int sec,sec1; char ptr=0,ptr1=0x10,psr=0; /*ptr显示器值存放阵MEP[]指标,ptr1显示器扫描指标*/ char count=100,sb=0; void delay (unsigned int value) /*延时副程式*/ { while (value!=0) value--; /*10us延时*/ } void COMP(); /*宣告比较现在温度与设定温度副程式*/ void SET();

单片机程序的设计

单片机程序的设计 程序设计是单片机开发最重要的工作,程序设计就是利用单片机的指令系统,根据应用系统(即目标产品)的要求编写单片机的应用程序,其实我们前面已经开始这样做过了,这一课我们不是讲如何来设计具体的程序,而是教您设计单片机程序的基本方法。不过在讲解之前还是有必要先了解一下单片机的程序设计语言。一.程序设计语言这里的语言与我们通常理解的语言是有区别的,它指的是为开发单片机而设计的程序语言,如果您没有学过程序设计可能不太明白,我给大家简单解释一下,您知道微软的VB,VC吗?VB,VC就是为某些工程应用而设计的计算机程序语言,通俗地讲,它是一种设计工具,只不过这种工具是用来设计计算机程序的。要想设计单片机的程序当然也要有这样一种工具(说设计语言更确切些) 单片机的设计语言基本上有三类: 1.完全面向机器的机器语言机器语言就是能被单片机直接识别和执行的语言,计算机能识别什么?以前我们讲过--是数字"0"或"1",所以机器语言就是用一连串的"0"或"1"来表示的数字。比如:MOV A,40H;用机器语言来表示就是11100101 0100000,很显然,用机器语言来编写单片机的程序不太方便,也不好记忆,我们必须想办法用更好的语言来编写单片机的程序,于是就有了专门为单片机开发而设计的语言: 2.汇编语言汇编语言也叫符号化语言,它使用助记符来代替二进制的"0"和"1",比如:刚才的MOV A,40H就是汇编语言指令,显然用汇编语言写成的程序比机器语言好学也好记,所以单片机的指令普遍采用汇编指令来编写,用汇编语言写成的程序我们就叫它源程序或源代码。可是计算机不能识别和执行用汇编语言写成的程序啊?怎么办?当然有办法,我们可以通过"翻译"把源代码译成机器语言,这个过程就叫做汇编,汇编工作现在都是由计算机借助汇编程序自动完成的,不过在以前,都是靠手工来做的。 值得注意的是,汇编语言也是面向机器的,它仍是一种低级语言。每一类计算机都有它自己的汇编语言,比如:51系列有它的汇编语言,PIC系列也有

51单片机实例(含详细代码说明)

1.闪烁灯 1.实验任务 如图4.1.1所示:在P1.0端口上接一个发光二极管L1,使L1在不停地一亮一灭,一亮一灭的时间间隔为0.2秒。 2.电路原理图 图4.1.1 3.系统板上硬件连线 把“单片机系统”区域中的P1.0端口用导线连接到“八路发光二极管指示模块”区域中的L1端口上。 4.程序设计内容 (1).延时程序的设计方法 作为单片机的指令的执行的时间是很短,数量大微秒级,因此,我们要 求的闪烁时间间隔为0.2秒,相对于微秒来说,相差太大,所以我们在 执行某一指令时,插入延时程序,来达到我们的要求,但这样的延时程 序是如何设计呢?下面具体介绍其原理:

如图4.1.1所示的石英晶体为12MHz,因此,1个机器周期为1微秒机器周期微秒 MOV R6,#20 2个 2 D1: MOV R7,#248 2个 2 2+2×248=498 20× DJNZ R7,$ 2个2×248 (498 DJNZ R6,D1 2个2×20=40 10002 因此,上面的延时程序时间为10.002ms。 由以上可知,当R6=10、R7=248时,延时5ms,R6=20、R7=248时, 延时10ms,以此为基本的计时单位。如本实验要求0.2秒=200ms, 10ms×R5=200ms,则R5=20,延时子程序如下: DELAY: MOV R5,#20 D1: MOV R6,#20 D2: MOV R7,#248 DJNZ R7,$ DJNZ R6,D2 DJNZ R5,D1 RET (2).输出控制 如图1所示,当P1.0端口输出高电平,即P1.0=1时,根据发光二极管 的单向导电性可知,这时发光二极管L1熄灭;当P1.0端口输出低电平, 即P1.0=0时,发光二极管L1亮;我们可以使用SETB P1.0指令使P1.0 端口输出高电平,使用CLR P1.0指令使P1.0端口输出低电平。 5.程序框图 如图4.1.2所示

基于51单片机的音乐程序

基于51单片机的按键切换播放音乐 原理图: 引脚说明:共5个按键,分别接51单片机的P0~P4引脚,前4个按键控制播放设置好的四首音乐,第5个按键用来关闭音乐。按键采用中断方式,任意时刻按下任意按键则立即进入所按按键的功能;蜂鸣器接单片机的P3.6口。 仿真说明:使用proteus仿真,晶振:12MHZ。 程序代码如下: /*12Mhz晶振工作*/ #include #define uint unsigned int #define uchar unsigned char sbit voice=P3^6; uchar code sound1[]={0xff, 0x40,0x80,0x30,0x40,0x2b,0x40,0x26,0x80,0x24,0x10,0x26,0x40,0x30,0x40, 0x2b,0x80,0x30,0x40,0x39,0x40,0x30,0xc0,0x40,0x80,0x30,0x40,0x2b,0x40, 0x26,0x40,0x26,0x20,0x24,0x20,0x20,0x40,0x30,0x40,0x24,0x80,0x26,0x10,

0x20,0x40,0x19,0x40,0x19,0x80,0x1c,0x10,0x1c,0x80,0x20,0x40,0x20,0x20, 0x1c,0x20,0x19,0x40,0x1c,0x20,0x20,0x20,0x26,0xc0,0x24,0x80,0x24,0x10, 0x20,0x40,0x1c,0x40,0x20,0x40,0x24,0x20,0x26,0x20,0x2b,0x80,0x33,0x40, 0x33,0x20,0x39,0x20,0x40,0x40,0x39,0x40,0x30,0xc0,0x18,0x80,0x1c,0x80, 0x24,0x80,0x20,0x10,0x1c,0x80,0x19,0x40,0x19,0x20,0x19,0x20,0x19,0x40, 0x1c,0x20,0x20,0x20,0x26,0xc0,0x18,0x80,0x1c,0x80,0x24,0x80,0x20,0x10, 0x1c,0x80,0x1c,0x40,0x1c,0x20,0x1c,0x20,0x1c,0x40,0x24,0x20,0x26,0x20, 0xff,0x20,0x00};//同一首歌*/ uchar code sound2[]={0xff, 0x18,0x40,0x1c,0x20,0x18,0x20,0x13,0x40,0x13,0x20,0x15,0x20,0x13,0x20, 0x15,0x20,0x13,0x20,0x15,0x20,0x18,0x20,0x19,0x20,0x1c,0x20,0x20,0x20, 0x1c,0x40,0x19,0x20,0x18,0x20,0x15,0x40,0x10,0x80, 0x13,0x10,0x10,0x40,0x15,0x10,0x13,0x10,0x18,0x10,0x1c,0x10,0x26,0x10, 0x13,0x10,0x18,0x10,0x1c,0x10,0x26,0x10,0x13,0x10,0x18,0x10,0x1c,0x10, 0x26,0x10,0x13,0x10,0x18,0x10,0x1c,0x10,0x26,0x10,0x15,0x10,0x19,0x10, 0x20,0x10,0x2b,0x10,0x15,0x10,0x19,0x10,0x20,0x10,0x2b,0x10,0x15,0x10, 0x19,0x10,0x20,0x10,0x2b,0x10,0x15,0x10,0x19,0x10,0x20,0x10,0x2b,0x10, 0x18,0x10,0x1c,0x10,0x24,0x10,0x30,0x10,0x18,0x10,0x1c,0x10,0x24,0x10, 0x30,0x10,0x19,0x10,0x20,0x10,0x2b,0x10,0x19,0x10,0x19,0x10,0x20,0x10, 0x2b,0x10,0x19,0x10,0x18,0xc0,0xff,0x40,0x40,0x10,0x39,0x20,0x30,0x20, 0x2b,0x20,0x30,0x20,0x2b,0x20,0x26,0x20,0x26,0x20,0x26,0x20,0x26,0x20, 0x26,0x20,0x2b,0x20,0x30,0x20,0x2b,0x20,0x26,0x20,0x26,0x20,0x26,0x20, 0x26,0x20,0x26,0x20,0x2b,0x20,0x30,0x20,0x2b,0x40,0x30,0x10,0x30,0x20, 0x39,0x20,0x30,0x40,0x2b,0x10,0x2b,0x20,0x26,0x20,0x26,0x80,0x40,0x10, 0x39,0x20,0x30,0x20,0x2b,0x20,0x30,0x20,0x2b,0x20,0x30,0x20,0x30,0x20, 0x20,0x20,0x20,0x20,0x26,0x20,0x2b,0x20,0x26,0x20,0x2b,0x20,0x30,0x20, 0x30,0x20,0x26,0x20,0x26,0x20,0x26,0x20,0x2b,0x20,0x30,0x20,0x2b,0x40, 0x2b,0x10,0x2b,0x20,0x2b,0x20,0x2b,0x40,0x30,0x10,0x30,0x20,0x39,0x20,

相关主题
文本预览
相关文档 最新文档