文档库 最新最全的文档下载
当前位置:文档库 › C51单片机实战100例

C51单片机实战100例

C51单片机实战100例
C51单片机实战100例

目录

目录 1

函数的使用和熟悉 6

实例3:用单片机控制第一个灯亮7

实例4:用单片机控制一个灯闪烁:认识单片机的工作频率 7

实例5:将P1口状态分别送入P0、P2、P3口:认识I/O口的引脚功能8

实例6:使用P3口流水点亮8位LED 9

实例7:通过对P3口地址的操作流水点亮8位LED 11

实例8:用不同数据类型控制灯闪烁时间13

实例9:用P0口、P1 口分别显示加法和减法运算结果15

实例10:用P0、P1口显示乘法运算结果15

实例11:用P1、P0口显示除法运算结果17

实例12:用自增运算控制P0口8位LED流水花样17

实例13:用P0口显示逻辑"与"运算结果18

实例14:用P0口显示条件运算结果19

实例15:用P0口显示按位"异或"运算结果19

实例16:用P0显示左移运算结果19

实例17:"万能逻辑电路"实验20

实例18:用右移运算流水点亮P1口8位LED 20

实例19:用if语句控制P0口8位LED的流水方向22

实例20:用swtich语句的控制P0口8位LED的点亮状态23 实例21:用for语句控制蜂鸣器鸣笛次数25

实例22:用while语句控制LED 27

实例23:用do-while语句控制P0口8位LED流水点亮29

实例24:用字符型数组控制P0口8位LED流水点亮30

实例25:用P0口显示字符串常量32

实例26:用P0 口显示指针运算结果33

实例27:用指针数组控制P0口8位LED流水点亮34

实例28:用数组的指针控制P0 口8 位LED流水点亮 36

实例29:用P0 、P1口显示整型函数返回值37

实例30:用有参函数控制P0口8位LED流水速度38

实例31:用数组作函数参数控制流水花样40

实例32:用指针作函数参数控制P0口8位LED流水点亮42

实例33:用函数型指针控制P1口灯花样44

实例34:用指针数组作为函数的参数显示多个字符串46

实例35:字符函数ctype.h应用举例48

实例36:内部函数intrins.h应用举例 49

实例37:标准函数stdlib.h应用举例50

实例38:字符串函数string.h应用举例51

实例39:宏定义应用举例2 52

实例40:宏定义应用举例2 53

实例41:宏定义应用举例3 54

中断、定时器55

实例42:用定时器T0查询方式P2口8位控制LED闪烁55

实例43:用定时器T1查询方式控制单片机发出1KHz音频56 实例44:将计数器T0计数的结果送P1口8位LED显示57

实例45:用定时器T0的中断控制1位LED闪烁58

实例46:用定时器T0的中断实现长时间定时60

实例47:用定时器T1中断控制两个LED以不同周期闪烁61

实例48:用计数器T1的中断控制蜂鸣器发出1KHz音频63

实例49:用定时器T0的中断实现"渴望"主题曲的播放 65 实例50-1:输出50个矩形脉冲70

实例50-2:计数器T0统计外部脉冲数 72

实例51-2:定时器T0的模式2测量正脉冲宽度72

实例52:用定时器T0控制输出高低宽度不同的矩形波 74 实例53:用外中断0的中断方式进行数据采集 76

实例54-1:输出负脉宽为200微秒的方波 77

实例54-2:测量负脉冲宽度78

实例55:方式0控制流水灯循环点亮80

实例56-1:数据发送程序82

实例56-2:数据接收程序84

实例57-1:数据发送程序85

实例57-2:数据接收程序88

实例58:单片机向PC发送数据89

实例59:单片机接收PC发出的数据92

数码管显示 93

实例60:用LED数码显示数字5 93

实例61:用LED数码显示器循环显示数字0~9 94

实例62:用数码管慢速动态扫描显示数字"1234" 95

实例63:用LED数码显示器伪静态显示数字1234 96

实例64:用数码管显示动态检测结果98

实例65:数码秒表设计102

实例66:数码时钟设计105

实例67:用LED数码管显示计数器T0的计数值112

实例68:静态显示数字“59” 114

键盘控制115

实例69:无软件消抖的独立式键盘输入实验115

实例70:软件消抖的独立式键盘输入实验116

实例71:CPU控制的独立式键盘扫描实验 117

实例72:定时器中断控制的独立式键盘扫描实验123

实例73:独立式键盘控制的4级变速流水灯130

实例74:独立式键盘的按键功能扩展:"以一当四" 134

实例75:独立式键盘调时的数码时钟实验137

实例76:独立式键盘控制步进电机实验145

实例77:矩阵式键盘按键值的数码管显示实验150

实例78:矩阵式键盘按键音156

实例79:简易电子琴159

实例80:矩阵式键盘实现的电子密码锁171

液晶显示LCD 178

实例81:用LCD显示字符'A' 178

实例82:用LCD循环右移显示"Welcome to China" 184 实例83:用LCD显示适时检测结果191

实例84:液晶时钟设计199

一些芯片的使用*****24c02 DS18B20 X5045 ADC0832 DAC0832 DS1302 红外遥控211

实例85:将数据"0x0f"写入AT24C02再读出送P1口显示211

实例86:将按键次数写入AT24C02,再读出并用1602LCD显示220

实例87:对I2C总线上挂接多个AT24C02的读写操作235

实例88:基于AT24C02的多机通信读取程序246

实例88:基于AT24C02的多机通信写入程序253

实例90:DS18B20温度检测及其液晶显示276

实例91:将数据"0xaa"写入X5045再读出送P1口显示294

实例92:将流水灯控制码写入X5045并读出送P1口显示 301

实例93:对SPI总线上挂接多个X5045的读写操作309

实例94:基于ADC0832的数字电压表318

实例95:用DAC0832产生锯齿波电压330

实例96:用P1口显示红外遥控器的按键值330

实例97:用红外遥控器控制继电器 335

实例98:基于DS1302的日历时钟340

实例99:单片机数据发送程序358

实例100:电机转速表设计361

//模拟霍尔脉冲371

函数的使用和熟悉

实例3:用单片机控制第一个灯亮

#include //包含51单片机寄存器定义的头文件

void main(void)

{

P1=0xfe; //P1=1111 1110B,即P1.0输出低电平

}

实例4:用单片机控制一个灯闪烁:认识单片机的工作频率

#include //包含单片机寄存器的头文件

/****************************************

函数功能:延时一段时间

*****************************************/

void delay(void) //两个void意思分别为无需返回值,没有参数传递{

unsigned int i; //定义无符号整数,最大取值范围65535

for(i=0;i<20000;i++) //做20000次空循环

; //什么也不做,等待一个机器周期

}

/*******************************************************

函数功能:主函数(C语言规定必须有也只能有1个主函数)

********************************************************/

void main(void)

{

while(1) //无限循环

{

P1=0xfe; //P1=1111 1110B,P1.0输出低电平

delay(); //延时一段时间

P1=0xff; //P1=1111 1111B,P1.0输出高电平

delay(); //延时一段时间

}

}

实例5:将P1口状态分别送入P0、P2、P3口:认识I/O口的引脚功能#include //包含单片机寄存器的头文件

/*******************************************************

函数功能:主函数(C语言规定必须有也只能有1个主函数)

********************************************************/

void main(void)

{

while(1) //无限循环

{

P1=0xff; // P1=1111 1111B,熄灭LED

P0=P1; // 将P1口状态送入P0口

P2=P1; // 将P1口状态送入P2口

P3=P1; // 将P1口状态送入P3口

}

}

实例6:使用P3口流水点亮8位LED

#include //包含单片机寄存器的头文件

/****************************************

函数功能:延时一段时间

*****************************************/

void delay(void)

{

unsigned char i,j;

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

for(j=0;j<250;j++)

;

}

/******************************************************* 函数功能:主函数

********************************************************/ void main(void)

while(1)

{

P3=0xfe; //第一个灯亮

delay(); //调用延时函数

P3=0xfd; //第二个灯亮

delay(); //调用延时函数

P3=0xfb; //第三个灯亮

delay(); //调用延时函数

P3=0xf7; //第四个灯亮

delay(); //调用延时函数

P3=0xef; //第五个灯亮 delay(); //调用延时函数

P3=0xdf; //第六个灯亮

delay(); //调用延时函数

P3=0xbf; //第七个灯亮 delay(); //调用延时函数

P3=0x7f; //第八个灯亮 delay(); //调用延时函数

}

}

实例7:通过对P3口地址的操作流水点亮8位LED

#include //包含单片机寄存器的头文件

sfr x=0xb0; //P3口在存储器中的地址是b0H,通过sfr可定义8051内核单片机

//的所有内部8位特殊功能寄存器,对地址x的操作也就是对P1口的操作

/****************************************

函数功能:延时一段时间

*****************************************/

void delay(void)

{

unsigned char i,j;

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

for(j=0;j<250;j++)

; //利用循环等待若干机器周期,从而延时一段时间}

/*****************************************

函数功能:主函数

******************************************/

void main(void)

{

while(1)

{

x=0xfe; //第一个灯亮

delay(); //调用延时函数

x=0xfd; //第二个灯亮

delay(); //调用延时函数

x=0xfb; //第三个灯亮

delay(); //调用延时函数

x=0xf7; //第四个灯亮

delay(); //调用延时函数

x=0xef; //第五个灯亮 delay(); //调用延时函数

x=0xdf; //第六个灯亮

delay(); //调用延时函数

x=0xbf; //第七个灯亮 delay(); //调用延时函数

x=0x7f; //第八个灯亮 delay(); //调用延时函数

}

}

实例8:用不同数据类型控制灯闪烁时间

#include //包含单片机寄存器的头文件

/******************************************************

函数功能:用整形数据延时一段时间

******************************************************/

void int_delay(void) //延时一段较长的时间

{

unsigned int m; //定义无符号整形变量,双字节数据,值域为0~65535

for(m=0;m<36000;m++)

; //空操作

}

/******************************************************

函数功能:用字符型数据延时一段时间

******************************************************/

void char_delay(void) //延时一段较短的时间

{

unsigned char i,j; //定义无符号字符型变量,单字节数据,值域0~255

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

for(j=0;j<180;j++)

; //空操作

}

/****************************************************** 函数功能:主函数

******************************************************/ void main(void)

{

unsigned char i;

while(1)

{

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

{

P1=0xfe; //P1.0口的灯点亮

int_delay(); //延时一段较长的时间

P1=0xff; //熄灭

int_delay(); //延时一段较长的时间

}

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

{

P1=0xef; //P1.4口的灯点亮

char_delay(); //延时一段较长的时间

P1=0xff; //熄灭

char_delay(); //延时一段较长的时间

}

}

}

实例9:用P0口、P1 口分别显示加法和减法运算结果

#include

void main(void)

{

unsigned char m,n;

m=43; //即十进制数2x16+11=43

n=60; //即十进制数3x16+12=60

P1=m+n; //P1=103=0110 0111B,结果P1.3、P1.4、P1.7 口的灯被点亮

P0=n-m; //P0=17=0001 0001B,结果P0.0、P0.4的灯被熄灭

}

实例10:用P0、P1口显示乘法运算结果

#include //包含单片机寄存器的头文件

void main(void)

{

unsigned char m,n;

unsigned int s;

m=64;

n=71;

s=m*n; //s=64*71=4544,需要16位二进制数表示,高8位送P1口,低8位送P0口

//由于

4544=17*256+192=H3*16*16*16+H2*16*16+H1*16+H0

//两边同除以256,可得17+192/256=H3*16+H2+(H1*16+H0)/256

//因此,高8位16进制数H3*16+H2必然等于17,即4544除以256的商

//低8位16进制数H1*16+H0必然等于192,即4544除以256的余数

P1=s/256; //高8位送P1口,P1=17=11H=0001 0001B, P1.0和P1.4口灭,其余亮

P0=s%256; //低8位送P0口, P3=192=c0H=1100

0000B,P3.1,P3.6,P3.7口灭,其余亮

}

实例11:用P1、P0口显示除法运算结果

#include //包含单片机寄存器的头文件

void main(void)

{

P1=36/5; //求整数

P0=((36%5)*10)/5; //求小数

while(1)

; //无限循环防止程序“跑飞”

}

实例12:用自增运算控制P0口8位LED流水花样

#include //包含单片机寄存器的头文件

/****************************************************** 函数功能:延时一段时间

******************************************************/ void delay(void)

{

unsigned int i;

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

;

}

/****************************************************** 函数功能

******************************************************/ void main(void)

{

unsigned char i;

for(i=0;i<255;i++) //注意i的值不能超过255

{

P0=i; //将i的值送P0口

delay(); //调用延时函数

}

}

实例13:用P0口显示逻辑"与"运算结果

#include //包含单片机寄存器的头文件

void main(void)

{

P0=(4>0)&&(9>0xab);//将逻辑运算结果送P0口while(1)

; //设置无限循环,防止程序“跑飞”

}

实例14:用P0口显示条件运算结果

#include //包含单片机寄存器的头文件

void main(void)

{

P0=(8>4)?8:4;//将条件运算结果送P0口,P0=8=0000 1000B while(1)

; //设置无限循环,防止程序“跑飞”

}

实例15:用P0口显示按位"异或"运算结果

#include //包含单片机寄存器的头文件

void main(void)

{

P0=0xa2^0x3c;//将条件运算结果送P0口,P0=8=0000 1000B while(1)

; //设置无限循环,防止程序“跑飞”

}

实例16:用P0显示左移运算结果

#include //包含单片机寄存器的头文件

void main(void)

{

P0=0x3b<<2;//将左移运算结果送P0口,P0=1110 1100B=0xec while(1)

; //无限循环,防止程序“跑飞”

}

实例17:"万能逻辑电路"实验

#include //包含单片机寄存器的头文件

sbit F=P1^4; //将F位定义为P1.4

sbit X=P1^5; //将X位定义为P1.5

sbit Y=P1^6; //将Y位定义为P1.6

sbit Z=P1^7; //将Z位定义为P1.7

void main(void)

{

while(1)

{

F=((~X)&Y)|Z; //将逻辑运算结果赋给F

;

}

}

实例18:用右移运算流水点亮P1口8位LED

C51单片机C语言程序100例_Keil

目录 目录 (1) 函数的使用和熟悉********************************/ (4) 实例3:用单片机控制第一个灯亮 (4) 实例4:用单片机控制一个灯闪烁:认识单片机的工作频率 (4) 实例5:将P1口状态分别送入P0、P2、P3口:认识I/O口的引脚功能 (5) 实例6:使用P3口流水点亮8位LED (5) 实例7:通过对P3口地址的操作流水点亮8位LED (6) 实例8:用不同数据类型控制灯闪烁时间 (7) 实例9:用P0口、P1口分别显示加法和减法运算结果 (8) 实例10:用P0、P1口显示乘法运算结果 (9) 实例11:用P1、P0口显示除法运算结果 (9) 实例12:用自增运算控制P0口8位LED流水花样 (10) 实例13:用P0口显示逻辑"与"运算结果 (10) 实例14:用P0口显示条件运算结果 (11) 实例15:用P0口显示按位"异或"运算结果 (11) 实例16:用P0显示左移运算结果 (11) 实例17:"万能逻辑电路"实验 (11) 实例18:用右移运算流水点亮P1口8位LED (12) 实例19:用if语句控制P0口8位LED的流水方向 (13) 实例20:用swtich语句的控制P0口8位LED的点亮状态 (13) 实例21:用for语句控制蜂鸣器鸣笛次数 (14) 实例22:用while语句控制LED (16) 实例23:用do-while语句控制P0口8位LED流水点亮 (16) 实例24:用字符型数组控制P0口8位LED流水点亮 (17) 实例25:用P0口显示字符串常量 (18) 实例26:用P0口显示指针运算结果 (19) 实例27:用指针数组控制P0口8位LED流水点亮 (19) 实例28:用数组的指针控制P0口8位LED流水点亮 (20) 实例29:用P0、P1口显示整型函数返回值 (21) 实例30:用有参函数控制P0口8位LED流水速度 (22) 实例31:用数组作函数参数控制流水花样 (23) 实例32:用指针作函数参数控制P0口8位LED流水点亮 (23) 实例33:用函数型指针控制P1口灯花样 (25) 实例34:用指针数组作为函数的参数显示多个字符串 (26) 实例35:字符函数ctype.h应用举例 (27) 实例36:内部函数intrins.h应用举例 (27) 实例37:标准函数stdlib.h应用举例 (28) 实例38:字符串函数string.h应用举例 (29) 实例39:宏定义应用举例2 (29) 1/192

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.闪烁灯 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所示

单片机原理与应用及C51程序设计(第三版)(1、2、3、4、7章课后习题答案)

第一章: 1. 给出下列有符号数的原码、反码和补码(假设计算机字长为8位)。 +45 -89 -6 +112 答:【+45】原=00101101,【+45】反=00101101,【+45】补=00101101 【-89】原=11011001,【-89】反=10100110,【-89】补=10100111 【-6】原=10000110,【-6】反=11111001,【-6】补=11111010 【+112】原=01110000,【+112】反=01110000,【+112】补=01110000 2. 指明下列字符在计算机内部的表示形式。 AsENdfJFmdsv120 答:41H 73H 45H 4EH 64H 66H 4AH 46H 6DH 64H 73H 76H 31H 32H 30H 3.何谓微型计算机硬件?它由哪几部分组成?并简述各部分的作用。 答:微型计算机硬件由中央处理器、存储器、输入/输出设备和系统总线等组成,中央处理器由运算器和控制器组成,是微型计算机运算和控制中心。存储器是用来存放程序和数据的记忆装置。输人设备是向计算机输人原始数据和程序的装置。输出设备是计算机向外界输出信息的装置。I/O接口电路是外部设备和微型机之间传送信息的部件。总线是连接多个设备或功能部件的一簇公共信号线,它是计算机各组成部件之间信息交换的通道。微型计算机的各大功能部件通过总线相连。 4.简述8086CPU的内部结构。 答:8086微处理器的内部分为两个部分:执行单元(EU)和总线接口单元(BIU)。执行部件由运算器(ALU)、通用寄存器、标志寄存器和EU控制系统等组成。EU从BIU的指令队列中获得指令,然后执行该指令,完成指今所规定的操作。总线接口部件BIU由段寄存器、指令指针寄存器、地址形成逻辑、总线控制逻辑和指令队列等组成。总线接口部件负责从内部存储器的指定区域中取出指令送到指令队列中去排队。 5.何谓总线?总线按功能可分为哪几种? 答:总线是连接多个设备或功能部件的一簇公共信号线,它是计算机各组成部件之间信息交换的通道。总线功能来划分又可分为地址总线(Address Bus)、数据总线(Date Bus)和控制总线(Control Bus)三类。 6.内部存储器由哪几部分组成? 答:包括随机存储器(RAM)和只读存储器(ROM)。 7.简述8086中的存储器管理? 答:8086把1M空间分成若干块(称为“逻辑段”),各个逻辑段之间可在实际存储空间中完全分开,也可以部分重叠,甚至可以完全重叠。每个逻辑段容量不超过64K字节,这样就可用16位寄存器提供地址访问。一个存储单元的地址可由段基址和偏移地址组成,这个地址我们称为逻辑地址,一般表示为“段基址:偏移地址”。而1M存储空间中的20位地址称为物理地址。逻辑地址是程序中使用的地址,物理地址是访问存储器的实际地址。 物理地址=段基址×16 + 段内偏移地址 8.什么是接口电路?接口电路有何功能? 答:I/O接口电路是外部设备和微型机之间传送信息的部件。接口电路主要功能。(1) 数据的寄存和缓冲功能。(2) 信号转换功能。(3) 设备选择功能。(4) 外设的控制和监测功能。(5) 中断或DMA管理功能。(6) 可编程功能。 9.外部设备与CPU之间的数据传送方式常见有几种?各有什么特点? 答:外部设备与微机之间的信息传送传送方式一般有无条件传送方式、查询传送方式、中断控制方式等。无条件传送方式是指CPU直接和外部设备之间进行数据传送。查询传送方式又称为条件传送方式,是指CPU通过查询I/O设备的状态决定是否进行数据传输的方式。中断是一种使CPU暂停正在执行的程序而转去处理特殊事件的操作。即当外设的输入数据准备好,或输出设备可以接收数据时,便主动向CPU发出中断请求,CPU可中断正在执行的程序,转去执行为外设服务的操作,服务完毕,CPU再继续执行原来的程序。 10.什么是单片机? 答:单片机是把微型计算机中的微处理器、存储器、I/O接口、定时器/计数器、串行接口、中断系统等电路集成到一个集成电路芯片上形成的微型计算机。因而被称为单片微型计算机,简称为单片机。 11.和一般微型计算机相比,单片机有何特点? 答:主要特点如下: 1) 在存储器结构上,单片机的存储器采用哈佛(Harvard)结构 2) 在芯片引脚上,大部分采用分时复用技术 3) 在内部资源访问上,采用特殊功能寄存器(SFR)的形式

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

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

c51单片机实例下载大全

单片机资料教程下载,省去找资料的麻烦,只供学习参考用,下载24内删掉,祝大家学习进步 单片机点阵学习资料 https://www.wendangku.net/doc/ef3254101.html,/thread-1703-1-1.html 手把手教你学单片机--教程视频 https://www.wendangku.net/doc/ef3254101.html,/thread-1688-1-1.html 力天把手教你学单片机视频教程 https://www.wendangku.net/doc/ef3254101.html,/thread-1689-1-1.html 谱中单片机开发板例程 https://www.wendangku.net/doc/ef3254101.html,/thread-1683-1-2.html 初学单片机的30,硬件简单对初学者有帮助 https://www.wendangku.net/doc/ef3254101.html,/thread-1962-1-1.html 用单片机制作的MP3 https://www.wendangku.net/doc/ef3254101.html,/thread-1701-1-2.html 51单片机应用开发大全所含100个范例代码及电路图 https://www.wendangku.net/doc/ef3254101.html,/thread-1820-1-1.html 【含28个单片机实例流程图】 https://www.wendangku.net/doc/ef3254101.html,/thread-1959-1-2.html 谱中单片机程序烧录工具STC https://www.wendangku.net/doc/ef3254101.html,/thread-1682-1-2.html 《单片机技术》32讲

https://www.wendangku.net/doc/ef3254101.html,/thread-1693-1-1.html 51单片机c语言100例教程 https://www.wendangku.net/doc/ef3254101.html,/thread-1700-1-1.html 单片机超级精华包 https://www.wendangku.net/doc/ef3254101.html,/thread-1687-1-1.html 新手学的多功能电子钟 https://www.wendangku.net/doc/ef3254101.html,/thread-1679-1-1.html 十天学会单片机和c语言视频教程 https://www.wendangku.net/doc/ef3254101.html,/thread-1692-1-1.html C语言函数库速查手册 https://www.wendangku.net/doc/ef3254101.html,/thread-1696-1-1.html 历史上最全的KEIL中文学习资料 https://www.wendangku.net/doc/ef3254101.html,/thread-1729-1-2.html 单片机c语言程序设计实训100例--基于AVR+PROTUES https://www.wendangku.net/doc/ef3254101.html,/thread-1695-1-2.html (有电路图和程序) https://www.wendangku.net/doc/ef3254101.html,/thread-1965-1-1.html 关于单片机抗干扰的资料 https://www.wendangku.net/doc/ef3254101.html,/thread-1961-1-1.html 单片机矩阵扫描键盘程序 https://www.wendangku.net/doc/ef3254101.html,/thread-1723-1-1.html 共享通过串口在线调试51单片机的专业版培训资料

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

单片机原理与C51语言程序设计与基础教程 课后习题答案

单片机原理与C51语言程序设计与基础教 程课后习题答案 习题 填空题 1.一般而言,微型计算机包括、、、四个基本组成部分。 2.单片机是一块芯片上的微型计算机。以为核心的硬件电路称为单片机系统,它属于地应用范畴。 3.Atmel 公司生产的CMOS型51系列单片机,具有内核,用 代替ROM作为程序存储器, 4.单片机根据工作温度可分为、和三种。民用级的温度范围是0℃一70℃,工业级是-40℃~85℃,军用级是-55℃-125℃(不同厂家的划分标推可能不同。 5.在单片机领域内,ICE的含义是。 选择题 1.单片机的工作电压一般为V? A 5V B 3V C 1V D 4V 2.单片机作为微机的一种,它具有如下特点: A 具有优异的性能价格比 B 集成度高、体积小、可靠性高 C 控制功能强,开发应用方便 D 低电压、低功耗。 3.民用级单片机的温度范围是: A -40℃~85℃ B 0℃一70℃ C -55℃-125℃ D 0℃一50℃ 4.MCS-51系列单片机最多有个中端源。 A 3 B 4 C 5 D 6 5.下列简写名称中不是单片机或单片机系统的是 A MCU B SCM C ICE D CPU 问答题 1.单片机常用的应用领域有哪些? 2.我们如何学习单片机这么技术? 3.单片机从用途上可分成哪几类?分别由什么用处? 答案

填空题 1.运算器、控制器、存储器、输入输出接口 2.单片机嵌入式系统 3.MCS-51 Flash ROM 4.民用级(商业级) 工业级军用级 5.在线仿真器 选择题 1.A 2.ABCD 3.B 4.C 5.D 问答题 1.单片机广泛应用于仪器仪表、家用电器、医用设备、航空航天、专用设备的智能化管理及过程控制等领域,大致可分如下几个范畴: (1)在智能仪器仪表上的应用 单片机具有体积小、功耗低、控制功能强、扩展灵活、微型化和使用方便等优点,广泛应用于仪器仪表中,结合不同类型的传感器,可实现诸如电压、功率、频率、湿度、温度、流量、速度、厚度、角度、长度、硬度、元素、压力等物理量的测量。采用单片机控制使得仪器仪表数字化、智能化、微型化,且功能比起采用电子或数字电路更加强大。例如精密的测量设备(功率计,示波器,各种分析仪)。 (2)在工业控制中的应用 用单片机可以构成形式多样的控制系统、数据采集系统。例如工厂流水线的智能化管理,电梯智能化控制、各种报警系统,与计算机联网构成二级控制系统等。 (3)在家用电器中的应用 可以这样说,现在的家用电器基本上都采用了单片机控制,从电饭褒、洗衣机、电冰箱、空调机、彩电、其他音响视频器材、再到电子秤量设备,五花八门,无所不在。 (4)在计算机网络和通信领域中的应用 现代的单片机普遍具备通信接口,可以很方便地与计算机进行数据通信,为在计算机网络和通信设备间的应用提供了极好的物质条件,现在的通信设备基本上都实现了单片机智能控制,从手机,电话机、小型程控交换机、楼宇自动通信呼叫系统、列车无线通信、再到日常工作中随处可见的移动电话,集群移动通信,无线电对讲机等。 (5)单片机在医用设备领域中的应用 单片机在医用设备中的用途亦相当广泛,例如医用呼吸机,各种分析仪,监护仪,超声诊断设备及病床呼叫系统等等。 此外,单片机在工商,金融,科研、教育,国防航空航天等领域都有着十分广泛的用途。 2.首先,大概了解单片机的机构,例如本书的第2章则是主要讲了单片机的内部结构以及资源。对单片机的内部结构有了初步了解之后,读者就可以进行简单的实例练习,从而加深对单片机的认识。 其次,要有大量的实例练习。其实,对于单片机,主要是软件设计,也就是编程。目前最流行的用于51系列单片机地编程软件是Keil。Keil提供了包括C编译器、宏汇编、连接器、库管理和一个功能强大的仿真调试器等在内的完整开发方案,通过一个集成开发环境(uVision)将这些部份组合在一起。掌握这一软件的使用对于使用51系列单片机的爱好

C51单片机编程基本知识

C51单片机编程基本知识 全文选段:该控制指令将C文件编译生成汇编文件(.SRC),该汇编文件可改名后,生成汇编.ASM文件,再用A51进行编译。 第三节 Keil C51软件包中的通用文件 在C51\LiB目录下有几个C源文件,这几个C源文件有非常重要的作用,对它们稍事修改,就可以用在自己的专用系统中。 1. 动态内存分配 init_mem.C:此文件是初始化动态内存区的程序源代码。它可以指定动态内存的位置及大小,只有使用了init_mem( )才可以调回其它函数,诸如malloc calloc,realloc等。 calloc.c:此文件是给数组分配内存的源代码,它可以指定单位数据类型及该单元数目。 malloc.c:此文件是malloc的源代码,分配一段固定大小的内存。 realloc.c:此文件是realloc.c源代码,其功能是调整当前分配动态内存的大小。 全文内容: 本章讨论以下内容: l 绝对地址访问 l C与汇编的接口 l C51软件包中的通用文件 l 段名转换与程序优化 第一节绝对地址访问 C51提供了三种访问绝对地址的方法: 1. 绝对宏: 在程序中,用“#include〈absacc.h〉”即可使用其中定义的宏来访问绝对地址,包括: CBYTE、XBYTE、PWORD、DBYTE、CWORD、XWORD、PBYTE、DWORD 具体使用可看一看absacc.h便知 例如: rval=CBYTE[0x0002];指向程序存贮器的0002h地址 rval=XWORD [0x0002];指向外RAM的0004h地址 2. _at_关键字 直接在数据定义后加上_at_ const即可,但是注意: (1)绝对变量不能被初使化; (2)bit型函数及变量不能用_at_指定。 例如: idata struct link list _at_ 0x40;指定list结构从40h开始。 xdata char text[25b] _at_0xE000;指定text数组从0E000H开始 提示:如果外部绝对变量是I/O端口等可自行变化数据,需要使用volatile关键字进行描述,请参考absacc.h。 3. 连接定位控制 此法是利用连接控制指令code xdata pdata \data bdata对“段”地址进行,如要指定某具体变量地址,则很有局限性,不作详细讨论。 第二节 Keil C51与汇编的接口 1. 模块内接口 方法是用#pragma语句具体结构是: #pragma asm 汇编行

单片机汇编程序实例

单片机程序入门小例子(汇编语言) 声明:以下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

51单片机50个实例代码

51单片机50个例程代码程序里有中断,串口等驱动,直接复制即可使用1-IO输出-点亮1个LED灯方法1 /*----------------------------------------------- 名称:IO口高低电平控制 论坛:https://www.wendangku.net/doc/ef3254101.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/ef3254101.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/ef3254101.html, 编写:shifang 日期:2009.5 修改:无 内容:点亮P1口的多个LED灯

51单片机模块化编程设计与实例要点分析

模块化编程设计题 一、简述模块化编程的必要性(模块化的优点) 参考答案: 大多数的编程学习者一开始接触和学习到的程序很小,代码量很少,甚至只有几十行。对于这样短小的程序进行模块化设计不是完全必要的。很多情况下程序模块化设计需要“浪费”很多时间,例如增加了代码的数量,增加了构思的时间。把所有的程序代码都写在一个main()函数中程序完全可以运行。 但是随着学习的深入,代码量的增加,将所有的代码都放在同一个.C文件中的做法越发使得程序结构混乱,虽然可以运行,但是可读性、可移植性变差。即使是自己写的程序,时间长以后对程序的阅读和修改也要花一些时间。模块化编程使得程序的组织结构更加富有层次感,立体感和降低程序的耦合度。 在大规模程序开发中,一个程序由很多个模块组成,很可能,这些模块的编写任务被分配到不同的人。几乎所有商用程序都必须使用模块化程序设计理念。在程序的设计过程中各个开发者分工合作,分别完成某一模块特定的功能,减少开发时间等。 二、模块化编程设计步骤 (1)、创建头文件 在模块化编程中,往往会有多个C文件,而且每个C文件的作用不尽相同。在我们的C 文件中,由于需要对外提供接口,因此还必须有一些函数或者是变量提供给外部其它文件进行调用。对于每一个模块都有相应的.c文件和.h文件,为了阅读调试方便,原则上.c文件和.h文件同名,如和。 (2)防重复包含 例如文件 #ifndef__DELAY_H__ #define__DELAY_H__ void delay(uint t); #endif 假如有两个不同源文件需要调用delay(uint t)这个函数,他们分别都通过#include “”把这个头文件包含了进去。在第一个源文件进行编译时候,由于没有定义过因此#ifndef__DELAY_H__条件成立,于是定义_DELAY_H_ 并将下面的声明包含进去。在第二个文件编译时候,由于第一个文件包含时候,已经将_DELAY_H_定义过了。因此#ifndef__DELAY_H__不成立,整个头文件内容就没有被包含。假设没有这样的条件编译语句,那么两个文件都包含了delay(uint t);就会引起重复包含的错误。所以在.h文件中,为了防止出现错误都进行防重复包含。 (3)代码封装 将需要模块化的进行代码封装 头文件的作用可以称其为一份接口描述文件。其文件内部不应该包含任何实质性的函数代码。我们可以把这个头文件理解成为一份说明书,说明的内容就是我们的模块对外提供的接口函数或者是接口变量。同时该文件也包含了一些很重要的宏定义以及一些结构体的信息,离开了这些信息,很可能就无法正常使用接口函数或者是接口变量。但是总的原则是:不该让外界知道的信息就不应该出现在头文件里(不需要外部调用的函数不在头文件中申明),而外界调用模块内接口函数或者是接口变量所必须的信息就一定要出现在头文件里(需要被外部调用的函数一定要在头文件中申明),否则,外界就无法正确的调用我们提供的接口功能。

单片机原理及接口技术(C51编程~)(第2版~)-习题-答案~汇总

单片机答案

第1章思考题及习题1参考答案 一、填空 1. 除了单片机这一名称之外,单片机还可称为或。答:微控制器, 嵌入式控制器. 2.单片机与普通微型计算机的不同之处在于其将、、和三部 分,通过内部连接在一起,集成于一块芯片上。答:CPU、存储器、I/O 口、总线 3. AT89S51单片机工作频率上限为 MHz。答:24MHz。 4. 专用单片机已使系统结构最简化、软硬件资源利用最优化,从而大大降低 和提高。答:成本,可靠性。 二、单选 1. 单片机内部数据之所以用二进制形式表示,主要是 A.为了编程方便B.受器件的物理性能限制C.为了通用性D.为了提高运算速度答:B 2. 在家用电器中使用单片机应属于微计算机的。 A.辅助设计应用B.测量、控制应用 C.数值计算应用D.数据处理应用答: B 3. 下面的哪一项应用,不属于单片机的应用范围。 A.工业控制 B.家用电器的控制 C.数据库管理 D.汽车电子设备 答:C 三、判断对错 1. STC系列单片机是8051内核的单片机。对 2. AT89S52与AT89S51相比,片内多出了4KB的Flash程序存储器、128B的RAM、1 1

个中断源、1个定时器(且具有捕捉功能)。对 3. 单片机是一种CPU。错 4. AT89S52单片机是微处理器。错 5. AT89S51片内的Flash程序存储器可在线写入(ISP),而AT89C52则不能。对 6. 为AT89C51单片机设计的应用系统板,可将芯片AT89C51直接用芯片AT89S51替换。对 7. 为AT89S51单片机设计的应用系统板,可将芯片AT89S51直接用芯片AT89S52替换。对 8. 单片机的功能侧重于测量和控制,而复杂的数字信号处理运算及高速的测控功能 则是DSP的长处。对 第2章思考题及习题2参考答案 一、填空 1. 在AT89S51单片机中,如果采用6MHz晶振,一个机器周期为。答:2μs 2. AT89S51单片机的机器周期等于个时钟振荡周期。答:12 3. 内部RAM中,位地址为40H、88H的位,该位所在字节的字节地址分别为 和。答:28H,88H 4. 片内字节地址为2AH单元最低位的位地址是;片内字节地址为A8H单元的最低位的位地址为。答:50H,A8H 5. 若A中的内容为63H,那么,P标志位的值为。答:0 6. AT89S51单片机复位后,R4所对应的存储单元的地址为,因上电时PSW= 。这时当前的工作寄存器区是组工作寄存器区。答:04H,00H,0。 7. 内部RAM中,可作为工作寄存器区的单元地址为 H~ H。答:00H,1FH 8. 通过堆栈操作实现子程序调用时,首先要把的内容入栈,以进行断点保护。调用子程序返回指令时,再进行出栈保护,把保护的断点送回到, 2

单片机程序实例程序实例

单片机程序实例程序实例 以简单的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);

基于C51单片机电子琴的设计与实现

基于C51单单片机电子琴的设计与实现 组员:周静 马帅 陈梦艳 班级:通信2班 1.设计任务与要求 (2) 2.方案论证 (3) 2.1单片机 (3) 2.2发声器 (4) 3.理论分析与计算: (4) 4.硬件电路与程序设计 (6) 4.1电路图: (6) 4.2程序框图 (6) 5.软件程序 (7) 6.总结与展望 (13) 附录1: (14) 附录2: (14)

摘要:打造一个多功能电子琴,核心是一块单片机。单片机读取键值,为内置定时器赋初值,定时器每溢出一次,驱动蜂鸣器的引脚电平就取反一次,产生相应频率的方波,即音调;设好键值与数码管段码表的对应关系,键按下时,数码管显示对应音调。 一首音乐储存在一个表中,表中的数据是音调与节拍,单片机读取音符的音调与节拍,根据音调赋予定时器初值,根据节拍决定定时器工作的时间,也就是蜂鸣器响的时间,一个接一个地读取音符,即可播放一首歌曲。 关键字:单片机电子琴蜂鸣器 1.设计任务与要求 电子琴设有8个按键,其中7个作为音符输入,另外1个作为模式转换按键,实现用户作曲。7个按键分别代表7个音符,包括中音段的全部音符。通过软硬件设计,模式转换按键触发外部中断,中断使程序跳转,实现模式转换,启动电子琴。然后通过查询电子琴所按下的按键,读取电子琴输入状态,跳转到对应的程序人口,实现自编歌曲。当需要取消电子琴编曲功能时,再次按下模式转换按键引起外部中断.即可退出电子琴功能而返回到原来音乐播放处。

2.方案论证 2.1单片机 方案一:AT89C51是美国ATMEL公司生产的低电压,高性能CMOS8位单片机,片内含4k bytes的可反复擦写的只读程序存储器(PEROM)和128 bytes的随机存取数据存储器(RAM),器件采用ATMEL公司的高密度、非易失性存储技术生产,兼容标准MCS-51指令系统,片内置通用8位中央处理器(CPU)和Flash存储单元,功能强大AT89C51单片机可为您提供许多高性价比的应用场合,可灵活应用于各种控制领域。 方案二:采用凌阳公司的SPCE061A 单片机作为控制器的方案。该单片机I/O资源丰富,并集成了语音功能。它整合了多个常用的功能模块,让我们在进行系统开发的时候不用外加过多的硬件就可方便的完成一个系统的设计,这就是人们常说的 SoC(System on chip)技术。耗电少,可以满足很多手提设备、掌上设备低能耗的需求,低能耗也是电子技术一直在追求的一个目标。但其价格较高。 方案三:TI公司的MSP430系列是一个特别强调超低功耗的单片机品种很适合应用于采用电池供电的长时间工作场合在这个系列中有很多个型号它们是由一些基本功能模块按不同的应用目标组合而成MSP430系列的CPU采用16位精简指令系统,集成有16位寄存器和常数发生器发挥了最高的代码效率它采用数字控制振荡器DCO使得从低功耗模式到唤醒模式的转换时间小于 6 μs. 其中

单片机应用实例报告

单片机应用实例报告 零.序 这个学期一开始便接触了《单片微型计算机原理与接口技术》,听说是《微型计算机控制技术实用教程》的基础,对于工科的我来说学以致用无非是一切的一切,虽然还是个该领域的菜鸟,但是单片机之于自动化的意义不言而喻,对于这篇论文,以下开始展开,不足之处谅解。 一.概述 单片机是一种集成在电路芯片,是采用超大规模集成电路技术把具有数据处理能力的中央处理器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.在智能仪器仪表上的应用 单片机具有体积小、功耗低、控制功能强、扩展灵活、微型化和使用方便等优点,广泛应用于仪器仪表中,结合不同类型的传感器,可实现诸如电压、功率、

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