文档库 最新最全的文档下载
当前位置:文档库 › 单片机35个实例1

单片机35个实例1

单片机35个实例1
单片机35个实例1

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所示

图4.1.2

6.汇编源程序

ORG 0

START: CLR P1.0

LCALL DELAY

SETB P1.0

LCALL DELAY

LJMP START

DELAY: MOV R5,#20 ;延时子程序,延时0.2秒D1: MOV R6,#20

D2: MOV R7,#248

DJNZ R7,$

DJNZ R6,D2

DJNZ R5,D1

RET

END

7. C语言源程序

#include

sbit L1=P1^0;

void delay02s(void) //延时0.2秒子程序{

unsigned char i,j,k;

for(i=20;i>0;i--)

for(j=20;j>0;j--)

for(k=248;k>0;k--);

}

void main(void) {

while(1)

{

L1=0;

delay02s();

L1=1;

delay02s();

}

2.模拟开关灯

1.实验任务

如图4.2.1所示,监视开关K1(接在P3.0端口上),用发光二极管L1(接

在单片机P1.0端口上)显示开关状态,如果开关合上,L1亮,开关打开,

L1熄灭。

2.电路原理图

图4.2.1

3.系统板上硬件连线

(1).把“单片机系统”区域中的P1.0端口用导线连接到“八路发光二极管指示模块”区域中的L1端口上;

(2).把“单片机系统”区域中的P3.0端口用导线连接到“四路拨动开关”区域中的K1端口上;

4.程序设计内容

(1).开关状态的检测过程

单片机对开关状态的检测相对于单片机来说,是从单片机的P3.0端口输入信号,而输入的信号只有高电平和低电平两种,当拨开开关K1拨上去,即输入高电平,相当开关断开,当拨动开关K1拨下去,即输入低电平,相当开关闭合。单片机

可以采用JB BIT,REL或者是JNB BIT,REL指令来完成对开关状态的检测即

可。

(2).输出控制

如图3所示,当P1.0端口输出高电平,即P1.0=1时,根据发光二极管的单向

导电性可知,这时发光二极管L1熄灭;当P1.0端口输出低电平,即P1.0=0

时,发光二极管L1亮;我们可以使用SETB P1.0指令使P1.0端口输出高电平,使用CLR P1.0指令使P1.0端口输出低电平。

5.程序框图

图4.2.2

6.汇编源程序 ORG 00H

START: JB P3.0,LIG

CLR P1.0

SJMP START

LIG: SETB P1.0

SJMP START

END

7. C语言源程序

#include

sbit K1=P3^0;

sbit L1=P1^0;

void main(void)

{

while(1)

{

if(K1==0)

{

L1=0; //灯亮}

else

{

L1=1; //灯灭}

}

}

3.多路开关状态指示

1.实验任务

如图4.3.1所示,AT89S51单片机的P1.0-P1.3接四个发光二极管L1-L4,P1.4-P1.7接了四个开关K1-K4,编程将开关的状态反映到发光二极管上。

(开关闭合,对应的灯亮,开关断开,对应的灯灭)。

2.电路原理图

图4.3.1

3.系统板上硬件连线

(1.把“单片机系统”区域中的P1.0-P1.3用导线连接到“八路发光二极管指示模块”区域中的L1-L4端口上;

(2.把“单片机系统”区域中的P1.4-P1.7用导线连接到“四路拨动开关”区域中的K1-K4端口上;

4.程序设计内容

(1.开关状态检测

对于开关状态检测,相对单片机来说,是输入关系,我们可轮流检测每个开关状态,根据每个开关的状态让相应的发光二极管指示,可以采用JB P1.X,REL

或JNB P1.X,REL指令来完成;也可以一次性检测四路开关状态,然后让其指示,可以采用MOV A,P1指令一次把P1端口的状态全部读入,然后取高4位的状态来指示。

(2.输出控制

根据开关的状态,由发光二极管L1-L4来指示,我们可以用SETB P1.X和CLR P1.X指令来完成,也可以采用MOV P1,#1111XXXXB方法一次指示。

5.程序框图

读P1口数据到A

CC

内容右移4次

A

CC

内容与F0H相或

A

CC

内容送入P1口

A

CC

图4.3.2

6.方法一(汇编源程序)

ORG 00H

START: MOV A,P1

ANL A,#0F0H

RR A

RR A

RR A

RR A

XOR A,#0F0H

MOV P1,A

SJMP START

END

7.方法一(C语言源程序)#include unsigned char temp;

void main(void)

{

while(1)

{

temp=P1>>4;

temp=temp | 0xf0;

P1=temp;

}

}

8.方法二(汇编源程序)ORG 00H

START: JB P1.4,NEXT1 CLR P1.0

SJMP NEX1

NEXT1: SETB P1.0

NEX1: JB P1.5,NEXT2

CLR P1.1

SJMP NEX2

NEXT2: SETB P1.1

NEX2: JB P1.6,NEXT3

CLR P1.2

SJMP NEX3

NEXT3: SETB P1.2

NEX3: JB P1.7,NEXT4

CLR P1.3

SJMP NEX4

NEXT4: SETB P1.3

NEX4: SJMP START

END

9.方法二(C语言源程序)#include

void main(void) {

while(1)

{

if(P1_4==0) {

P1_0=0;

}

else

{

P1_0=1;

}

if(P1_5==0) {

P1_1=0;

}

else

{

P1_1=1;

}

if(P1_6==0) {

P1_2=0;

}

else

{

P1_2=1;

}

if(P1_7==0) {

P1_3=0;

}

else

{

P1_3=1;

}

}

}

4.广告灯的左移右移

1.实验任务

做单一灯的左移右移,硬件电路如图4.4.1所示,八个发光二极管L1-L8分别接在单片机的P1.0-P1.7接口上,输出“0”时,发光二极管亮,开始时P1.0→P1.1→P1.2→P1.3→┅→P1.7→P1.6→┅→P1.0亮,重复循环。

2.电路原理图

图4.4.1

3.系统板上硬件连线

把“单片机系统”区域中的P1.0-P1.7用8芯排线连接到“八路发光二极管指示模块”区域中的L1-L8端口上,要求:P1.0对应着L1,P1.1对应着L2,……,P1.7对应着L8。

4.程序设计内容

我们可以运用输出端口指令MOV P1,A或MOV P1,#DATA,只要给累加器值或常数值,然后执行上述的指令,即可达到输出控制的动作。

每次送出的数据是不同,具体的数据如下表1所示

表1

5.程序框图

图4.4.2

6.汇编源程序

ORG 0

START: MOV R2,#8

MOV A,#0FEH

SETB C

LOOP: MOV P1,A

LCALL DELAY

RLC A

DJNZ R2,LOOP

MOV R2,#8

LOOP1: MOV P1,A LCALL DELAY

RRC A

DJNZ R2,LOOP1

LJMP START

DELAY: MOV R5,#20 ; D1: MOV R6,#20

D2: MOV R7,#248 DJNZ R7,$

DJNZ R6,D2

DJNZ R5,D1

RET

END

7. C语言源程序

#include unsigned char i; unsigned char temp; unsigned char a,b;

void delay(void) {

unsigned char m,n,s; for(m=20;m>0;m--)

for(n=20;n>0;n--)

for(s=248;s>0;s--); }

void main(void)

{

while(1)

{

temp=0xfe;

P1=temp;

delay();

for(i=1;i<8;i++) {

a=temp<

b=temp>>(8-i);

P1=a|b;

delay();

}

for(i=1;i<8;i++) {

a=temp>>i;

b=temp<<(8-i); P1=a|b;

delay();

}

}

}

5.广告灯(利用取表方式)

1.实验任务

利用取表的方法,使端口P1做单一灯的变化:左移2次,右移2次,闪烁2次(延时的时间0.2秒)。

2.电路原理图

图4.5.1

3.系统板上硬件连线

把“单片机系统”区域中的P1.0-P1.7用8芯排线连接到“八路发光二极管指示模块”区域中的L1-L8端口上,要求:P1.0对应着L1,P1.1对应着L2,……,P1.7对应着L8。

4.程序设计内容

在用表格进行程序设计的时候,要用以下的指令来完成

(1).利用MOV DPTR,#DATA16的指令来使数据指针寄存器指到表的开头。

(2).利用MOVC A,@A+DPTR的指令,根据累加器的值再加上DPTR的值,就可以使程序计数器PC指到表格内所要取出的数据。

因此,只要把控制码建成一个表,而利用MOVC 工,@A+DPTR做取码的操作,就可方便地处理一些复杂的控制动作,取表过程如下图所示:

5.程序框图

图4.5.2

6.汇编源程序

ORG 0

START: MOV DPTR,#TABLE

LOOP: CLR A

MOVC A,@A+DPTR

CJNE A,#01H,LOOP1

JMP START

LOOP1: MOV P1,A

MOV R3,#20

LCALL DELAY

INC DPTR

JMP LOOP

DELAY: MOV R4,#20

D1: MOV R5,#248

DJNZ R5,$

DJNZ R4,D1

DJNZ R3,DELAY

RET

TABLE: DB 0FEH,0FDH,0FBH,0F7H

DB 0EFH,0DFH,0BFH,07FH

DB 0FEH,0FDH,0FBH,0F7H

DB 0EFH,0DFH,0BFH,07FH

DB 07FH,0BFH,0DFH,0EFH

DB 0F7H,0FBH,0FDH,0FEH

DB 07FH,0BFH,0DFH,0EFH

DB 0F7H,0FBH,0FDH,0FEH

DB 00H, 0FFH,00H, 0FFH

DB 01H

END

7. C语言源程序

#include

unsigned char code table[]={0xfe,0xfd,0xfb,0xf7, 0xef,0xdf,0xbf,0x7f,

0xfe,0xfd,0xfb,0xf7,

0xef,0xdf,0xbf,0x7f,

0x7f,0xbf,0xdf,0xef,

0xf7,0xfb,0xfd,0xfe,

0x7f,0xbf,0xdf,0xef,

0xf7,0xfb,0xfd,0xfe,

0x00,0xff,0x00,0xff,

0x01};

unsigned char i;

void delay(void)

{

unsigned char m,n,s;

for(m=20;m>0;m--)

for(n=20;n>0;n--)

for(s=248;s>0;s--);

}

void main(void)

{

while(1)

{

if(table[i]!=0x01)

{

P1=table[i];

i++; delay(); }

else {

i=0;

}

}

}

6.报警产生器

1.实验任务

用P1.0输出1KHz和500Hz的音频信号驱动扬声器,作报警信号,要求1KHz 信号响100ms,500Hz信号响200ms,交替进行,P1.7接一开关进行控制,当开关合上响报警信号,当开关断开告警信号停止,编出程序。

2.电路原理图

图4.6.1

3.系统板上硬件连线

(1.把“单片机系统”区域中的P1.0端口用导线连接到“音频放大模块”

区域中的SPK IN端口上;

(2.在“音频放大模块”区域中的SPK OUT端口上接上一个8欧的或者是16欧的喇叭;

(3.把“单片机系统”区域中的P1.7/RD端口用导线连接到“四路拨动开关”区域中的K1端口上;

4.程序设计内容

单片机35个实例1(汇编)

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.程序框图

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码变换的意思来了。 ;;上式中后面的位:

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

一、程序代码 #include//该头文件可到https://www.wendangku.net/doc/252555882.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; }

7个基于STM32单片机的精彩设计实例

7个基于STM32单片机的精彩设计实例,附原理图、代码等相关资料 STM32单片机现已火遍大江南北,各种教程资料也是遍布各大网站论坛,可谓一抓一大把,但大部分都差不多。今天总结了几篇电路城上关于STM32的制作,不能说每篇都是经典,但都是在其他地方找不到的,很有学习参考意义的设计实例。尤其对于新手,是一个学习stm32单片机的“活生生”的范例。 1、STM32与FPGA强强联合,实现完整版信号发生器 话说之前看过作者的另外一个作品,是STM32和FPGA实现的示波器,当然感觉不做。现在作者又推出了信号发生器。重点是TFT触屏来控制波形,相当于一个终端,STM32用来通信,起到了FPGA和TFT之间的纽带作用。最后波形输出作者使用了巴特沃斯滤波器,让输出的波形更加干净。虽然以高端的信号发生器无法比拟,但是用于平时信号输出使用时足够了。 2.采用STM32单片机基于uCOS II系统控制VS1053B语音芯片制作的MP3播放器 一看到uCOS II,就觉得是个高级货,绝对不是一般的小打小闹。该制作耗时半年能完成制作,不得不佩服作者的坚持。这个使用了VC1053B音频模块,TFT液晶显示,还是用了NRF24L01无线模块(暂时没明白这个无线如何使用的),最后作者还很细心的提供了理论指导,方便大家制作。 3.使用OV7670让STM32转身变成照相机(附原理图、代码源文件) 经常使用STM32的同学有没有做过照相机呢?虽说在智能手机遍布的时代,正经相机也要束之高阁了。但是能使用STM32做个相机,拿出去拍个照也是非常拉风的。这个相机使用了ST32F103C8T6(ST32F103C8T6数据手册),摄像头用的是OV7670,带SD卡和触摸屏2.4寸,整体尺寸和卡片机差不多。 4.基于STM32的手机WIFI 控制四轴飞行器设计 我们平时看到的四轴飞行器多是遥控手柄控制的,给你推荐的这个是手机通过wifi就可以控制了,重点在作者还提供了安卓版本的app,直接安装就可以控制飞行器了,当然前提是要根据作者提供的原理图、pcb、代码做出个飞行器了。对APP感兴趣的朋友不妨写写ios 版本的。 5、使用STM32F103RC实现数字万用表设计,具备常用功能 作为电子工程师,最经常用到的就是万用表,可以很少人知道万用表里面的结构、测电压的过程。现在就有人用STM32F103(STM32F103数据手册)做了个数字万用表,只有三个常用功能:测电压(0-50v),测电阻(1k-390k),短路档,使用了LCD5110显示数据,大家不妨动动手开发其他功能。 6、基于RFID技术、以STM32为终端的智能小区管理系统 话说现在高档小区越来越多,对小区的智能化管理也在日渐智能化。这个设计就使用了当下很火的wifi智能控制。系统由多个智能服务终端和系统服务器所组成。智能服务终端就是一个基于STM32的完备系统,涵盖了室内环境监测、高温火警GSM报警、A卡管理助手、天气助手、用户电子账单、万年历、小区意见反馈等功能。

单片机课程设计1

《单片机原理及接口》 课程设计报告 题目:十字路口交通灯模拟控制系统 专业名称:通信09 班级:1班 学号:910705116 姓名:简必建 2011年 12月

十字路口交通灯模拟控制系统 简必建 (电子信息工程系) 中文摘要:交通在人们的日常生活中占有重要的地位,随着人们社会活动的日益频繁,这点更是体现的淋漓尽致。交通信号灯的出现,使得交通得以有效管制,对于疏导交通流量、提高道路通行能力,减少交通事故有明显效果。本系统采用单片机89c51为中心器件来设计交通灯控制器,系统实用性强、操作简单、拓展性强。本系统就是采用单片机模拟十字路口交通灯的状态显示以及倒计时。 本设计系统由单片机I/O口扩展系统、交通灯状态显示系统、LED数码显示系统、等几大部分组成。系统除基本的交通功能外还有倒计时功能,较好的模拟路口可能出现的状况。软件上采用C语言编程,经过整机调试,实现了对十字路口交通灯的模拟。 关键词:单片机交通灯闯红灯检测车流量 二.功能概述 2.1设计任务:交通灯的硬件和软件设计 2.2设计目的 1.进一步熟悉和掌握单片机的结构和工作原理。 2.掌握单片机的接口技术及相关外围芯片的外特性,控制方法。 3.通过课程设计,掌握以单片机为核心的电路设计的基本方法和技术,了解有关电路参数的计算方法。 4.通过实际程序设计和调试,逐步掌握模块化程序设计方法和调试技术。 5.通过完成一个包括电路设计和程序开发的完整过程,为我们今后从事相应工作打下基础。三.设计思路 交通灯的变化规律 按照常规我们假设一个十字路口为东西南北走向。初始状态为状态1,南北方向绿灯通车,东西方向红灯。经过过一段时间(max-5)s转换状态2,南北方向绿灯闪几次转亮黄灯,延时5S,东西方向仍然红灯。再转换到状态3,东西方向绿灯通车,南北方向红灯。过一段

单片机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版软件,基本可以满足一般的个

基于protuse的单片机模拟的实例

本人对单片机的一些了解,在这里和大家分享。 (1)基于AT89C52的同步串口通信 ①单片机1程序 (程序在Kile C51上运行通过。) /******************************************************************** * 文件名:液晶1602显示.c * 描述: 该程序实现了对液晶1602的控制。 * 创建人:东流,2009年4月10日 * 版本号:2.0 ***********************************************************************/ #include #define uchar unsigned char #define uint unsigned int //这三个引脚参考资料 sbit E=P3^5; //1602使能引脚 sbit RW=P3^6; //1602读写引脚 sbit RS=P3^7; //1602数据/命令选择引脚 sbit aaa=P1^0; sbit bbb=P1^1; sbit aa=P3^0; sbit bb=P3^1; /******************************************************************** * 名称: delay() * 功能: 延时,延时时间大概为140US。 * 输入: 无 * 输出: 无

***********************************************************************/ void delay() { int i,j; for(i=0; i<=100; i++) for(j=0; j<=20; j++) ; } /******************************************************************** * 名称: enable(uchar del) * 功能: 1602命令函数 * 输入: 输入的命令值 * 输出: 无 ***********************************************************************/ void enable(uchar del) { P2 = del; RS = 0; RW = 0; E = 0; delay(); E = 1; delay(); } /******************************************************************** * 名称: write(uchar del) * 功能: 1602写数据函数 * 输入: 需要写入1602的数据 * 输出: 无 ***********************************************************************/ void write(uchar del) { P2 = del; RS = 1; RW = 0; E = 0; delay(); E = 1; delay();

单片机汇编程序实例

单片机程序入门小例子(汇编语言) 声明:以下3个例子都是正确的,都已经验证过。希望能给刚刚学习单片机的人一点参考。 编写人:大连民族学院自动化专业 例1:流水灯(加按键) ORG 0000H KEY1:MOV A,#0FEH CLR C LOOP1:MOV P2,A RLC A ACALL DELAY JNB P3.7,KEY2 LJMP LOOP1 KEY2:MOV A,#0FEH LOOP2:MOV P2,A RL A ACALL DELAY JNB P3.6,KEY1 LJMP LOOP2

DELAY:MOV R7,#20 D1:MOV R6,#200 D2:MOV R5,#123 NOP DJNZ R5,$ DJNZ R6,D2 DJNZ R7,D1 RET END 例2:数码管动态显示 ORG 0000H AJMP MAIN ORG 0003H AJMP PINT0 ORG 0100H MAIN:MOV SP,#40H CLR IT0 SETB EX0 SETB EA HERE:MOV 30H,#00H MOV 31H,#01H

MOV 32H,#02H MOV 33H,#03H LOOP:MOV R0,#30H MOV R1,#4 MOV R3,#0FEH MOV DPTR,#TAB LOOP1:MOV A,@R0 MOVC A,@A+DPTR MOV P0,A MOV P1,R3 LCALL DELAY INC R0 MOV A,R3 RL A MOV R3,A DJNZ R1,LOOP1 SJMP LOOP TAB:DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H DELAY:MOV R6,#6 LD:ACALL DELAY1 DJNZ R6,LD DELAY1:MOV R7,#124

单片机课程设计[1]

实验项目:智力抢答器 一、设计目的 现如今电视节目日益丰富其中的竞赛环节也越来越多,其中智力抢答器是不可或缺的器材。在本学期学习了单片机这门课之后,我们小组成员觉得可以试着自己来实现抢答器的功能,令它能准确、公正、直观地判断出第一抢答者,并通过抢答器的数码管显示和蜂鸣器报警指出抢答组别。我们最终做出一种数字式抢答器的设计方案,通过Proteus设计完成,利用WAVE6000软件编辑程序,仿真验证,适用于多种竞赛场合。 二、设计要求 设计一个用于智力竞赛的抢答器,其功能的实现是由单片机控制的,满足(1)能容许2-6组进行抢答。 (2)能显示抢答组号。 (3)各组记分,并能记分显示。 (4)比赛结束时,能发出报警声 三、设计方案 在设计中采用的单片机是AT89C51,它主要负责控制各个部分协调工作。 P1.0和P1.7由裁判控制,分别是抢答开始和停止键。P1.1—P1.6是6组抢答的输入口,按下对应按钮即为抢答。P0口为数码管的段选口,位选口用的是P2口的低4位,外部中断0。外部中断1,P3.3用于控制有组答题完成后结束计时。P3.4—P3.5分别实现了时间的加一和减一。P3.6为蜂鸣器的控制口。外部中断和内部中断并存,单片机有硬件复位端,只要输入持续4个机器周期的高电平即可实现复位。外部还接有蜂鸣器用来发出报警音。采用7SEG-MPX4-CC-BLUE 显示,它是共阴极的由高电平点亮。系统仿真用到了WAVE6000和Proteus软件,通过仿真可以显示所设计系统的功能,对于程序的调试等有很大的帮助。 总体框图

四、硬件设计 总体设计电路图 整个系统分为:外部振荡电路、复位电路、加减分电路及蜂鸣器报警电路、抢答电路及裁判控制开始停止电路、数码管显示电路几个部分 本设计的核心是单片机AT89C51。 AT89C51 提供以下标准功能:4k 字节Flash 闪速存储器,128字节内部RAM,32 个I/O 口线,两个16位定时/计数器,一个5向量两级中断结构,一个全双工串行通信口,片内振荡器及时钟电路。同时,AT89C51可降至0Hz的静态逻辑操作,并支持两种软件可选的节电工作模式。空闲方式停止CPU的工作,但允许RAM,定时/计数器,串行通信口及中断系统继续工作。掉电方式保存RAM 中的内容,但振荡器停止工作并禁止其它所有部件工作直到下一个硬件复位。振荡电路使用外部振荡电路,由两个1nF的电容和一个晶体振荡外部震荡电路

单片机C语言程序设计实训100例--基于8051+PROTEUS仿真1

《单片机C语言程序设计实训100例—基于8051+Proteus仿真》案例第01 篇基础程序设计 01 闪烁的LED LED 名称:闪烁的/* 按设定的时间间隔闪烁说明:LED */ #include #define uchar unsigned char #define uint unsigned int sbit LED=P1^0; 延时//void DelayMS(uint x) { uchar i; while(x--) { for(i=0;i<120;i++); }

主程序//void main() { while(1) { LED=~LED; DelayMS(150); } } 从左到右的流水灯02 名称:从左到右的流水灯/* LED8个口的说明:接在P0产生走从左到右循环依次点亮,马灯效果*/ #include #include #define uchar unsigned char #define uint unsigned int 延时// void DelayMS(uint x) { uchar i; while(x--) { for(i=0;i<120;i++); } } //主程序 void main() {

while(1) { P0=_crol_(P0,1); //P0的值向左循环移动 DelayMS(150); } } 03 8只LED左右来回点亮 /* 名称:8只LED左右来回点亮 说明:程序利用循环移位函数_crol_和_cror_形成来回滚动的效果*/ #include #include #define uchar unsigned char #define uint unsigned int //延时 void DelayMS(uint x) { uchar i; while(x--) { for(i=0;i<120;i++); } } //主程序 void main() {

单片机应用实例报告

单片机应用实例报告 零.序 这个学期一开始便接触了《单片微型计算机原理与接口技术》,听说是《微型计算机控制技术实用教程》的基础,对于工科的我来说学以致用无非是一切的一切,虽然还是个该领域的菜鸟,但是单片机之于自动化的意义不言而喻,对于这篇论文,以下开始展开,不足之处谅解。 一.概述 单片机是一种集成在电路芯片,是采用超大规模集成电路技术把具有数据处理能力的中央处理器CPU随机存储器RAM、只读存储器ROM、多种I/O口和中断系统、定时器/计时器等功能(可能还包括显示驱动电路、脉宽调制电路、模拟多路转换器、A/D转换器等电路)集成到一块硅片上构成的一个小而完善的计算机系统。 关于80C51:该系列单片机是采用高性能的静态80C51 设计由先进CMOS 工艺制造并带有非易失性Flash 程序存储器全部支持12 时钟和 6 时钟操作P89C51X2 和P89C52X2/54X2/58X2 分别包含128 字节和256 字节RAM 32 条I/O 口线 3 个16 位定时/计数器 6 输入4 优先级嵌套中断结构 1 个串行I/O 口可用于多机通信 I/O 扩展或全双工UART以及片内振荡器和时钟电路。此外,由于器件采用了静态设计,可提供很宽的操作频率范围,频率可降至0 。可实现两个由软件选择的节电模式,空闲模式和掉电模式,空闲模式冻结CPU但RAM 定时器,串口和中断系统仍然工作掉电模式保存RAM的内容但是冻结振荡器导致所有其它的片内功能停止工作。由于设计是静态的时钟可停止而不会丢失用户数据运行可从时钟停止处恢复的。 二.应用领域 目前单片机渗透到我们生活的各个领域,几乎很难找到哪个领域没有单片机的踪迹。导弹的导航装置,飞机上各种仪表的控制,计算机的网络通讯与数据传输,工业自动化过程的实时控制和数据处理,广泛使用的各种智能IC卡,民用豪华轿车的安全保障系统,录像机、摄像机、全自动洗衣机的控制,以及程控玩具、电子宠物等等,这些都离不开单片机。更不用说自动控制领域的机器人、智能仪表、医疗器械了。因此,单片机的学习、开发与应用将造就一批计算机应用与智能化控制的科学家、工程师。 单片机广泛应用于仪器仪表、家用电器、医用设备、航空航天、专用设备的智能化管理及过程控制等领域,大致可分如下几个范畴: 1.在智能仪器仪表上的应用 单片机具有体积小、功耗低、控制功能强、扩展灵活、微型化和使用方便等优点,广泛应用于仪器仪表中,结合不同类型的传感器,可实现诸如电压、功率、

单片机第一次实验

Cortex-M4原理与实践实验报告 实验一 GPIO 接口实验 一.实验目的 1. 掌握 Code Composer Studio 6.0(以下简称 CCS)的安装和配置步骤过程。 2. 了解 Cortex-M4 开发系统和计算机与目标系统的连接方法。 3. 了解 CCS 软件的操作环境和基本功能,了解 TM4C1294 软件开发过程。 1) 学习创建工程和管理工程的方法; 2) 了解基本的编译和调试功能; 3) 学会设置断点,注入和提取数据文件; 4) 学习使用观察窗口; 5) 了解图形功能的使用方法。 二.实验程序流程图

本实验通过多种方法来控制 GPIO 端口的读写,通过 GPIO 端口的读写来控制主板上两个独立的 LED 灯,D1、D2 的点亮和熄灭。主板上 D1、D2 、D3 对应的 GPIO 口分别为 PF1、 PF2、PF3。 三.实验代码、注释及现象 #include #include #include "inc/hw_memmap.h" #include "inc/hw_types.h" #include "driverlib/pin_map.h" #include "driverlib/sysctl.h" #include "driverlib/gpio.h" int main(void) { SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOF); //使能 GPIOF 口 GPIODirModeSet(GPIO_PORTF_BASE,GPIO_PIN_1,GPIO_DIR_MODE_OUT); //设置为输出模式 GPIOPadConfigSet(GPIO_PORTF_BASE,GPIO_PIN_1,GPIO_STRENGTH_8MA_SC,GPIO_PIN_TYPE_STD); //进一步设置为 8mA、带转换速率控制的推挽输出 GPIOPinWrite(GPIO_PORTF_BASE,GPIO_PIN_1, 0xff);//PF1 输出高电平 while(1) {}; //LED_D1 on 简单LE } 现象:LED1 被点亮

51单片机50个实例代码

51单片机50个例程代码程序里有中断,串口等驱动,直接复制即可使用1-IO输出-点亮1个LED灯方法1 /*----------------------------------------------- 名称:IO口高低电平控制 论坛:https://www.wendangku.net/doc/252555882.html, 编写:shifang 日期:2009.5 修改:无 内容:点亮P1口的一个LED灯 该程序是单片机学习中最简单最基础的, 通过程序了解如何控制端口的高低电平 ------------------------------------------------*/ #include //包含头文件,一般情况不需要改动, //头文件包含特殊功能寄存器的定义 sbit LED=P1^0;// 用sbit 关键字定义LED到P1.0端口, //LED是自己任意定义且容易记忆的符号 /*------------------------------------------------ 主函数 ------------------------------------------------*/ void main (void) { //此方法使用bit位对单个端口赋值 LED=1; //将P1.0口赋值1,对外输出高电平 LED=0; //将P1.0口赋值0,对外输出低电平 while (1) //主循环 { //主循环中添加其他需要一直工作的程序 } } 2-IO输出-点亮1个LED灯方法2 /*-----------------------------------------------

名称:IO口高低电平控制 论坛:https://www.wendangku.net/doc/252555882.html, 编写:shifang 日期:2009.5 修改:无 内容:点亮P1口的一个LED灯 该程序是单片机学习中最简单最基础的, 通过程序了解如何控制端口的高低电平 ------------------------------------------------*/ #include //包含头文件,一般情况不需要改动, //头文件包含特殊功能寄存器的定义 /*------------------------------------------------ 主函数 ------------------------------------------------*/ void main (void) { //此方法使用1个字节对单个端口赋值 P1 = 0xFF; //P1口全部为高电平,对应的LED灯全灭掉, //ff换算成二进制是1111 1111 P1 = 0xfe; //P1口的最低位点亮,可以更改数值是其他的灯点亮 //0xfe是16进制,0x开头表示16进制数, //fe换算成二进制是1111 1110 while (1) //主循环 { //主循环中添加其他需要一直工作的程序 } } 3-IO输出-点亮多个LED灯方法1 /*----------------------------------------------- 名称:IO口高低电平控制 论坛:https://www.wendangku.net/doc/252555882.html, 编写:shifang 日期:2009.5 修改:无 内容:点亮P1口的多个LED灯

单片机实例下载大全

单片机资料下载,省去找资料的麻烦 ,只供学习参考用,下载24内删掉,祝大家学习进步 单片机点阵学习资料 https://www.wendangku.net/doc/252555882.html,/forum.php?mod=viewthread&tid=1703&extra=page%3D1 手把手教你学单片机--教程视频 https://www.wendangku.net/doc/252555882.html,/forum.php?mod=viewthread&tid=1688&extra=page%3D1 力天把手教你学单片机视频教程 https://www.wendangku.net/doc/252555882.html,/forum.php?mod=forumdisplay&fid=110&page=1 谱中单片机开发板例程 https://www.wendangku.net/doc/252555882.html,/forum.php?mod=viewthread&tid=1683&extra=page%3D1 初学单片机的30多个小实验,硬件简单,对初学者有帮助 https://www.wendangku.net/doc/252555882.html,/forum.php?mod=viewthread&tid=1962&extra=page%3D1 用单片机制作的MP3 https://www.wendangku.net/doc/252555882.html,/forum.php?mod=viewthread&tid=1701&extra=page%3D1 51单片机应用开发大全所含100个范例代码及电路图 https://www.wendangku.net/doc/252555882.html,/forum.php?mod=viewthread&tid=1820 学林电子最新图文教程【含28个单片机实例流程图】 https://www.wendangku.net/doc/252555882.html,/forum.php?mod=viewthread&tid=1959&extra=page%3D1 谱中单片机程序烧录工具STC https://www.wendangku.net/doc/252555882.html,/forum.php?mod=viewthread&tid=1682&extra=page%3D1 吉林大学《单片机技术》32讲

单片机课程设计1

《单片机原理及接口》课程设计报告 题目:十字路口交通灯模拟控制系统 专业名称:通信09 班级:1班 学号:910705116 姓名:简必建 2011年12月

十字路口交通灯模拟控制系统 简必建 (电子信息工程系) 中文摘要:交通在人们的日常生活中占有重要的地位,随着人们社会活动的日益频繁,这点更是体现的淋漓尽致。交通信号灯的出现,使得交通得以有效管制,对于疏导交通流量、提高道路通行能力,减少交通事故有明显效果。本系统采用单片机89c51为中心器件来设计交通灯控制器,系统实用性强、操作简单、拓展性强。本系统就是采用单片机模拟十字路口交通灯的状态显示以及倒计时。 本设计系统由单片机I/O口扩展系统、交通灯状态显示系统、LED数码显示系统、等几大部分组成。系统除基本的交通功能外还有倒计时功能,较好的模拟路口可能出现的状况。软件上采用C语言编程,经过整机调试,实现了对十字路口交通灯的模拟。 关键词:单片机交通灯闯红灯检测车流量 二.功能概述 2.1设计任务:交通灯的硬件和软件设计 2.2设计目的 1.进一步熟悉和掌握单片机的结构和工作原理。 2.掌握单片机的接口技术及相关外围芯片的外特性,控制方法。 3.通过课程设计,掌握以单片机为核心的电路设计的基本方法和技术,了解有关电路参数的计算方法。 4.通过实际程序设计和调试,逐步掌握模块化程序设计方法和调试技术。 5.通过完成一个包括电路设计和程序开发的完整过程,为我们今后从事相应工作打下基础。

三.设计思路 交通灯的变化规律 按照常规我们假设一个十字路口为东西南北走向。初始状态为状态1,南北方向绿灯通车,东西方向红灯。经过过一段时间(max-5)s转换状态2,南北方向绿灯闪几次转亮黄灯,延时5S,东西方向仍然红灯。再转换到状态3,东西方向绿灯通车,南北方向红灯。过一段时间(25S)转换到状态4,东西方向绿灯闪几次转亮黄等,延时5S,南北方向仍然红灯。最后循环至南北绿灯,东西红灯。在这些状态下,有时钟倒数计时。 表一交通灯变化流程 25S 5S 25S 5S 。。。 东西道红灯亮红灯亮绿灯亮黄灯闪烁。。。 南北道绿灯亮黄灯闪烁红灯亮红灯亮。。。 四.硬件介绍 基础知识 交通灯控制器实例主要使用了89C51单片机的定时器,基础知识主要包括交通灯的变化规律、定时器概念和工作方式、以及数码管的动态显示方式。 4.1定时器 定时器是单片机中最常用、最重要的功能模块之一,本节通过交通灯控制器实例来演示定时器的使用。 首先介绍交通灯以及定时器/计数器的基础知识,接着介绍本实例的硬件电路构成,然后逐步分析定时器的变成以及程序的全貌,最后总结一下本实例的技巧与注意点。 4.2定时器/计数器的概念 89C51单片机有两个可编程的定时器/计数器T0、T1。 当定时器/计数器用作“定时器”时,每经过1个机器周期(12个时钟周期),计数器加1。当定时器/计数器用作“计数器”时,计数器在对应的外部输入管脚(T0为P3.4引脚,T1为P3.5引脚)上每发生一次1到0的跳变时加1。使用“计数器”功能时,外部输入每个机器周期被采样一次。当某一周期管脚状态采样为高电平而下一周期采样为低电平时,计数器加1。由于检测下降沿跳变需要两个机器周期(24个时钟周期)的时间,所以技术频率最大值只能为时钟周期的1/24。计数器对外部输入信号的占空比并无限制,但为了保证给定的电平信号在其改变之前至少被采样一次,外部输入信号必须至少保持一个完整的机器周

单片机程序实例程序实例

单片机程序实例程序实例 以简单的52单片机LCD例程为例,将下面的程序模块化。将延时函数独立成一个模块,为了使程序简化,将所有的和LCD相关的函数(包括LCD初始化函数、写命令函数、写数据函数、显示函数等)独立成一个模块。 #include #include #define uchar unsigned char #define uint unsigned int sbit rs = P2^5; sbit rw = P2^6; sbit e = P2^7; uint i; /*********************************************/ void delay1ms(uint z) { //延迟子程序0.5MS uint x,y; for(x=z;x>0;x--) for(y=110;y>0;y--); } /*********************************************/ void write_com(uchar com) { rs=0; rw=0; e=0; P0=com; delay1ms(1); e=1; delay1ms(1); e=0; delay1ms(1); } void write_date(uchar date) { rs=1; rw=0; e=0; P0=date; delay1ms(1); e=1; delay1ms(1); e=0; delay1ms(1); } void init() { delay1ms(1); write_com(0x30); delay1ms(1);

单片机实例1-12

单片机实例1-12

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所示

例子1-基于单片机与步进电机的运动控制系统

第2章系统设计方案的论证和比较 根据题目要求可知,系统由图2.1中模块组成。 图2.1 系统模块框图 本系统所涉及的核心问题主要有: 1、系统软件设计中需要选择一个合适的语言编程环境,从而达到设计的要求。 2、对电机的转速、转向、启停等多种工作状态进行快速而准确的控制,以保证悬挂物体按照预先设定或即时设定的运动轨迹运行。 3、为保证该控制系统的精度要求,必须对运动物体在画板上的具体位置(坐标点)进行实时的检测。 4、为保证该运动物体能在尽可能短的时间内按设定运动轨迹从起始点到达目标点,还需要相应的设定及显示电路。 我们分以下几个部分进行方案设计和比较论证。 2.1 软件设计语言与单片机开发环境选择 2.1.1软件设计语言选择 软件部分可用C语言和汇编语言进行编程,二者的特点分别如下:

1.汇编语言的特点:(1) 助记符指令和机器指令一一对应,所以用汇编语言编写的程序效率高,占用存储空间小,运行速度快,因此汇编语言能编写出最优化的程序; (2)使用汇编语言编程比使用高级语言困难。因为汇编语言是面向计算机的,汇编语言的程序设计人员必须对计算机硬件有相当深入的了解;(3)汇编语言能直接访问存储器及接口电路,也能处理中断,因此汇编语言程序能直接管理和控制硬件设备;(4)汇编语言缺乏通用性,程序不易移植,各种计算机都有自己的汇编语言,不同计算机的汇编语言之间不能通用。 2. C语言的特点:(1)语言简洁、紧凑,使用方便、灵活。C语言一共只有32个关键字,9种控制语句,程序书写形式自由,主要用小写字母表示,压缩了一切不必要的成分。因此C程序比较简练,源程序短,输入程序时工作量少;(2)运算符丰富。C的运算符包含的范围很广泛,共有34种运算符。C把括号、赋值、强制类型转换等都作为运算符处理,从而使c 的运算类型极其丰富,表达式类型多样化。灵活使用各种运算符可以实现在其他高级语言中难以实现的运算;(3)数据结构丰富,具有现代化语言的各种数据结构。C的数据类型有整型、实型、字符型、数组类型、指针类型、结构体类型、共用体类型等。能用来实现各种复杂的数据结构(如链表、树、栈等)的运算,尤其是指针类型数据,使用起来比PASCAL更为灵活、多样;(4)具有结构化的控制语句(如if…else语句、while语句、do…while语句、switch 语句、for语句)。用函数作为程序的模块单位,便于实现程序的模块化。C是理想的结构化语言,符合现代编程风格的要求;(5)语法限制不太严格,程序设计自由度大。例如对数组下标越界不做检查,由程序编写者自己保证程序的正确。对变量的类型使用比较灵活,例如整型量与字符型数据以及逻辑型数据可以通用;(6)C语言允许直接访问物理地址,能进行位(bit)操作,能实现汇编语言的大部分功能,可以直接对硬件进行操作。因此,C既具有高级语言的功能,又具有低级语言的许多功能,可用来写系统软件。C语言的这种双重性,使它既是成功的系统描述语言,又是通用的程序设计语言。有人把c称为“高级语言中的低级语言”或“中级语言”,意为兼有高级和低级语言的特点;(7)生成的目标代码质量高,程序执行效率高。一般只比汇编程序生成的目标代码效率低10%一20%;(8)用C语言写的程序可移植性好(与汇编语言相比)。基本上不做修改就能用于各种型号的计算机和各种操作系统。 基于以上分析,在本系统软件设计中选用C语言来进行有关程序的编写。 2.1.2 单片机集成开发环境选择

相关文档
相关文档 最新文档