51单片机c语言KeilC51全集
KEIL C51 中 C语言加入汇编语言的使用方法
KEIL C51 中C语言加入汇编语言的使用方法
51单片机2008-06-03 18:20:42 阅读22 评论0字号:大中小
1.通过使用预处理指令#asm 和#endasm来使用汇编语言。
用户编写的汇编语言可以紧跟在#asm之后,而在#endasm之前结束。
如下所示:
#asm
/*汇编源程序*/
#endasm
在#asm和#endasm之间的语句将作为汇编语言的语句输出到由编译器产生的汇编语言文件中。
2.通过使用预处理指令# pragma asm和函数_asm()来使用汇编语言。
在程序的开头加上预处理指令#pragma asm,在该预处理指令之前只能有注释和其它预处理指令。
_asm()函数可按以下方式使用。
_asm(汇编语言字符串)
在汇编语言字符串中,可以通过回车和换行符把各个语句分开。
在C语言中使用汇编语言,可以操作C语言中的全局变量或完成用C语言难于完成的功能,但要注意以下几点:
①#asm不允许嵌套使用。
②当使用asm语句时,编译系统并不输出目标模块,而只输出汇编源文件。
③ _asm只能用小写字母,如果写成大写,就作为普通变量。
④#asm#endasm和_asm只能用在函数内。
单片机Keil C51编程入门(49页)
平凡单片机工作室 Copyright 2003 pingfan's mcustudio All rights Reserved 作者:周坚 dddl.c 单灯点亮程序 *************************************************/
本书共分六章,每章一个专题,以一些待完成的任务为中心,围绕该任务介绍 C 语言 的一些知识,每一个任务都是可以独立完成的,每完成一个任务,都能掌握一定的知识,等 到所有的任务都完成后,即可以完成 C 语言的入门工作。
第 1 章 C 语言概述及其开发环境的建立
学习一种编程语言,最重要的是建立一个练习环境,边学边练才能学好。Keil 软件是目 前最流行开发 80C51 系列单片机的软件,Keil 提供了包括 C 编译器、宏汇编、连接器、库 管理和一个功能强大的仿真调试器等在内的完整开发方案,通过一个集成开发环境 (µVision)将这些部份组合在一起。
如果 P1.0 是高电平,取反后,P1.0 就是低电平,这条指令被反复地执行,接在 P1.0 上灯就
会不断“亮”、“灭”。
该条指令会被反复执行的关键就在于 main 中的第一行程序:for(;;),这里不对此作详细 的介绍,读者暂时只要知道,这行程序连同其后的一对大括号“{}”构成了一个无限循环语
C51单片机教程-PPT精品文档24页
26.09.2019
例說89S51-C語言89S51-C语言
2-10
yiher
成功完成生成
26.09.2019
例說89S51-C語言89S51-C语言
2-11
yiher
确定对话框
26.09.2019
例說89S51-C語言89S51-C语言
2-12
yiher
调试/仿真工具栏
26.09.2019
例說89S51-C語言89S51-C语言
yiher
Keil C基本操作
第二章
26.09.2019
例說89S51-C語言89S51-C语言
2-1
yiher
本章内容
26.09.2019
例說89S51-C語言89S51-C语言
2-2
yiher
Keil μVision 3 窗口
26.09.2019
例說89S51-C語言89S51-C语言
2-3
2-13
yiher
调试/仿真状态下 的 Peripherals菜单
26.09.2019
例說89S51-C語言89S51-C语言
2-14
yiher
中断系统对话框
26.09.2019
例說89S51-C語言89S51-C语言
2-15
yiher
输入/输出口菜单
26.09.2019
例說89S51-C語言89S51-C语言
2-22
Keil C基本操作
Bye Bye…
26.09.2019
例說89S51-C語言
2-23
谢谢!
xiexie!
yiher
小提示
26.09.2019
C语言中KeilC51库函数大全
Keil C51库函数参考C51强大功能及其高效率的重要体现之一在于其丰富的可直接调用的库函数,多使用库函数使程序代码简单,结构清晰,易于调试和维护,下面介绍C51的库函数系统。
第一节本征库函数(intrinsic routin e s)和非本征证库函数C51提供的本征函数是指编译时直接将固定的代码插入当前行,而不是用AC ALL和L CALL语句来实现,这样就大大提供了函数访问的效率,而非本征函数则必须由A CALL及LCALL调用。
C51的本征库函数只有9个,数目虽少,但都非常有用,列如下:_crol_,_cror_:将char型变量循环向左(右)移动指定位数后返回_iror_,_irol_:将int型变量循环向左(右)移动指定位数后返回_lrol_,_lror_:将long型变量循环向左(右)移动指定位数后返回_nop_:相当于插入N OP_testb it_:相当于JBC bitvar测试该位变量并跳转同时清除。
_chkfl oat_:测试并返回源点数状态。
使用时,必须包含#incluc le <intrin s.h>一行。
如不说明,下面谈到的库函数均指非本征库函数。
第二节几类重要库函数1. 专用寄存器i nclud e文件例如8031、8051均为REG51.h其中包括了所有8051的SFR及其位定义,一般系统都必须包括本文件。
2. 绝对地址in clude文件abs acc.h该文件中实际只定义了几个宏,以确定各存储空间的绝对地址。
3. 动态内存分配函数,位于stdl ib.h中4. 缓冲区处理函数位于“string.h”中其中包括拷贝比较移动等函数如:memccp y memchr memcmp memcpy memmov e memset这样很方便地对缓冲区进行处理。
keil C51入门教程
第三章 C51语言作者:彭保基 西安交通大学 电信学院 电子2002级 版本:V1.1 写作时间:2004年12月---2005年3月本章主要介绍在Keil 的集成环境下用C 语言编程,并对C51语言与标准的C 语言的异同进行比较。
由于篇幅有限并考虑到读者大部分已经学过标准的C 语言,不再对C 语言进行深入的讲解;如果读者想深入了解和掌握C 语言,则可查阅和参考其他相关资料。
第一节 C51简介汇编语言是编写单片机程序的常用语言之一,很多老的单片机开发者使用汇编语言已经成为了一种习惯;汇编语言编写的程序所生成的代码效率很高,能直接操作硬件,指令的执行速度快。
但其指令系统的固有格式受硬件结构的限制很大,且难于编写与调试,可移植性也差。
随着单片机硬件性能的提高,其工作速度越来越快,因此在编写单片机应用系统程序时,更着重于程序本身的编写效率。
与汇编语言相比,C 语言在功能、结构、可读性和可维护性上有明显的优势,因而易学易用;在开发大型软件时更能体现其高级语言的优势。
因此,近些年来越来越多地人喜欢用C 语言来编写单片机的应用程序。
本章所说的C51语言就是标准C 语言的变种,是标准C 语言的扩展;关于两者的区别,将在下一节中详细的介绍。
第二节 C51与ANSI C 的比较Keil C51编译器是一个完全支持ANSI 标准C 语言的编译器,除了少数关键的地方之外,Keil C51和标准ANSI C 语言是基本类似的;但由于51单片机的特殊性,Keil C51在标准C 语言基础上进行了扩展,使其能够更有效地利用单片机各种有限的资源。
深入理解和掌握C51对标准C 语言的扩展,是学好C51语言的关键。
一、 Keil C51扩展关键字关键字 用 途 说 明bit 声明一个位标量或位类型的函数sbit 位标量声明声明一个可位寻址变量 Sfr 声明一个特殊功能寄存器 Sfr16 特殊功能寄存器声明声明一个16位的特殊功能寄存器 data 直接寻址的内部数据存储器 bdata可位寻址的内部数据存储器idata 间接寻址的内部数据存储器 pdata 分页寻址的外部数据存储器xdata 外部数据存储器 code 存储器类型说明 程序存储器interrupt 中断函数说明 定义一个中断函数 reentrant 再入函数说明 定义一个再入函数 using 寄存器组定义定义芯片的工作寄存器_at_ 绝对定位_task_ alien small compact large存储模式附表3- C51编译器的扩展关键字二、 数据类型Keil C51编译器支持下表列出的数据类型。
(完整版)Keilc51常用库函数汇总参考
Keil c51函数参考一、数学函数〈math.h >(1)cabs原型:char cabs(char val);功能:cabs函数取val的绝对值。
参数:一字节数val.返回:cabs返回val的绝对值。
(2)abs原型:Int abs(int val);功能:求绝对值参数:val整型数返回:val的绝对值(3)labs原型:long labs(long val);功能:labs函数确定长整数val的绝对值.返回:val的绝对值。
(4)fabs原型:float fabs(float val);功能:fabs函数确定浮点数val的绝对值.参数:返回:fabs返回val的绝对值。
(5)sqrt原型:float sprt(float x);功能:sqrt函数计算x的平方根。
返回:sqrt函数返回x的正平方根。
(6)exp原型:float exp(float x);功能:exp函数计算自然对数中e的x次幂。
e≈2。
71828182845953581496,是无限循环小数。
返回:e x的值.(7)log原型:float log(float val);功能:log函数计算浮点数val的自然对数。
自然对数基数为e。
返回:val的浮点自然对数。
(8)log10原型:float log10(float val);功能:logl0函数计算浮点数val的常用对数.常用对数为基数10。
返回:val的浮点常用对数。
(9)sin参数:x必须在—65535~65535之间,或产生一个NaN错误。
返回:sin函数返回x的正弦.(10)cos原型:float cos(float x);功能:COS函数计算浮点数X的余弦.参数:X的值必须在-65535~65535之间,或产生一个NaN错误。
返回:COS函数返回X的余弦。
(11)tan原型:float tan(float x);功能:tan函数计算浮点数x的正切值.参数:x必须在—65535~65535之间,或错误值NaN.返回:tan函数返回x的正切。
C语言中KeilC51库函数大全
C51强大功能及其高效率的重要体现之一在于其丰富的可直接调用的库函数,多使用库函数使程序代码简单,结构清晰,易于调试和维护,下面介绍C51的库函数系统。
第一节本征库函数(i n t r i n s i c r o u t i n es)和非本征证库函数C51提供的本征函数是指编译时直接将固定的代码插入当前行,而不是用ACALL 和LCALL语句来实现,这样就大大提供了函数访问的效率,而非本征函数则必须由ACALL及LCALL调用。
C51的本征库函数只有9个,数目虽少,但都非常有用,列如下:_crol_,_cror_:将char型变量循环向左(右)移动指定位数后返回_iror_,_irol_:将int型变量循环向左(右)移动指定位数后返回_lrol_,_lror_:将long型变量循环向左(右)移动指定位数后返回_nop_:相当于插入NOP_testbit_:相当于JBC bitvar测试该位变量并跳转同时清除。
_chkfloat_:测试并返回源点数状态。
使用时,必须包含#inclucle <>一行。
如不说明,下面谈到的库函数均指非本征库函数。
第二节几类重要库函数1. 专用寄存器include文件例如8031、8051均为其中包括了所有8051的SFR及其位定义,一般系统都必须包括本文件。
2. 绝对地址include文件该文件中实际只定义了几个宏,以确定各存储空间的绝对地址。
3. 动态内存分配函数,位于中4. 缓冲区处理函数位于“”中其中包括拷贝比较移动等函数如:memccpy memchr memcmp memcpy memmove memset这样很方便地对缓冲区进行处理。
5. 输入输出流函数,位于“”中流函数通8051的串口或用户定义的I/O口读写数据,缺省为8051串口,如要修改,比如改为LCD显示,可修改lib目录中的及源文件,然后在库中替换它们即可。
第三节K ei l C51库函数原型列表1.bit isalnum(char c);bit isalpha(char c);bit iscntrl(char c);bit isdigit(char c);bit isgraph(char c);bit islower(char c);bit isprint(char c);bit ispunct(char c);bit isspace(char c);bit isupper(char c);bit isxdigit(char c);bit toascii(char c);bit toint(char c);char tolower(char c);char __tolower(char c);char toupper(char c);char __toupper(char c);2.unsigned char _crol_(unsigned char c,unsigned char b);unsigned char _cror_(unsigned char c,unsigned char b);unsigned char _chkfloat_(float ual);unsigned int _irol_(unsigned int i,unsigned char b);unsigned int _iror_(unsigned int i,unsigned char b);unsigned long _irol_(unsigned long l,unsigned char b);unsigned long _iror_(unsigned long L,unsigned char b);void _nop_(void);bit _testbit_(bit b);3.char getchar(void);char _getkey(void);char *gets(char * string,int len);int printf(const char * fmtstr[,argument]…);char putchar(char c);int puts (const char * string);int scanf(const char * fmtstr.[,argument]…);int sprintf(char * buffer,const char *fmtstr[;argument]);int sscanf(char *buffer,const char * fmtstr[,argument]);char ungetchar(char c);void vprintf (const char *fmtstr,char * argptr);void vsprintf(char *buffer,const char * fmtstr,char * argptr);4.float atof(void * string);int atoi(void * string);long atol(void * string);void * calloc(unsigned int num,unsigned int len);void free(void xdata *p);void init_mempool(void *data *p,unsigned int size);void *malloc (unsigned int size);int rand(void);void *realloc (void xdata *p,unsigned int size);void srand (int seed);5.void *memccpy (void *dest,void *src,char c,int len);void *memchr (void *buf,char c,int len);char memcmp(void *buf1,void *buf2,int len);void *memcopy (void *dest,void *SRC,int len);void *memmove (void *dest,void *src,int len);void *memset (void *buf,char c,int len);char *strcat (char *dest,char *src);char *strchr (const char *string,char c);char strcmp (char *string1,char *string2);char *strcpy (char *dest,char *src);int strcspn(char *src,char * set);int strlen (char *src);char *strncat (char 8dest,char *src,int len);char strncmp(char *string1,char *string2,int len);char strncpy (char *dest,char *src,int len);char *strpbrk (char *string,char *set);int strpos (const char *string,char c);char *strrchr (const char *string,char c);char *strrpbrk (char *string,char *set);int strrpos (const char *string,char c);int strspn(char *string,char *set);系统分类:用户分类:标签:无标签来源:整理阅读全文(121) | 回复(0)发表于2009/6/23 13:41:24Hello位于\C51\excmples\Hello\目录,其功能是向串口输出“Hello,world”整个程序如下:#pragma DB OE CD#indule <>#include<>void main(void){SCOn=0x50;TMOD=0x20TH1=0xf3;Tri=1;TI=1;printf(“Hello,world \n”);while(1) { }}第一节u V i s i o n f o r W i n d o w s的使用步骤(1) file_new新建一个文件,输入如上内容或直接用目录下源文件。
C51单片机C语言程序100例_Keil(可编辑修改word版)
目录目录 (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实例40:宏定义应用举例2. (30)实例41:宏定义应用举例3. (30)中断、定时器************************************************ (31)实例42:用定时器T0 查询方式P2 口8 位控制LED 闪烁 (31)实例43:用定时器T1 查询方式控制单片机发出1KHz 音频 (31)实例44:将计数器T0 计数的结果送P1 口8 位LED 显示 (32)实例45:用定时器T0 的中断控制1 位LED 闪烁 (33)实例46:用定时器T0 的中断实现长时间定时 (34)实例47:用定时器T1 中断控制两个LED 以不同周期闪烁 (34)实例48:用计数器T1 的中断控制蜂鸣器发出1KHz 音频 (36)实例49:用定时器T0 的中断实现"渴望"主题曲的播放 (36)实例50-1:输出50 个矩形脉冲 (39)实例50-2:计数器T0 统计外部脉冲数 (40)实例51-2:定时器T0 的模式2 测量正脉冲宽度 (40)实例52:用定时器T0 控制输出高低宽度不同的矩形波 (41)实例53:用外中断0 的中断方式进行数据采集 (42)实例54-1:输出负脉宽为200 微秒的方波 (43)实例54-2:测量负脉冲宽度 (43)实例55:方式0 控制流水灯循环点亮 (44)实例56-1:数据发送程序 (45)实例56-2:数据接收程序 (47)实例57-1:数据发送程序 (47)实例57-2:数据接收程序 (49)实例58:单片机向PC 发送数据 (50)实例59:单片机接收PC 发出的数据 (51)*********************************数码管显示 (52)实例60:用LED 数码显示数字5. (52)实例61:用LED 数码显示器循环显示数字0~9. (52)实例62:用数码管慢速动态扫描显示数字"1234". (53)实例63:用LED 数码显示器伪静态显示数字1234. (54)实例64:用数码管显示动态检测结果 (54)实例65:数码秒表设计 (56)实例66:数码时钟设计 (58)实例67:用LED 数码管显示计数器T0 的计数值 (62)实例68:静态显示数字“59”. (63)*****************************键盘控制2 / 192*****************************************************/ (63)实例69:无软件消抖的独立式键盘输入实验 (64)实例70:软件消抖的独立式键盘输入实验 (64)实例71:CPU 控制的独立式键盘扫描实验 (65)实例72:定时器中断控制的独立式键盘扫描实验 (68)实例73:独立式键盘控制的4 级变速流水灯 (71)实例74:独立式键盘的按键功能扩展:"以一当四". (73)实例75:独立式键盘调时的数码时钟实验 (75)实例76:独立式键盘控制步进电机实验 (79)实例77:矩阵式键盘按键值的数码管显示实验 (82)//实例78:矩阵式键盘按键音 (85)实例79:简易电子琴 (86)实例80:矩阵式键盘实现的电子密码锁 (92)**************************************************************************液晶显示LCD*********液晶显示LCD*****液晶显示LCD************************************************************************/ (95)实例81:用LCD 显示字符'A' (96)实例82:用LCD 循环右移显示"WelcometoChina" (99)实例83:用LCD 显示适时检测结果 (102)实例84:液晶时钟设计 (106)******************************************一些芯片的使用*****24c02 ........ DS18B20 X5045 ADC0832 DAC0832 DS1302红外遥控**********************************************/. (112)实例85:将数据"0x0f"写入AT24C02 再读出送P1 口显示 (112)实例86:将按键次数写入AT24C02,再读出并用1602LCD 显示 (117)实例87:对I2C 总线上挂接多个AT24C02 的读写操作 (124)实例88:基于AT24C02 的多机通信读取程序 (129)实例88:基于AT24C02 的多机通信写入程序 (133)实例90:DS18B20 温度检测及其液晶显示 (144)实例91:将数据"0xaa"写入X5045 再读出送P1 口显示 (153)实例92:将流水灯控制码写入X5045 并读出送P1 口显示 (157)实例93:对SPI 总线上挂接多个X5045 的读写操作 (161)实例94:基于ADC0832 的数字电压表 (165)实例95:用DAC0832 产生锯齿波电压 (171)实例96:用P1 口显示红外遥控器的按键值 (171)实例97:用红外遥控器控制继电器 (174)实例98:基于DS1302 的日历时钟 (177)实例99:单片机数据发送程序 (185)实例100:电机转速表设计 (186)模拟霍尔脉冲 (192)/********************************************************* ***函数的使用和熟悉***************************************************************///实例3:用单片机控制第一个灯亮#include<reg51.h> //包含51 单片机寄存器定义的头文件voidmain(void){P1=0xfe;//P1=11111110B,即P1.0 输出低电平}// 4//实例4:用单片机控制一个灯闪烁:认识单片机的工作频率#include<reg51.h> //包含单片机寄存器的头文件/****************************************函数功能:延时一段时间*****************************************/voiddelay(void) //两个void 意思分别为无需返回值,没有参数传递{unsignedinti; //定义无符号整数,最大取值范围65535for(i=0;i<20000;i++) //做20000 次空循环; //什么也不做,等待一个机器周期}/*******************************************************函数功能:主函数(C 语言规定必须有也只能有1 个主函数)********************************************************/voidmain(void){while(1) //无限循环{P1=0xfe; //P1=11111110B,P1.0 输出低电平delay(); //延时一段时间P1=0xff; //P1=11111111B,P1.0 输出高电平delay(); //延时一段时间// 5 P1 P0 P2 P3 I/O//实例 5:将#include<reg51.h> P1 口状态分别送入 P0、P2、P3 口:认识 I/O 口 的引脚功能//包含单片机寄存器的头文件/*******************************************************函数功能:主函数 (C 语言规定必须有也只能有1 个主函数)********************************************************/voidmain(void){while(1)//无限循环 {P1=0xff;// P1=11111111B,熄灭LED P0=P1;// 将 P1 口状态送入P0 口P2=P1;// 将 P1 口状态送入P2 口P3=P1;// 将 P1 口状态送入P3 口}}//实例 6:使用 P3 口流水点亮 8 位 LED#include<reg51.h> //包含单片机寄存器的头文件/****************************************函数功能:延时一段时间*****************************************/voiddelay(void){unsignedchari,j;for(i=0;i<250;i++)for(j=0;j<250;j++);}/*******************************************************函数功能:主函数********************************************************/voidmain(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<reg51.h> //包含单片机寄存器的头文件sfrx=0xb0; //P3 口在存储器中的地址是b0H,通过sfr 可定义8051 内核单片机//的所有内部8 位特殊功能寄存器,对地址x 的操作也就是对P1 口的操作/****************************************函数功能:延时一段时间*****************************************/voiddelay(void){unsignedchari,j;for(i=0;i<250;i++)for(j=0;j<250;j++); //利用循环等待若干机器周期,从而延时一段时间}/*****************************************函数功能:主函数******************************************/voidmain(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<reg51.h> //包含单片机寄存器的头文件/******************************************************函数功能:用整形数据延时一段时间******************************************************/voidint_delay(void)//延时一段较长的时间{unsignedintm; //定义无符号整形变量,双字节数据,值域为0~65535 for(m=0;m<36000;m++); //空操作}/******************************************************函数功能:用字符型数据延时一段时间******************************************************/voidchar_delay(void)//延时一段较短的时间{unsignedchari,j; //定义无符号字符型变量,单字节数据,值域0~255 for(i=0;i<200;i++)for(j=0;j<180;j++); //空操作}/******************************************************函数功能:主函数******************************************************/voidmain(void){unsignedchari;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<reg51.h>voidmain(void){unsignedcharm,n;m=43; //即十进制数2x16+11=43n=60;P1=m+n; //即十进制数3x16+12=60//P1=103=01100111B,结果P1.3、P1.4、P1.7 口的灯被点亮P0=n-m; //P0=17=00010001B,结果P0.0、P0.4 的灯被熄灭}//实例10:用P0、P1 口显示乘法运算结果#include<reg51.h> //包含单片机寄存器的头文件voidmain(void){unsignedcharm,n;unsignedints;m=64;n=71;s=m*n; //s=64*71=4544,需要16 位二进制数表示,高8 位送P1 口,低8 位送P0 口/256除以256 的商256 的余数//由于4544=17*256+192=H3*16*16*16+H2*16*16+H1*16+H0 //两边同除以256,可得17+192/256=H3*16+H2+ H1*16+H0)//因此,高8 位16 进制数H3*16+H2 必然等于17,即4544 //低8 位16 进制数H1*16+H0 必然等于192,即4544 除以P1=s/256; //高8 位送P1 口,P1=17=11H=00010001B,P1.0 和P1.4 口灭,其余亮P0=s%256; //低8 位送P0 口,P3=192=c0H=11000000B,P3.1,P3.6,P3.7 口灭,其余亮}//实例11:用P1、P0 口显示除法运算结果#include<reg51.h> //包含单片机寄存器的头文件voidmain(void){P1=36/5; //求整数P0=((36%5)*10)/5;//求小数while(1); //无限循环防止程序“跑飞”}//实例12:用自增运算控制P0 口8 位LED 流水花样#include<reg51.h> //包含单片机寄存器的头文件/******************************************************函数功能:延时一段时间******************************************************/ voiddelay(void){unsignedinti;for(i=0;i<20000;i++);}/******************************************************函数功能:主函数******************************************************/voidmain(void){unsignedchari;for(i=0;i<255;i++) //注意i 的值不能超过255{P0=i; //将i 的值送P0 口delay();//调用延时函数}}//实例13:用P0 口显示逻辑"与"运算结果#include<reg51.h> //包含单片机寄存器的头文件voidmain(void){P0=(4>0)&&(9>0xab);//将逻辑运算结果送P0 口while(1); //设置无限循环,防止程序“跑飞”}// 14 P0//实例14:用P0 口显示条件运算结果#include<reg51.h> //包含单片机寄存器的头文件voidmain(void){P0=(8>4)?8:4;//将条件运算结果送P0 口,P0=8=00001000Bwhile(1); //设置无限循环,防止程序“跑飞”}//实例15:用P0 口显示按位"异或"运算结果#include<reg51.h> //包含单片机寄存器的头文件voidmain(void){P0=0xa2^0x3c;//将条件运算结果送P0 口,P0=8=00001000Bwhile(1); //设置无限循环,防止程序“跑飞”}// 16 P0//实例16:用P0 显示左移运算结果#include<reg51.h> //包含单片机寄存器的头文件voidmain(void){P0=0x3b<<2;//将左移运算结果送P0 口,P0=11101100B=0xec while(1); //无限循环,防止程序“跑飞”}#include<reg51.h> //实例17:"万能逻辑电路"实验//包含单片机寄存器的头文件sbitX=P1^5; sbitY=P1^6; sbitZ=P1^7; voidmain(void) { //将X 位定义为//将Y 位定义为//将Z 位定义为P1.5P1.6P1.7while(1){F=((~X)&Y)|Z;//将逻辑运算结果赋给F;}}//实例18:用右移运算流水点亮P1 口8 位LED #include<reg51.h> //包含单片机寄存器的头文件/*****************************函数功能:延时一段时间*****************************/voiddelay(void){unsignedintn;for(n=0;n<30000;n++);}/*****************************函数功能:主函数*****************************/voidmain(void){unsignedchari;while(1){P1=0xff;delay();for(i=0;i<8;i++)//设置循环次数为8{P1=P1>>1; //每次循环P1 的各二进位右移1 位,高位补0delay(); //调用延时函数}}}// 19 iff P0 8 LED//实例19:用iff 语句控制P0 口8 位LED 的流水方向#include<reg51.h> //包含单片机寄存器的头文件sbitS1=P1^4; //将S1 位定义为P1.4sbitS2=P1^5; //将S2 位定义为P1.5/*****************************函数功能:主函数*****************************/voidmain(void){while(1){if(S1==0) //如果按键S1 按下P0=0x0f; //P0 口高四位LED 点亮if(S2==0) //如果按键S2 按下P0=0xf0; //P0 口低四位LED 点亮}}//实例20:用swtich 语句的控制P0 口8 位LED 的点亮状态#include<reg51.h> //包含单片机寄存器的头文件sbitS1=P1^4; //将S1 位定义为P1.4/*****************************函数功能:延时一段时间*****************************/voiddelay(void){unsignedintn;for(n=0;n<10000;n++);}/*****************************函数功能:主函数*****************************/voidmain(void){unsignedchari;i=0;while(1){//将i 初始化为0if(S1==0){//如果S1 键按下delay(); //延时一段时间if(S1==0)//如果再次检测到S1 键按下i++; //i 自增1if(i==9) //如果i=9,重新将其置为1i=1;}switch(i) {} } }//使用多分支选择语句case 1:P0=0xfe; //第一个LED 亮break;case 2:P0=0xfd; //第二个LED 亮break;case 3:P0=0xfb; //第三个LED 亮break;case 4:P0=0xf7; //第四个LED 亮break;case 5:P0=0xef; //第五个LED 亮break;case 6:P0=0xdf; //第六个LED 亮break;case 7:P0=0xbf; //第七个LED 亮break;case 8:P0=0x7f; //第八个LED 亮break;default: //缺省值,关闭所有LED P0=0xff;// 21 for//实例21:用for 语句控制蜂鸣器鸣笛次数#include<reg51.h> //包含单片机寄存器的头文件sbitsound=P3^7; //将sound 位定义为P3.7/****************************************函数功能:延时形成1600Hz 音频****************************************/ voiddelay1600(void){unsignedcharn;for(n=0;n<100;n++);}/**************************************** 函数功能:延时形成800Hz 音频****************************************/ voiddelay800(void){unsignedcharn;for(n=0;n<200;n++);}/**************************************** 函数功能:主函数****************************************/ voidmain(void){unsignedinti;while(1){for(i=0;i<830;i++){sound=0; //P3.7 输出低电平delay1600();sound=1; //P3.7 输出高电平delay1600();}for(i=0;i<200;i++){sound=0; //P3.7 输出低电平delay800();sound=1; //P3.7 输出高电平delay800();}}}//实例22:用whille 语句控制LED#include<reg51.h> //包含单片机寄存器的头文件/****************************************函数功能:延时约60ms (3*100*200=60000μs)****************************************/voiddelay60ms(void){unsignedcharm,n;for(m=0;m<100;m++)for(n=0;n<200;n++);}/****************************************函数功能:主函数****************************************/voidmain(void){unsignedchari;while(1) //无限循环{i=0; //将i 初始化为0while(i<0xff) //当i 小于0xff(255)时执行循环体{P0=i; //将i 送P0 口显示delay60ms();//延时i++; //i 自增1}}}//实例23:用do-whiile 语句控制P0 口8 位LED 流水点亮#include<reg51.h> //包含单片机寄存器的头文件/****************************************函数功能:延时约60ms (3*100*200=60000μs)****************************************/voiddelay60ms(void){unsignedcharm,n;for(m=0;m<100;m++)for(n=0;n<200;n++);}/****************************************函数功能:主函数****************************************/voidmain(void){do{P0=0xfe; //第一个LED 亮delay60ms();P0=0xfd; //第二个LED 亮delay60ms();P0=0xfb; //第三个LED 亮delay60ms();P0=0xf7; //第四个LED 亮delay60ms();P0=0xef; //第五个LED 亮delay60ms();P0=0xdf; //第六个LED 亮delay60ms();delay60ms();P0=0xbf; //第七个LED 亮delay60ms();P0=0x7f; //第八个LED 亮delay60ms();}while(1); //无限循环,使8 位LED 循环流水点亮}//实例24:用字符型数组控制P0 口8 位LED 流水点亮#include<reg51.h> //包含单片机寄存器的头文件/****************************************函数功能:延时约60ms (3*100*200=60000μs)****************************************/voiddelay60ms(void){unsignedcharm,n;for(m=0;m<100;m++)for(n=0;n<200;n++);}/****************************************函数功能:主函数****************************************/voidmain(void){unsignedchari;unsignedcharcode Tab[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};//定义无符号字符型数组while(1){for(i=0;i<8;i++){P0=Tab[i];//依次引用数组元素,并将其送P0 口显示delay60ms();//调用延时函数}}}// 25 P0//实例25:用P0 口显示字符串常量#include<reg51.h> //包含单片机寄存器的头文件/*************************************************函数功能:延时约150ms (3*200*250=150000μs=150ms*************************************************/voiddelay150ms(void){unsignedcharm,n;for(m=0;m<200;m++)for(n=0;n<250;n++);}/*************************************************函数功能:主函数*************************************************/voidmain(void){unsignedcharstr[]={"Now,Temperature is:"}; //将字符串赋给字符型全部元素赋值while(1){i=0; //将i 初始化为0,从第一个元素开始显示while(str[i]!='\0') //只要没有显示到结束标志'\0'{P0=str[i]; //将第i 个字符送到P0 口显示delay150ms(); //调用150ms 延时函数i++; //指向下一个待显字符}}}//实例26:用P0#include<reg51.h>voidmain(void){口显示指针运算结果unsignedchar*p1,*p2; //定义无符号字符型指针变量p1,p2 unsignedchari,j; //定义无符号字符型数据i=25; j=15;p1=&i ;p2=&j ; //给i 赋初值25//使指针变量指向i//使指针变量指向j,对指针初始化,对指针初始化P0=*p1+*p2; //*p1+*p2 相当于i+j,所以P0=25+15=40=0x28//则P0=00101000B,结果P0.3、P0.5 引脚LED 熄灭,其余点亮while(1); //无限循环,防止程序“跑飞”}// 27 P0 8 LED//实例27:用指针数组控制P0 口8 位LED 流水点亮#include<reg51.h>/*************************************************函数功能:延时约150ms (3*200*250=150000μs=150ms*************************************************/voiddelay150ms(void){for(n=0;n<250;n++);}/*************************************************函数功能:主函数*************************************************/voidmain(void){unsignedcharcode Tab[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f}; unsignedchar*p[]={&Tab[0],&Tab[1],&Tab[2],&Tab[3],&Tab[4],&Tab[5],&Tab[6],&Tab[7]};unsignedchari; //定义无符号字符型数据while(1){for(i=0;i<8;i++){P0=*p[i];delay150ms();}}}// 28 P0 8 LED//实例28:用数组的指针控制P0 口8 位LED 流水点亮#include<reg51.h>/*************************************************函数功能:延时约150ms (3*200*250=150000μs=150ms*************************************************/voiddelay150ms(void){unsignedcharm,n;for(m=0;m<200;m++)for(n=0;n<250;n++);}/*************************************************函数功能:主函数*************************************************/voidmain(void){unsignedchari;unsignedcharTab[ ]={0xFF,0xFE,0xFD,0xFB,0xF7,0xEF,0xDF,0xBF,0x7F,0xBF,0xDF,0xEF,0xF7,0xFB,0xFD,0xFE,0xFE,0xFC,0xFB,0xF0,0xE0,0xC0,0x80,0x00,0xE7,0xDB,0xBD,0x7E,0x3C,0x18,0x00,0x81,0xC3,0xE7,0x7E,0xBD,0xDB,0xE7,0xBD,0xDB};//流水灯控制码unsignedchar*p; //定义无符号字符型指针p=Tab; //将数组首地址存入指针pwhile(1){for(i=0;i<32;i++) //共32 个流水灯控制码{P0=*(p+i); //*(p+i)的值等于a[i]delay150ms(); //调用150ms 延时函数}}}// 29 P0 P1//实例29:用P0 、P1 口显示整型函数返回值#include<reg51.h>/*************************************************函数功能:计算两个无符号整数的和*************************************************/unsignedintsum(inta,intb){unsignedints;s=a+b;return(s);}/*************************************************函数功能:主函数*************************************************/voidmain(void){unsignedz;z=sum(2008,2009);P1=z/256; //取得z 的高8 位P0=z%256; //取得z 的低8 位while(1);}//实例30:用有参函数控制P0 口8 位LED 流水速度#include<reg51.h>/*************************************************函数功能:延时一段时间*************************************************/voiddelay(unsignedcharx){unsignedcharm,n;for(m=0;m<x;m++)for(n=0;n<200;n++);}/*************************************************函数功能:主函数*************************************************/voidmain(void){unsignedchari;unsigned charcodeTab[]={0xFE,0xFD,0xFB,0xF7,0xEF,0xDF,0xBF,0x7F};//流水灯控制码while(1){//快速流水点亮LEDfor(i=0;i<8;i++)//共8 个流水灯控制码{P0=Tab[i];delay(100); //延时约60ms,(3*100*200=60000μs)}//慢速流水点亮LEDfor(i=0;i<8;i++)//共8 个流水灯控制码{P0=Tab[i];delay(250); //延时约150ms,(3*250*200=150000μs)}}}22 / 192// 31//实例31:用数组作函数参数控制流水花样#include<reg51.h>/*************************************************函数功能:延时约150ms*************************************************/voiddelay(void){unsignedcharm,n;for(m=0;m<200;m++)for(n=0;n<250;n++);}/*************************************************函数功能:流水点亮P0 口8 位LED*************************************************/voidled_flow(unsignedchara[8]){unsignedchari;for(i=0;i<8;i++){P0=a[i];delay();}}/*************************************************函数功能:主函数*************************************************/voidmain(void){unsigned charcodeTab[]={0xFE,0xFD,0xFB,0xF7,0xEF,0xDF,0xBF,0x7F};//流水灯控制码led_flow(Tab);}// 32 P0 8 LED//实例32:用指针作函数参数控制P0 口8 位LED 流水点亮/*************************************************函数功能:延时约150ms*************************************************/voiddelay(void){unsignedcharm,n;for(m=0;m<200;m++)for(n=0;n<250;n++);}/*************************************************函数功能:流水点亮P0 口8 位LED*************************************************/voidled_flow(unsignedchar*p) //形参为无符号字符型指针{unsignedchari;while(1){i=0; //将i 置为0,指向数组第一个元素while(*(p+i)!='\0')//只要没有指向数组的结束标志{P0=*(p+i);// 取的指针所指变量(数组元素)的值,送P0 口delay(); //调用延时函数i++; //指向下一个数组元素}}}/*************************************************函数功能:主函数*************************************************/voidmain(void){unsigned charcodeTab[]={0xFE,0xFD,0xFB,0xF7,0xEF,0xDF,0xBF,0x7F,0x7F,0xBF,0xDF,0xEF,0xF7,0xFB,0xFD,0xFE, 0xFF,0xFE,0xFC,0xFB,0xF0,0xE0,0xC0,0x80,0x00,0xE7,0xDB,0xBD,0x7E,0xFF,0xFF,0x3C,0x18,0x0,0x81,0xC3,0xE7,0xFF, 0xFF,0x7E};//流水灯控制码unsignedchar*pointer;224/ 192pointer=Tab;led_flow(pointer);}// 33 P1//实例33:用函数型指针控制P1 口灯花样#include<reg51.h> //包含51 单片机寄存器定义的头文件unsignedcharcode Tab[]={0xFE,0xFD,0xFB,0xF7,0xEF,0xDF,0xBF,0x7F}; //流水灯控制码,该数组被定义为全局变量/************************************************************** 函数功能:延时约150ms**************************************************************/ voiddelay(void){unsignedcharm,n;for(m=0;m<200;m++)for(n=0;n<250;n++);}/************************************************************** 函数功能:流水灯左移**************************************************************/ voidled_flow(void){unsignedchari;for(i=0;i<8;i++) //8 位控制码{P0=Tab[i];delay();}}/************************************************************** 函数功能:主函数**************************************************************/ voidmain(void){void(*p)(void);//定义函数型指针,所指函数无参数,无返回值p=led_flow; //将函数的入口地址赋给函数型指针pwhile(1)(*p)(); //通过函数的指针p 调用函数led_flow()}// 34//实例34:用指针数组作为函数的参数显示多个字符串#include<reg51.h> //包含51 单片机寄存器定义的头文件unsignedcharcode str1[]="Temperature is testedbyDS18B20";//C 语言中,字符串是作为字符数组来处理的unsignedcharcode str2[]="Nowtemperatureis:"; //所以,字符串的名字就是字符串的首地址unsignedcharcode str3[]="The Systerm is designedbyZhangSan"; unsignedcharcode str4[]="The dateis2008-9-30";unsignedchar*p[]={str1,str2,str3,str4};//定义p[4]为指向4 个字符串的字符型指针数组/**************************************************************函数功能:延时约150ms**************************************************************/ voiddelay(void){unsignedcharm,n;for(m=0;m<200;m++)for(n=0;n<250;n++);}/**************************************************************函数功能:流水点亮P0 口8 位LED**************************************************************/ voidled_display(unsignedchar*x[]) //形参必须为指针数组{unsignedchari,j;for(i=0;i<4;i++)//有4 个字符串要显示{j=0; //指向待显字符串的第0 号元素while(*(x[i]+j)!='\0')//只要第i 个字符串的第j 号元素不是结束标志{P0=*(x[i]+j);//取得该元素值送到P0 口显示delay(); //调用延时函数j++; //指向下一个元素}}}/************************************************************** 函数功能:主函数**************************************************************/ voidmain(void){unsignedchari;while(1){for(i=0;i<4;i++)led_display(p);//将指针数组名作实际参数传递}}//实例35:字符函数ctype.h 应用举例#include<reg51.h> //包含51 单片机寄存器定义的头文件#include<ctype.h>voidmain(void){while(1){P3=isalpha('_')?0xf0:0x0f;//条件运算,若'_'是英文字母,P3=0xf0 }}//实例36:内部函数intrins..h 应用举例#include<reg51.h> //包含51 单片机寄存器定义的头文件#include<intrins.h> //包含函数isalpha()声明的头文件/*************************************************函数功能:延时约150ms*************************************************/voiddelay(void){unsignedcharm,n;for(m=0;m<200;m++)for(n=0;n<250;n++);}227/ 192/*************************************************函数功能:主函数*************************************************/ voidmain(void){P3=0xfe; //P3=11111110Bwhile(1){P3=_crol_(P3,1);// 将P3 的二进制位循环左移1 位后再赋给P3 delay(); //调用延时函数}}// 37 stdlib.h//实例37:标准函数stdliib.h 应用举例#include<reg51.h> //包含51 单片机寄存器定义的头文件#include<stdlib.h> //包含函数isalpha()声明的头文件/*************************************************函数功能:延时约150ms*************************************************/ voiddelay(void){unsignedcharm,n;for(m=0;m<200;m++)for(n=0;n<250;n++);}/*************************************************函数功能:主函数*************************************************/ voidmain(void){unsignedchari;while(1){for(i=0;i<10;i++) //产生10 个随机数{P3=rand()/160;//将产生的随机数缩小160 倍后送P3 显示delay();}}}//实例38:字符串函数striing.h 应用举例#include<reg51.h> //包含51 单片机寄存器定义的头文件#include<string.h> //包含函数isalpha()声明的头文件voidmain(void){unsignedcharstr1[]="Now,The temperature is :"; unsignedcharstr2[]="Now,The temperature is 36Centgrade:"; unsignedchari;i=strcmp(str1,str2);//比较两个字符串,并将结果存入iif(i==0) //str1=str2P3=0x00;elseif(i<0) //str1<str2P3=0xf0;else //str1>str2P3=0x0f;while(1); //防止程序“跑飞”}#include<reg51.h> // 39 2 //实例39:宏定义应用举例2 //包含51 单片机寄存器定义的头文件#define F(a,b)(a)+(a)*(b)/256+(b)voidmain(void){//带参数的宏定义,a 和b 为形参unsignedchari,j,k;i=40;j=30;k=20;P3=F(i,j+k);参while(1);}//i 和j+k 分别为实参,宏展开时,实参将替代宏定义中的形//实例40:宏定义应用举例2 #include<AT89X51.h>#include<ctype.h>voidmain(void){P3_0=0; //将P3.0 引脚置低电平,LED 点亮P3_1=0; //将P3.0 引脚置低电平,LED 点亮P3_2=0; //将P3.0 引脚置低电平,LED 点亮P3_3=0; //将P3.0 引脚置低电平,LED 点亮P3_4=1; //将P3.4 引脚置高电平,LED 熄灭P3_5=1; //将P3.5 引脚置高电平,LED 熄灭P3_6=1; //将P3.7 引脚置高电平,LED 熄灭P3_7=1; //将P3.7 引脚置高电平,LED 熄灭while(1);}//实例41:宏定义应用举例3#include<reg51.h >#defineMAX100 voidmain(void) {#if MAX>80P3=0xf0;#elseP3=0x0f;#endif}//包含51 单片机寄存器定义的头文件//将MAX 宏定义为字符串100//如果字符串100 大于80//P3 口低四位LED 点亮//否则,P3 口高四位LED 点亮//结束本次编译/***************************************************** ********** **中断、定时器********中断、定时器************ *********中断、定时器*********中断、定时器******** **** ****************************************************** **///实例42:用定时器T0 查询方式P2 口8 位控制LED 闪烁#include<reg51.h> // 包含51 单片机寄存器定义的头文件/**************************************************************函数功能:主函数**************************************************************/voidmain(void){// EA=1; //开总中断// ET0=1; //定时器T0 中断允许TMOD=0x01; //使用定时器T0 的模式1TH0=(65536-46083)/256; //定时器T0 的高8 位赋初值TL0=(65536-46083)%256; //定时器T0 的高8 位赋初值TR0=1; //启动定时器T0TF0=0;P2=0xff;while(1)//无限循环等待查询{while(TF0==0);TF0=0;P2=~P2;TH0=(65536-46083)/256; //定时器T0 的高8 位赋初值TL0=(65536-46083)%256; //定时器T0 的高8 位赋初值}}//实例43:用定时器T1 查询方式控制单片机发出1KHz 音频/**************************************************************函数功能:主函数**************************************************************/ voidmain(void){// EA=1; //开总中断// ET0=1; //定时器T0 中断允许TMOD=0x10; //使用定时器T1 的模式1TH1=(65536-921)/256; //定时器T1 的高8 位赋初值TL1=(65536-921)%256; //定时器T1 的高8 位赋初值TR1=1; //启动定时器T1TF1=0;while(1)//无限循环等待查询{while(TF1==0);TF1=0;sound=~sound; //将P3.7 引脚输出电平取反TH1=(65536-921)/256; //定时器T0 的高8 位赋初值TL1=(65536-921)%256; //定时器T0 的高8 位赋初值}}// 44 T0 P1 8 LED//实例44:将计数器T0 计数的结果送P1 口8 位LED 显示#include<reg51.h> // 包含51 单片机寄存器定义的头文件sbitS=P3^4; //将S 位定义为P3.4 引脚/**************************************************************函数功能:主函数**************************************************************/ voidmain(void){// EA=1; //开总中断// ET0=1;TMOD=0x02; //定时器T0 中断允许//使用定时器T0 的模式2TH0=256-156; //定时器T0 的高8 位赋初值TL0=256-156; TR0=1; //定时器T0 的高8 位赋初值//启动定时器T0while(1)//无限循环等待查询{。
C51单片机基础学习教程(C语言)
读引脚
图 1.6 P2 口的结构图 P2 口作为普通 I/O 口
CPU 发出控制电平“0” ,使多路开关 MUX 倒向锁存器输出 Q 端,构成一个 准双向口。其功能与 P1 相同。
地址
控制 C
VCC
读锁存器 R
内部总线 写锁存器
D
Q
P2.X
CL 锁存器
1 0 MUX
1 T
P2.X引脚
读引脚
图 1.7 P2 口作为地址总线图 在系统扩展片外程序存储器扩展数据存储器且容量超过 256B 时,CPU 发出控 制电平“1”,使多路开关 MUX 倒内部地址线。
2
误。
读锁存器
地址/数据
控制C &
1
内部总线 写锁存器
D
Q
CL
P0.X 锁存器
_ Q
1 0 MUX
VCC
T1 P0.X引脚
T2
器
地址/数据 1
控制C &
VCC
T1
内部总线
写锁存器
D
Q
P0.X CL 锁存器
_ Q
1 0 MUX
T2
P0.X引脚
第 1 章 初步了解单片机
1.189C51 的引脚封装
总线型
非总线型
图2 89C2051的引脚封装
图1 89C51的引脚封装
1.1 基本的 51 单片机结构
1.2 P0 口的结构
图 1.2 51 单片机结构图
1
下图为 P0 口的某位 P0.n(n=0~7)结构图,它由一个输出锁存器、一个转换开 关 MUX、两个三态输入缓冲器和输出驱动电路及控制电路组成。从图中可以看出 P0 口既可以作为 I/O 用,也可以作为地址/数据线用。
(完整版)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实例40:宏定义应用举例2 (30)实例41:宏定义应用举例3 (30)中断、定时器************************************************ (31)实例42:用定时器T0查询方式P2口8位控制LED闪烁 (31)实例43:用定时器T1查询方式控制单片机发出1KHz音频 (31)实例44:将计数器T0计数的结果送P1口8位LED显示 (32)实例45:用定时器T0的中断控制1位LED闪烁 (33)实例46:用定时器T0的中断实现长时间定时 (34)实例47:用定时器T1中断控制两个LED以不同周期闪烁 (34)实例48:用计数器T1的中断控制蜂鸣器发出1KHz音频 (36)实例49:用定时器T0的中断实现"渴望"主题曲的播放 (36)实例50-1:输出50个矩形脉冲 (39)实例50-2:计数器T0统计外部脉冲数 (40)实例51-2:定时器T0的模式2测量正脉冲宽度 (40)实例52:用定时器T0控制输出高低宽度不同的矩形波 (41)实例53:用外中断0的中断方式进行数据采集 (42)实例54-1:输出负脉宽为200微秒的方波 (43)实例54-2:测量负脉冲宽度 (43)实例55:方式0控制流水灯循环点亮 (44)实例56-1:数据发送程序 (45)实例56-2:数据接收程序 (47)实例57-1:数据发送程序 (47)实例57-2:数据接收程序 (49)实例58:单片机向PC发送数据 (50)实例59:单片机接收PC发出的数据 (51)*********************************数码管显示 (52)实例60:用LED数码显示数字5 (52)实例61:用LED数码显示器循环显示数字0~9 (52)实例62:用数码管慢速动态扫描显示数字"1234" (53)实例63:用LED数码显示器伪静态显示数字1234 (54)实例64:用数码管显示动态检测结果 (54)实例65:数码秒表设计 (56)实例66:数码时钟设计 (58)实例67:用LED数码管显示计数器T0的计数值 (62)实例68:静态显示数字“59” (63)*****************************键盘控制2/192*****************************************************/ (63)实例69:无软件消抖的独立式键盘输入实验 (64)实例70:软件消抖的独立式键盘输入实验 (64)实例71:CPU控制的独立式键盘扫描实验 (65)实例72:定时器中断控制的独立式键盘扫描实验 (68)实例73:独立式键盘控制的4级变速流水灯 (71)实例74:独立式键盘的按键功能扩展:"以一当四" (73)实例75:独立式键盘调时的数码时钟实验 (75)实例76:独立式键盘控制步进电机实验 (79)实例77:矩阵式键盘按键值的数码管显示实验 (82)//实例78:矩阵式键盘按键音 (85)实例79:简易电子琴 (86)实例80:矩阵式键盘实现的电子密码锁 (92)**************************************************************************液晶显示LCD*********液晶显示LCD*****液晶显示LCD************************************************************************/ (95)实例81:用LCD显示字符'A' (96)实例82:用LCD循环右移显示"Welcome to China" (99)实例83:用LCD显示适时检测结果 (102)实例84:液晶时钟设计 (106)******************************************一些芯片的使用*****24c02........ DS18B20X5045ADC0832DAC0832DS1302红外遥控**********************************************/ (112)实例85:将数据"0x0f"写入AT24C02再读出送P1口显示 (112)实例86:将按键次数写入AT24C02,再读出并用1602LCD显示 (117)实例87:对I2C总线上挂接多个AT24C02的读写操作 (124)实例88:基于AT24C02的多机通信读取程序 (129)实例88:基于AT24C02的多机通信写入程序 (133)实例90:DS18B20温度检测及其液晶显示 (144)实例91:将数据"0xaa"写入X5045再读出送P1口显示 (153)实例92:将流水灯控制码写入X5045并读出送P1口显示 (157)实例93:对SPI总线上挂接多个X5045的读写操作 (161)实例94:基于ADC0832的数字电压表 (165)实例95:用DAC0832产生锯齿波电压 (171)实例96:用P1口显示红外遥控器的按键值 (171)实例97:用红外遥控器控制继电器 (174)实例98:基于DS1302的日历时钟 (177)实例99:单片机数据发送程序 (185)实例100:电机转速表设计 (186)模拟霍尔脉冲 (192)/********************************************************* ***函数的使用和熟悉***************************************************************///实例3:用单片机控制第一个灯亮#include<reg51.h>//包含51单片机寄存器定义的头文件void main(void){P1=0xfe;//P1=11111110B,即P1.0输出低电平}//4//实例4:用单片机控制一个灯闪烁:认识单片机的工作频率#include<reg51.h>//包含单片机寄存器的头文件/****************************************函数功能:延时一段时间*****************************************/void delay(void)//两个void意思分别为无需返回值,没有参数传递{unsigned int i;//定义无符号整数,最大取值范围65535for(i=0;i<20000;i++)//做20000次空循环;//什么也不做,等待一个机器周期}/*******************************************************函数功能:主函数(C语言规定必须有也只能有1个主函数)********************************************************/void main(void){while(1)//无限循环{P1=0xfe;//P1=11111110B,P1.0输出低电平delay();//延时一段时间P1=0xff;//P1=11111111B,P1.0输出高电平delay();//延时一段时间// 5 P1 P0 P2 P3 I/O //实例 5:将 #include<reg51.h> P1 口状态分别送入 P0、P2、P3 口:认识 I/O口 的引脚功能//包含单片机寄存器的头文件/*******************************************************函数功能:主函数 (C 语言规定必须有也只能有 1个主函数)********************************************************/ void main(void){while(1) //无限循环{P1=0xff; // P1=1111 1111B,熄灭 LEDP0=P1; // 将 P1 口状态送入 P0 口P2=P1; // 将 P1 口状态送入 P2 口P3=P1; // 将 P1 口状态送入 P3口}}//实例 6:使用 P3 口流水点亮 8 位LED #include<reg51.h> //包含单片机寄存器的头文件/****************************************函数功能:延时一段时间*****************************************/void delay(void){unsigned char i,j;for(i=0;i<250;i++)for(j=0;j<250;j++);}/*******************************************************函数功能:主函数********************************************************/ voidmain(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<reg51.h>//包含单片机寄存器的头文件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<reg51.h>//包含单片机寄存器的头文件/******************************************************函数功能:用整形数据延时一段时间******************************************************/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<reg51.h>void main(void){unsigned char m,n;m=43; //即十进制数2x16+11=43n=60;P1=m+n; //即十进制数3x16+12=60//P1=103=01100111B,结果P1.3、P1.4、P1.7 口的灯被点亮}P0=n-m; //P0=17=00010001B,结果P0.0、P0.4的灯被熄灭//实例10:用P0、P1口显示乘法运算结果#include<reg51.h>//包含单片机寄存器的头文件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=00010001B,P1.0和P1.4口灭,其余亮P0=s%256;//低8位送P0口,P3=192=c0H=11000000B,P3.1,P3.6,P3.7口灭,其余亮}//实例11:用P1、P0口显示除法运算结果#include<reg51.h>//包含单片机寄存器的头文件void main(void){P1=36/5;//求整数P0=((36%5)*10)/5;//求小数while(1); //无限循环防止程序“跑飞”}//实例12:用自增运算控制P0口8位LED流水花样#include<reg51.h>//包含单片机寄存器的头文件/******************************************************函数功能:延时一段时间******************************************************/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<reg51.h>//包含单片机寄存器的头文件void main(void){P0=(4>0)&&(9>0xab);//将逻辑运算结果送P0口while(1);//设置无限循环,防止程序“跑飞”}//14P0//实例14:用P0口显示条件运算结果#include<reg51.h>//包含单片机寄存器的头文件void main(void){P0=(8>4)?8:4;//将条件运算结果送P0口,P0=8=00001000B while(1);//设置无限循环,防止程序“跑飞”}//实例15:用P0口显示按位"异或"运算结果#include<reg51.h>//包含单片机寄存器的头文件void main(void){P0=0xa2^0x3c;//将条件运算结果送P0口,P0=8=00001000B while(1);//设置无限循环,防止程序“跑飞”}//16P0//实例16:用P0显示左移运算结果#include<reg51.h>//包含单片机寄存器的头文件void main(void){P0=0x3b<<2;//将左移运算结果送P0口,P0=11101100B=0xec while(1);//无限循环,防止程序“跑飞”}#include<reg51.h> //实例17:"万能逻辑电路"实验//包含单片机寄存器的头文件sbit X=P1^5; sbit Y=P1^6; sbit Z=P1^7; void main(void) {while(1){ //将X位定义为//将Y位定义为//将Z位定义为P1.5P1.6P1.7} }F=((~X)&Y)|Z;//将逻辑运算结果赋给F;//实例18:用右移运算流水点亮P1口8位LED#include<reg51.h>//包含单片机寄存器的头文件/*****************************函数功能:延时一段时间*****************************/void delay(void){unsigned int n;for(n=0;n<30000;n++);}/*****************************函数功能:主函数*****************************/void main(void){unsigned char i;while(1){P1=0xff;delay();for(i=0;i<8;i++)//设置循环次数为8{P1=P1>>1;//每次循环P1的各二进位右移1位,高位补0delay();//调用延时函数}}}//19iff P08LED//实例19:用iff语句控制P0口8位LED的流水方向#include<reg51.h>//包含单片机寄存器的头文件sbit S1=P1^4;//将S1位定义为P1.4sbit S2=P1^5;//将S2位定义为P1.5/*****************************函数功能:主函数*****************************/void main(void){while(1){if(S1==0)//如果按键S1按下P0=0x0f;//P0口高四位LED点亮if(S2==0)//如果按键S2按下P0=0xf0;//P0口低四位LED点亮}}//实例20:用swtich语句的控制P0口8位LED的点亮状态#include<reg51.h>//包含单片机寄存器的头文件sbit S1=P1^4;//将S1位定义为P1.4/*****************************函数功能:延时一段时间*****************************/void delay(void){unsigned int n;for(n=0;n<10000;n++);}/*****************************函数功能:主函数*****************************/void main(void){unsigned char i;i=0;while(1){//将i初始化为0if(S1==0) {delay();//如果S1键按下//延时一段时间} if(S1==0)//如果再次检测到S1键按下i++;//i自增1if(i==9)//如果i=9,重新将其置为1 i=1;} switch(i)}{}//使用多分支选择语句case1:P0=0xfe;//第一个LED亮break;case2:P0=0xfd;//第二个LED亮break;case3:P0=0xfb;//第三个LED亮break;case4:P0=0xf7;//第四个LED亮break;case5:P0=0xef;//第五个LED亮break;case6:P0=0xdf;//第六个LED亮break;case7:P0=0xbf;//第七个LED亮break;case8:P0=0x7f;//第八个LED亮break;default://缺省值,关闭所有LEDP0=0xff;//21for//实例21:用for语句控制蜂鸣器鸣笛次数#include<reg51.h>//包含单片机寄存器的头文件sbit sound=P3^7;//将sound位定义为P3.7/**************************************** 函数功能:延时形成1600Hz音频****************************************/ void delay1600(void){unsigned char n;for(n=0;n<100;n++);}/**************************************** 函数功能:延时形成800Hz音频****************************************/ void delay800(void){unsigned char n;for(n=0;n<200;n++);}/**************************************** 函数功能:主函数****************************************/ void main(void){unsigned int i;while(1){for(i=0;i<830;i++){sound=0;//P3.7输出低电平delay1600();sound=1;//P3.7输出高电平delay1600();}for(i=0;i<200;i++){sound=0;//P3.7输出低电平delay800();sound=1;//P3.7输出高电平delay800();}}}//实例22:用whille语句控制LED#include<reg51.h> //包含单片机寄存器的头文件/****************************************函数功能:延时约60ms(3*100*200=60000μs)****************************************/void delay60ms(void){unsigned char m,n;for(m=0;m<100;m++)for(n=0;n<200;n++);}/****************************************函数功能:主函数****************************************/void main(void){unsigned char i;while(1)//无限循环{i=0;//将i初始化为0while(i<0xff)//当i小于0xff(255)时执行循环体{P0=i;//将i送P0口显示delay60ms();//延时i++;//i自增1}}}//实例23:用do-whiile语句控制P0口8位LED流水点亮#include<reg51.h>//包含单片机寄存器的头文件/****************************************函数功能:延时约60ms(3*100*200=60000μs)****************************************/void delay60ms(void){unsigned char m,n;for(m=0;m<100;m++)for(n=0;n<200;n++);}/****************************************函数功能:主函数****************************************/void main(void){do{P0=0xfe;//第一个LED亮delay60ms();P0=0xfd;//第二个LED亮delay60ms();P0=0xfb;//第三个LED亮delay60ms();P0=0xf7;//第四个LED亮delay60ms();P0=0xef;//第五个LED亮delay60ms();P0=0xdf;//第六个LED亮delay60ms();delay60ms();P0=0xbf;//第七个LED亮delay60ms();P0=0x7f;//第八个LED亮delay60ms();}while(1);//无限循环,使8位LED循环流水点亮}//实例24:用字符型数组控制P0口8位LED流水点亮#include<reg51.h>//包含单片机寄存器的头文件/****************************************函数功能:延时约60ms(3*100*200=60000μs)****************************************/void delay60ms(void){unsigned char m,n;for(m=0;m<100;m++)} for(n=0;n<200;n++);/****************************************函数功能:主函数****************************************/void main(void){unsigned char i;unsigned char code Tab[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};//定义无符号字符型数组while(1){for(i=0;i<8;i++){P0=Tab[i];//依次引用数组元素,并将其送P0口显示delay60ms();//调用延时函数}}}//25P0//实例25:用P0口显示字符串常量#include<reg51.h> //包含单片机寄存器的头文件/*************************************************函数功能:延时约150ms(3*200*250=150000μs=150ms*************************************************/void delay150ms(void){unsigned char m,n;for(m=0;m<200;m++)for(n=0;n<250;n++);}/*************************************************函数功能:主函数*************************************************/void main(void){unsigned char str[]={"Now,Temperature is:"};//将字符串赋给字符型全部元素赋值unsigned char i;while(1){i=0; //将i初始化为0,从第一个元素开始显示} }while(str[i]!='\0')//只要没有显示到结束标志'\0'{P0=str[i];//将第i个字符送到P0口显示delay150ms();//调用150ms延时函数i++;//指向下一个待显字符}//实例26:用P0#include<reg51.h>void main(void){口显示指针运算结果unsigned char*p1,*p2; //定义无符号字符型指针变量p1,p2 unsigned char i,j; //定义无符号字符型数据i=25; j=15;p1=&i ;p2=&j ; //给i赋初值25//使指针变量指向i//使指针变量指向j,对指针初始化,对指针初始化P0=*p1+*p2; //*p1+*p2相当于i+j,所以P0=25+15=40=0x28}//则P0=00101000B,结果P0.3、P0.5引脚LED熄灭,其余点亮while(1);//无限循环,防止程序“跑飞”//27P08LED//实例27:用指针数组控制P0口8位LED流水点亮#include<reg51.h>/************************************************* 函数功能:延时约150ms(3*200*250=150000μs=150ms *************************************************/ void delay150ms(void){} for(n=0;n<250;n++) ;/*************************************************函数功能:主函数*************************************************/void main(void){unsigned char code Tab[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f}; unsigned char*p[]={&Tab[0],&Tab[1],&Tab[2],&Tab[3],&Tab[4],&Tab[5],&Tab[6],&Tab[7]};unsigned char i;//定义无符号字符型数据while(1){for(i=0;i<8;i++){P0=*p[i];delay150ms();}}}//28P08LED//实例28:用数组的指针控制P0#include<reg51.h>口8位LED流水点亮/*************************************************函数功能:延时约150ms(3*200*250=150000μs=150ms*************************************************/void delay150ms(void){unsigned char m,n;for(m=0;m<200;m++)for(n=0;n<250;n++);}/*************************************************函数功能:主函数*************************************************/void main(void){} unsigned char i;unsigned char Tab[]={0xFF,0xFE,0xFD,0xFB,0xF7,0xEF,0xDF,0xBF,0x7F,0xBF,0xDF,0xEF,0xF7,0xFB,0xFD,0xFE,0xFE,0xFC,0xFB,0xF0,0xE0,0xC0,0x80,0x00,0xE7,0xDB,0xBD,0x7E,0x3C,0x18,0x00,0x81,0xC3,0xE7,0x7E,0xBD,0xDB,0xE7,0xBD,0xDB};//流水灯控制码unsigned char*p;//定义无符号字符型指针p=Tab;//将数组首地址存入指针pwhile(1){for(i=0;i<32;i++)//共32个流水灯控制码{P0=*(p+i);//*(p+i)的值等于a[i]delay150ms();//调用150ms延时函数}}//29P0P1//实例29:用P0#include<reg51.h>、P1口显示整型函数返回值/*************************************************函数功能:计算两个无符号整数的和*************************************************/unsigned int sum(int a,int b){unsigned int s;s=a+b;return(s);}/*************************************************函数功能:主函数*************************************************/void main(void){unsigned z;z=sum(2008,2009);P1=z/256;//取得z的高8位P0=z%256;//取得z的低8位while(1);}//实例30:用有参函数控制P0口8位LED流水速度#include<reg51.h>/*************************************************函数功能:延时一段时间*************************************************/void delay(unsigned char x){unsigned char m,n;for(m=0;m<x;m++)for(n=0;n<200;n++);}/*************************************************函数功能:主函数*************************************************/void main(void){unsigned char i;unsigned char code Tab[]={0xFE,0xFD,0xFB,0xF7,0xEF,0xDF,0xBF,0x7F};//流水灯控制码while(1){//快速流水点亮LEDfor(i=0;i<8;i++)//共8个流水灯控制码{P0=Tab[i];delay(100);//延时约60ms,(3*100*200=60000μs)}//慢速流水点亮LEDfor(i=0;i<8;i++)//共8个流水灯控制码{P0=Tab[i];delay(250);//延时约150ms,(3*250*200=150000μs)}}}22/192//31//实例31:用数组作函数参数控制流水花样#include<reg51.h>/*************************************************函数功能:延时约150ms*************************************************/void delay(void){unsigned char m,n;for(m=0;m<200;m++)for(n=0;n<250;n++);}/*************************************************函数功能:流水点亮P0口8位LED*************************************************/void led_flow(unsigned char a[8]){unsigned char i;for(i=0;i<8;i++){P0=a[i];delay();}}/*************************************************函数功能:主函数*************************************************/void main(void){unsigned char code Tab[]={0xFE,0xFD,0xFB,0xF7,0xEF,0xDF,0xBF,0x7F};//流水灯控制码led_flow(Tab);}//32P08LED//实例32:用指针作函数参数控制P0口8位LED流水点亮/*************************************************函数功能:延时约150ms*************************************************/void delay(void){unsigned char m,n;for(m=0;m<200;m++)for(n=0;n<250;n++);}/*************************************************函数功能:流水点亮P0口8位LED*************************************************/void led_flow(unsigned char*p)//形参为无符号字符型指针{unsigned char i;while(1){i=0;//将i置为0,指向数组第一个元素while(*(p+i)!='\0')//只要没有指向数组的结束标志{P0=*(p+i);//取的指针所指变量(数组元素)的值,送P0口delay();//调用延时函数i++;//指向下一个数组元素}}}/*************************************************函数功能:主函数*************************************************/void main(void){unsigned char code Tab[]={0xFE,0xFD,0xFB,0xF7,0xEF,0xDF,0xBF,0x7F,0x7F,0xBF,0xDF,0xEF,0xF7,0xFB,0xFD,0xFE, 0xFF,0xFE,0xFC,0xFB,0xF0,0xE0,0xC0,0x80,0x00,0xE7,0xDB,0xBD,0x7E,0xFF,0xFF,0x3C,0x18,0x0,0x81,0xC3,0xE7,0xFF, 0xFF,0x7E};//流水灯控制码unsigned char*pointer;224/192} pointer=Tab;led_flow(pointer);//33P1//实例33:用函数型指针控制P1口灯花样#include<reg51.h>//包含51单片机寄存器定义的头文件unsigned char code Tab[]={0xFE,0xFD,0xFB,0xF7,0xEF,0xDF,0xBF,0x7F}; //流水灯控制码,该数组被定义为全局变量/************************************************************** 函数功能:延时约150ms**************************************************************/ void delay(void){unsigned char m,n;for(m=0;m<200;m++)for(n=0;n<250;n++);}/************************************************************** 函数功能:流水灯左移**************************************************************/ void led_flow(void){unsigned char i;for(i=0;i<8;i++)//8位控制码{P0=Tab[i];delay();}}/************************************************************** 函数功能:主函数**************************************************************/ void main(void){void(*p)(void);//定义函数型指针,所指函数无参数,无返回值p=led_flow;//将函数的入口地址赋给函数型指针pwhile(1)(*p)(); //通过函数的指针p调用函数led_flow()}//34//实例34:用指针数组作为函数的参数显示多个字符串#include<reg51.h>//包含51单片机寄存器定义的头文件unsigned char code str1[]="Temperature is tested by DS18B20";//C语言中,字符串是作为字符数组来处理的unsigned char code str2[]="Now temperature is:";//所以,字符串的名字就是字符串的首地址unsigned char code str3[]="The Systerm is designed by Zhang San";unsigned char code str4[]="The date is2008-9-30";unsigned char*p[]={str1,str2,str3,str4};//定义p[4]为指向4个字符串的字符型指针数组/**************************************************************函数功能:延时约150ms**************************************************************/ void delay(void){unsigned char m,n;for(m=0;m<200;m++)for(n=0;n<250;n++);}/**************************************************************函数功能:流水点亮P0口8位LED**************************************************************/ void led_display(unsigned char*x[])//形参必须为指针数组{unsigned char i,j;for(i=0;i<4;i++)//有4个字符串要显示{j=0;//指向待显字符串的第0号元素while(*(x[i]+j)!='\0')//只要第i个字符串的第j号元素不是结束标志{P0=*(x[i]+j);//取得该元素值送到P0口显示delay();//调用延时函数j++;//指向下一个元素}}}/************************************************************** 函数功能:主函数**************************************************************/ void main(void){unsigned char i;while(1){for(i=0;i<4;i++)led_display(p);//将指针数组名作实际参数传递}}//实例35:字符函数ctype.h应用举例#include<reg51.h>//包含51单片机寄存器定义的头文件#include<ctype.h>void main(void){while(1){P3=isalpha('_')?0xf0:0x0f;//条件运算,若'_'是英文字母,P3=0xf0 }}//实例36:内部函数intrins..h应用举例#include<reg51.h>//包含51单片机寄存器定义的头文件#include<intrins.h>//包含函数isalpha()声明的头文件/*************************************************函数功能:延时约150ms*************************************************/void delay(void){unsigned char m,n;for(m=0;m<200;m++)for(n=0;n<250;n++);}227/192/*************************************************函数功能:主函数*************************************************/void main(void){P3=0xfe;//P3=11111110Bwhile(1){P3=_crol_(P3,1);//将P3的二进制位循环左移1位后再赋给P3 delay();//调用延时函数}}//37stdlib.h//实例37:标准函数stdliib.h应用举例#include<reg51.h>//包含51单片机寄存器定义的头文件#include<stdlib.h>//包含函数isalpha()声明的头文件/*************************************************函数功能:延时约150ms*************************************************/void delay(void){unsigned char m,n;for(m=0;m<200;m++)for(n=0;n<250;n++);}/*************************************************函数功能:主函数*************************************************/void main(void){unsigned char i;while(1){for(i=0;i<10;i++)//产生10个随机数{P3=rand()/160;//将产生的随机数缩小160倍后送P3显示delay();}}}//实例 38:字符串函数 striing.h应用举例 #include<reg51.h> //包含 51 单片机寄存器定义的头文件 #include<string.h> //包含函数 isalpha ()声明的头文件 void main(void){unsigned char str1[ ]="Now, The temperature is :";unsigned char str2[ ]="Now, The temperature is 36 Centgrade:"; unsigned char i;i=strcmp(str1,str2); //比较两个字符串,并将结果存入i if(i==0) //str1=str2P3=0x00;elseif(i<0) //str1<str2P3=0xf0;else //str1>str2P3=0x0f;while(1); //防止程序“跑飞”}// 39 2 #include<reg51.h> //实例 39:宏定义应用举例2 //包含 51 单片机寄存器定义的头文件 # define F(a,b) (a)+(a)*(b)/256+(b) void main(void){unsigned char i,j,k;i=40;j=30;k=20;//带参数的宏定义,a 和 b 为形参 参} P3=F(i,j+k); while(1);//i 和 j+k分别为实参,宏展开时,实参将替代宏定义中的形//实例40:宏定义应用举例2 #include<AT89X51.h>#include<ctype.h>void main(void){P3_0=0;//将P3.0引脚置低电平,LED点亮P3_1=0;//将P3.0引脚置低电平,LED点亮P3_2=0;//将P3.0引脚置低电平,LED点亮P3_3=0;//将P3.0引脚置低电平,LED点亮P3_4=1;//将P3.4引脚置高电平,LED熄灭P3_5=1;//将P3.5引脚置高电平,LED熄灭P3_6=1;//将P3.7引脚置高电平,LED熄灭P3_7=1;//将P3.7引脚置高电平,LED熄灭while(1);}//实例41:宏定义应用举例3#include<reg51.h >#define MAX100 void main(void) {#if MAX>80P3=0xf0;#elseP3=0x0f;#endif}//包含51单片机寄存器定义的头文件//将MAX宏定义为字符串100//如果字符串100大于80//P3口低四位LED点亮//否则,P3口高四位LED点亮//结束本次编译/***************************************************** ************中断、定时器********中断、定时器*********************中断、定时器*********中断、定时器****************************************************************** **///实例42:用定时器T0查询方式P2口8位控制LED闪烁#include<reg51.h>//包含51单片机寄存器定义的头文件/**************************************************************函数功能:主函数**************************************************************/void main(void){//EA=1;//开总中断//ET0=1;//定时器T0中断允许TMOD=0x01;//使用定时器T0的模式1TH0=(65536-46083)/256;//定时器T0的高8位赋初值TL0=(65536-46083)%256;//定时器T0的高8位赋初值TR0=1;//启动定时器T0TF0=0;P2=0xff;while(1)//无限循环等待查询{while(TF0==0);TF0=0;P2=~P2;TH0=(65536-46083)/256;//定时器T0的高8位赋初值TL0=(65536-46083)%256;//定时器T0的高8位赋初值}}//实例43:用定时器T1查询方式控制单片机发出1KHz音频/************************************************************** 函数功能:主函数**************************************************************/ void main(void){//EA=1;//开总中断//ET0=1;//定时器T0中断允许TMOD=0x10;//使用定时器T1的模式1TH1=(65536-921)/256;//定时器T1的高8位赋初值TL1=(65536-921)%256;//定时器T1的高8位赋初值TR1=1;//启动定时器T1TF1=0;while(1)//无限循环等待查询{while(TF1==0);TF1=0;sound=~sound;//将P3.7引脚输出电平取反TH1=(65536-921)/256;//定时器T0的高8位赋初值TL1=(65536-921)%256;//定时器T0的高8位赋初值}}//44T0P18LED //实例44:将计数器T0计数的结果送P1口8位LED显示#include<reg51.h>//包含51单片机寄存器定义的头文件sbit S=P3^4;//将S位定义为P3.4引脚/************************************************************** 函数功能:主函数**************************************************************/ void main(void){//EA=1;//开总中断//ET0=1;//定时器T0中断允许TMOD=0x02;//使用定时器T0的模式2TH0=256-156;//定时器T0的高8位赋初值TL0=256-156;//定时器T0的高8位赋初值TR0=1;//启动定时器T0while(1)//无限循环等待查询{while(TF0==0)//如果未计满就等待。
keil c51 详细中文手册
Keil C51使用详解V1.0第一章 Keil C51开发系统基本知识 (6)第一节系统概述 (6)第二节Keil C51单片机软件开发系统的整体结构 (6)1. C51 for Dos 72. C51 for Windows的安装及注意事项: (7)第四节Keil C51工具包各部分功能及使用简介 (7)1. C51与A51. 72. L51和BL51. 83. DScope51,Tscope51及Monitor51. 84. Ishell及uVision. 9第二章 Keil C51软件使用详解 (10)第一节Keil C51编译器的控制指令 (10)1. 源文件控制类 (10)2. 目标文件(Object)控制类: (10)3. 列表文件(listing)控制类: (10)第二节dScope51的使用 (11)1. dScope51 for Dos 112. dScope for Windows 12第三节Monitor51及其使用 (13)1. Monitor51对硬件的要求 (13)2. Mon51的使用 (13)3. MON51的配置 (13)4. 串口连接图: (13)5. MON51命令及使用 (14)第四节集成开发环境(IDE)的使用 (14)1. Ishell for Dos的使用 (14)2. uVision for windows的使用 (15)第三章 Keil C51 vs 标准C.. 15第二节内存区域(Memory Areas): (16)1. Pragram Area: (16)2. Internal Data Memory: 163. External Data Memory. 164. Speciac Function Register Memory. 16第三节存储模式 (16)1. Small模式 (16)2. Compact模式 (17)3. large模式 (17)第四节存储类型声明 (17)第五节变量或数据类型 (17)第六节位变量与声明 (17)1. bit型变量 (17)2. 可位寻址区说明20H-2FH.. 18第七节Keil C51指针 (18)1. 一般指针 (18)2. 存储器指针 (18)3. 指针转换 (18)第八节Keil C51函数 (19)1. 中断函数声明: (19)2. 通用存储工作区 (19)3. 选通用存储工作区由using x声明,见上例。
keil c51 详细中文手册
KeilC51使用详解V1.0第一章KeilC51开发系统基本知识 (6)第一节系统概述 (6)第二节KeilC51单片机软件开发系统的整体结构 (6)第三节第四节1.C512.L51第一节1.2.3.第二节1.dScope51forDos112.dScopeforWindows12第三节Monitor51及其使用 (13)1.Monitor51对硬件的要求 (13)2.Mon51的使用 (13)3.MON51的配置 (13)5.MON51命令及使用 (14)第四节集成开发环境(IDE)的使用 (14)1.IshellforDos的使用 (14)2.uVisionforwindows的使用 (15)第三章KeilC51vs标准C..15第一节KeilC51扩展关键字 (15)1.bit2.可位寻址区说明20H-2FH..18第七节KeilC51指针 (18)1.一般指针 (18)2.存储器指针 (18)3.指针转换 (18)第八节KeilC51函数 (19)2.通用存储工作区 (19)3.选通用存储工作区由usingx声明,见上例。
(19)4.指定存储模式 (19)5.#pragmadisable.196.递归或可重入函数指定 (19)7.指定PL/M-51函数 (20)1.2._at_3.第二节1.2.第三节1.2.C513.4.第四节段名协定与程序优化 (25)1.段名协定(SegmentNamingConventions)252.程序优化 (25)第五章KeilC51库函数参考 (26)第一节本征库函数(intrinsicroutines)和非本征证库函数 (26)第二节几类重要库函数 (26)1.专用寄存器include文件 (26)2.绝对地址include文件absacc.h.263.动态内存分配函数,位于stdlib.h中 (27)4.缓冲区处理函数位于“string.h”中 (27)5.输入输出流函数,位于“stdio.h”中 (27)第三节KeilC51库函数原型列表 (27)1.CTYPE.H..27第一节第二节2.调试窗口(DEBUGWindow) (32)3.命令窗口(CommandWindow) (32)4.观察窗口(WatchWindow) (32)5.寄存器窗口(RegisteWindow) (32)6.串口窗口(SericalWindows) (32)7.性能分析窗口 (32)8.内存窗口(MemoryWindow) (32)9.符号浏览窗口(SymbolBrowserWindow) (33)10.调用线窗口(Call-StackWindow) (33)11.代码覆盖窗口 (33)12.外围设备窗口(peripherals)33第二节dScopeforWindows基本操作 (33)1.指定初始化文件 (33)第三节8.指针: (38)9.dScope命令语句 (38)10.函数 (43)第一章KeilC51开发系统基本知识第一节系统概述KeilC51是美国KeilSoftware公司出品的51系列兼容单片机C语言软件开发系统,与汇编相比,C语言在功能上、结构性、可读性、可维护性上有明显的优势,因而易学易用。
C51单片机基础学习教程(C语言)
作,晶振信号经 12 分频后形成机器周期。 当单片机的时钟系统工作正常的时候,在 ALE 引脚可以观察到稳定的脉冲
信号,其频率为:晶振频率/6。
机器周期TCY
S1 S2 S3 S4 S5 S6
振荡器
分 P1 频 80C51 器 P2
晶振周期
S状态
图 1.13 单片机工作的基本时序图 机器周期和指令周期
3
读锁存器
地址
控制 C
VCC
R
内部总线 写锁存器
D
Q
P2.X
CL 锁存器
1 0 MUX
1 T
P2.X引脚
读引脚
图 1.8 P2 口作为数据总线图 1.4 P1 口的内部结构
P1 口是 80C51 的唯一的单功能口,仅能用作数据输入输出口,它由一个输出 锁存器、两个三态输入缓冲器和输出驱动电路组成----准双向口。同 P2 口相同, 内部设有上拉电阻(约 30KΩ)。
(4) 指令周期: 它是指 CPU 完成一条操作所需的全部时间。 每条指令执行 时间都是有一个或几个机器周期组成。MCS - 51 系统中, 有单周期指令、双周 期指令和四周期指令。 1.7 思考题
1.STC89C52 单片机内部程序存储器与数据存储器的容量各为多少? 2.52 系列单片机比 51 系列单片机多出的功能是什么? 3.在 DIP40 封装的 52 系列单片机里,接地引脚、电源引脚、复位引脚和晶振 引脚分别是那几个引脚。 4.在 12MHz 时钟脉冲的 52 系列单片机系统里,一个机器周期是多长时间? 5.在 52 系列单片机,那个引脚是控制使用内部程序存储器,还是外部程序存 储器?
40 39 P01 38 P02 37 P03 36 P04 35 P05 34 P06 33 P07 32 P08 31 EA 30 ALE 29 PSE 28 P28 27 P27 26 P26 25 P25 24 P24 23 P23 22 P22 21 P21
51单片机c语言KeilC51全集
单片机c语言KeilC51应用全集KEIL软件的安装将带有KEIL安装软件的光盘放入光驱,打开光驱中名为“keil750A”的文件夹再打开setup文件夹,双击setup文件夹中“setup”文件即开始安装。
单击“Full Version”.。
如图所示:点击“Next”→“Yes” →”Next”,此时则须序列号(序列号在光盘keil750AHK)文件夹目录下的”sn”文件中’)输入序列号,其他四项输入任意字母。
如图:点击“Next” →Next”开始安装,点击Next” →Finish即完成安装。
USB驱动的安装:若使用的仿真器是USB接口的,则需要安装USB驱动。
打开安装光盘中的“安装USB驱动”文件夹,双击“USB_CP2102_XP_2000”开始安装。
1.双击:“安装USB驱动”文件夹下的“USB_CP2102_XP_2000.exe”:2.单击“下一步”:安装程序的功能:选择“此功能及所有子功能将安装在本地硬盘驱动器上”4.下一步:“安装”5.安装完成。
6.连接上KEIL仿真器在设备管理器里可看到安装的驱动端口:第一课建立你的第一个KeilC51项目随着单片机技术的不断发展,以单片机C语言为主流的高级语言也不断被更多的单片机爱好者和工程师所喜爱。
使用C51肯定要使用到编译器,以便把写好的C程序编译为机器码,这样单片机才能执行编写好的程序。
KEIL uVISION2 是众多单片机应用开发软件中优秀的软件之一,它支持众多不一样公司的MCS51架构的芯片,它集编辑,编译,仿真等于一体,同时还支持,PLM,汇编和C语言的程序设计,它的界面和常用的微软 VC++的界面相似,界面友好,易学易用,在调试程序,软件仿真方面也有很强大的功能。
本站提供的单片机c语言教程都是基于keilc51的。
下面结合8051介绍单片机C语言的优越性:·无须懂得单片机的具体硬件,也能够编出符合硬件实际的专业水平的程序;·不懂得单片机的指令集,也能够编写完美的单片机程序;·不同函数的数据实行覆盖,有效利用片上有限的RAM空间;·提供auto、static、const等存储类型和专门针对8051单片机的data、idata、pdata、xdata、code 等存储类型,自动为变量合理地分配地址;·C语言提供复杂的数据类型(数组、结构、联合、枚举、指针等),极大地增强了程序处理能力和灵活性;·提供small、compact、large等编译模式,以适应片上存储器的大小;·中断服务程序的现场保护和恢复,中断向量表的填写,是直接与单片机相关的,都由C编译器代办;·程序具有坚固性:数据被破坏是导致程序运行异常的重要因素。
单片机C语言第3章51单片机P0P3口的C51编程1课件
1. 结构
P0
P1
P2
P3
D锁存器
★
★
★
★
MUX开关 ★
★
输出控制 ★
★
★
内部上拉电阻
★
★
★
2. 功能
P0
P1
P2
读引脚
VCC
2
P1.N锁存器
D
Q
CLK
Q
R V
P1.N
1
(1)输出方式:数据经内部总线送入锁存器存储,某位数 据为1,则Q=1,Q=0,VT1截止,引脚P1.N上出现高电 平;反之,数据为0,则Q=0,Q=1,VT1导通,引脚 P1.N上出现低电平。
(2)读引脚方式:读引脚时,控制器打开三态门1,引脚 P1.N上的数据经三态门1进入芯片的内部总线,再送到 累加器A,输入时无锁存功能。
1、P0口具有通用I/O口方式,可实现输出、读引脚(输入) 和读锁存器三种功能;
2、作为通用I/O口方式时,需要外接上拉电阻;
3、P0口具有地址/数据分时复用方式,可实现地址/数据输 出、数据输入两种功能;
4、地址/数据分时复用方式时无需外接上拉电阻;
5、分时复用方式的数据输入时无需程序写1操作。
P0~P3小结
V
P0.n的通用I/O口工作方式:输出、读引脚、读锁存器
读锁存器 2
VCC
外接上拉电阻
内部总线 写锁存器
P0.N锁存器
D
Q
V
CLK
Q
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
对全部高中资料试卷电气设备,在安装过程中以及安装结束后进行高中资料试卷调整试验;通电检查所有设备高中资料电试力卷保相护互装作置用调与试相技互术关,系电,通力根1保过据护管生高线产中敷工资设艺料技高试术中卷0资不配料仅置试可技卷以术要解是求决指,吊机对顶组电层在气配进设置行备不继进规电行范保空高护载中高与资中带料资负试料荷卷试下问卷高题总中2体2资,配料而置试且时卷可,调保需控障要试各在验类最;管大对路限设习度备题内进到来行位确调。保整在机使管组其路高在敷中正设资常过料工程试况1卷中下安,与全要过,加度并强工且看作尽护下可1都关能可于地以管缩正路小常高故工中障作资高;料中对试资于卷料继连试电接卷保管破护口坏进处范行理围整高,核中或对资者定料对值试某,卷些审弯异核扁常与度高校固中对定资图盒料纸位试,置卷编.工保写况护复进层杂行防设自腐备动跨与处接装理地置,线高尤弯中其曲资要半料避径试免标卷错高调误等试高,方中要案资求,料技编试术写5、卷交重电保底要气护。设设装管备备置线4高、调动敷中电试作设资气高,技料课中并3术试、件资且中卷管中料拒包试路调试绝含验敷试卷动线方设技作槽案技术,、以术来管及避架系免等统不多启必项动要方高式案中,;资为对料解整试决套卷高启突中动然语过停文程机电中。气高因课中此件资,中料电管试力壁卷高薄电中、气资接设料口备试不进卷严行保等调护问试装题工置,作调合并试理且技利进术用行,管过要线关求敷运电设行力技高保术中护。资装线料置缆试做敷卷到设技准原术确则指灵:导活在。。分对对线于于盒调差处试动,过保当程护不中装同高置电中高压资中回料资路试料交卷试叉技卷时术调,问试应题技采,术用作是金为指属调发隔试电板人机进员一行,变隔需压开要器处在组理事在;前发同掌生一握内线图部槽 纸故内资障,料时强、,电设需回备要路制进须造行同厂外时家部切出电断具源习高高题中中电资资源料料,试试线卷卷缆试切敷验除设报从完告而毕与采,相用要关高进技中行术资检资料查料试和,卷检并主测且要处了保理解护。现装场置设。备高中资料试卷布置情况与有关高中资料试卷电气系统接线等情况,然后根据规范与规程规定,制定设备调试高中资料试卷方案。
USB 驱动的安装:
若使用的仿真器是 USB 接口的,则需要安装 USB 驱动。打开安装光盘中的“安装 USB 驱动”文件夹, 双击“USB_CP2102_XP_2000”开始安装。 1. 双击:“安装 USB 驱动”文件夹下的“USB_CP2102_XP_2000.exe”:
2.单击“下一步”:
4.下一步:“安装” 5.安装完成。
对全部高中资料试卷电气设备,在安装过程中以及安装结束后进行高中资料试卷调整试验;通电检查所有设备高中资料电试力卷保相护互装作置用调与试相技互术关,系电,通力根1保过据护管生高线产中敷工资设艺料技高试术中卷0资不配料仅置试可技卷以术要解是求决指,吊机对顶组电层在气配进设置行备不继进规电行范保空高护载中高与资中带料资负试料荷卷试下问卷高题总中2体2资,配料而置试且时卷可,调保需控障要试各在验类最;管大对路限设习度备题内进到来行位确调。保整在机使管组其路高在敷中正设资常过料工程试况1卷中下安,与全要过,加度并强工且看作尽护下可1都关能可于地以管缩正路小常高故工中障作资高;料中对试资于卷料继连试电接卷保管破护口坏进处范行理围整高,核中或对资者定料对值试某,卷些审弯异核扁常与度高校固中对定资图盒料纸位试,置卷编.工保写况护复进层杂行防设自腐备动跨与处接装理地置,线高尤弯中其曲资要半料避径试免标卷错高调误等试高,方中要案资求,料技编试术写5、卷交重电保底要气护。设设装管备备置线4高、调动敷中电试作设资气高,技料课中并3术试、件资且中卷管中料拒包试路调试绝含验敷试卷动线方设技作槽案技术,、以术来管及避架系免等统不多启必项动要方高式案中,;资为对料解整试决套卷高启突中动然语过停文程机电中。气高因课中此件资,中料电管试力壁卷高薄电中、气资接设料口备试不进卷严行保等调护问试装题工置,作调合并试理且技利进术用行,管过要线关求敷运电设行力技高保术中护。资装线料置缆试做敷卷到设技准原术确则指灵:导活在。。分对对线于于盒调差处试动,过保当程护不中装同高置电中高压资中回料资路试料交卷试叉技卷时术调,问试应题技采,术用作是金为指属调发隔试电板人机进员一行,变隔需压开要器处在组理事在;前发同掌生一握内线图部槽 纸故内资障,料时强、,电设需回备要路制进须造行同厂外时家部切出电断具源习高高题中中电资资源料料,试试线卷卷缆试切敷验除设报从完告而毕与采,相用要关高进技中行术资检资料查料试和,卷检并主测且要处了保理解护。现装场置设。备高中资料试卷布置情况与有关高中资料试卷电气系统接线等情况,然后根据规范与规程规定,制定设备调试高中资料试卷方案。
点击“Next” →Next”开始安装,点击 Next” →,在安装过程中以及安装结束后进行高中资料试卷调整试验;通电检查所有设备高中资料电试力卷保相护互装作置用调与试相技互术关,系电,通力根1保过据护管生高线产中敷工资设艺料技高试术中卷0资不配料仅置试可技卷以术要解是求决指,吊机对顶组电层在气配进设置行备不继进规电行范保空高护载中高与资中带料资负试料荷卷试下问卷高题总中2体2资,配料而置试且时卷可,调保需控障要试各在验类最;管大对路限设习度备题内进到来行位确调。保整在机使管组其路高在敷中正设资常过料工程试况1卷中下安,与全要过,加度并强工且看作尽护下可1都关能可于地以管缩正路小常高故工中障作资高;料中对试资于卷料继连试电接卷保管破护口坏进处范行理围整高,核中或对资者定料对值试某,卷些审弯异核扁常与度高校固中对定资图盒料纸位试,置卷编.工保写况护复进层杂行防设自腐备动跨与处接装理地置,线高尤弯中其曲资要半料避径试免标卷错高调误等试高,方中要案资求,料技编试术写5、卷交重电保底要气护。设设装管备备置线4高、调动敷中电试作设资气高,技料课中并3术试、件资且中卷管中料拒包试路调试绝含验敷试卷动线方设技作槽案技术,、以术来管及避架系免等统不多启必项动要方高式案中,;资为对料解整试决套卷高启突中动然语过停文程机电中。气高因课中此件资,中料电管试力壁卷高薄电中、气资接设料口备试不进卷严行保等调护问试装题工置,作调合并试理且技利进术用行,管过要线关求敷运电设行力技高保术中护。资装线料置缆试做敷卷到设技准原术确则指灵:导活在。。分对对线于于盒调差处试动,过保当程护不中装同高置电中高压资中回料资路试料交卷试叉技卷时术调,问试应题技采,术用作是金为指属调发隔试电板人机进员一行,变隔需压开要器处在组理事在;前发同掌生一握内线图部槽 纸故内资障,料时强、,电设需回备要路制进须造行同厂外时家部切出电断具源习高高题中中电资资源料料,试试线卷卷缆试切敷验除设报从完告而毕与采,相用要关高进技中行术资检资料查料试和,卷检并主测且要处了保理解护。现装场置设。备高中资料试卷布置情况与有关高中资料试卷电气系统接线等情况,然后根据规范与规程规定,制定设备调试高中资料试卷方案。
对全部高中资料试卷电气设备,在安装过程中以及安装结束后进行高中资料试卷调整试验;通电检查所有设备高中资料电试力卷保相护互装作置用调与试相技互术关,系电,通力根1保过据护管生高线产中敷工资设艺料技高试术中卷0资不配料仅置试可技卷以术要解是求决指,吊机对顶组电层在气配进设置行备不继进规电行范保空高护载中高与资中带料资负试料荷卷试下问卷高题总中2体2资,配料而置试且时卷可,调保需控障要试各在验类最;管大对路限设习度备题内进到来行位确调。保整在机使管组其路高在敷中正设资常过料工程试况1卷中下安,与全要过,加度并强工且看作尽护下可1都关能可于地以管缩正路小常高故工中障作资高;料中对试资于卷料继连试电接卷保管破护口坏进处范行理围整高,核中或对资者定料对值试某,卷些审弯异核扁常与度高校固中对定资图盒料纸位试,置卷编.工保写况护复进层杂行防设自腐备动跨与处接装理地置,线高尤弯中其曲资要半料避径试免标卷错高调误等试高,方中要案资求,料技编试术写5、卷交重电保底要气护。设设装管备备置线4高、调动敷中电试作设资气高,技料课中并3术试、件资且中卷管中料拒包试路调试绝含验敷试卷动线方设技作槽案技术,、以术来管及避架系免等统不多启必项动要方高式案中,;资为对料解整试决套卷高启突中动然语过停文程机电中。气高因课中此件资,中料电管试力壁卷高薄电中、气资接设料口备试不进卷严行保等调护问试装题工置,作调合并试理且技利进术用行,管过要线关求敷运电设行力技高保术中护。资装线料置缆试做敷卷到设技准原术确则指灵:导活在。。分对对线于于盒调差处试动,过保当程护不中装同高置电中高压资中回料资路试料交卷试叉技卷时术调,问试应题技采,术用作是金为指属调发隔试电板人机进员一行,变隔需压开要器处在组理事在;前发同掌生一握内线图部槽 纸故内资障,料时强、,电设需回备要路制进须造行同厂外时家部切出电断具源习高高题中中电资资源料料,试试线卷卷缆试切敷验除设报从完告而毕与采,相用要关高进技中行术资检资料查料试和,卷检并主测且要处了保理解护。现装场置设。备高中资料试卷布置情况与有关高中资料试卷电气系统接线等情况,然后根据规范与规程规定,制定设备调试高中资料试卷方案。
单片机 c 语言 KeilC51 应用全集
KEIL 软件的安装
将带有 KEIL 安装软件的光盘放入光驱,打开光驱中名为“keil750A”的文件夹再打开 setup 文件夹,双 击 setup 文件夹中“setup”文件即开始安装。单击“Full Version”.。如图所示:
点击“Next” →“Yes” →”Next”,此时则须序列号(序列号在光盘 keil750AHK)文件夹目录下的”sn”文 件中’)输入序列号,其他四项输入任意字母。如图:
.选定安装程序的功能:选择“此功能及所有子功能将安装在本地硬盘驱动器上”
对全部高中资料试卷电气设备,在安装过程中以及安装结束后进行高中资料试卷调整试验;通电检查所有设备高中资料电试力卷保相护互装作置用调与试相技互术关,系电,通力根1保过据护管生高线产中敷工资设艺料技高试术中卷0资不配料仅置试可技卷以术要解是求决指,吊机对顶组电层在气配进设置行备不继进规电行范保空高护载中高与资中带料资负试料荷卷试下问卷高题总中2体2资,配料而置试且时卷可,调保需控障要试各在验类最;管大对路限设习度备题内进到来行位确调。保整在机使管组其路高在敷中正设资常过料工程试况1卷中下安,与全要过,加度并强工且看作尽护下可1都关能可于地以管缩正路小常高故工中障作资高;料中对试资于卷料继连试电接卷保管破护口坏进处范行理围整高,核中或对资者定料对值试某,卷些审弯异核扁常与度高校固中对定资图盒料纸位试,置卷编.工保写况护复进层杂行防设自腐备动跨与处接装理地置,线高尤弯中其曲资要半料避径试免标卷错高调误等试高,方中要案资求,料技编试术写5、卷交重电保底要气护。设设装管备备置线4高、调动敷中电试作设资气高,技料课中并3术试、件资且中卷管中料拒包试路调试绝含验敷试卷动线方设技作槽案技术,、以术来管及避架系免等统不多启必项动要方高式案中,;资为对料解整试决套卷高启突中动然语过停文程机电中。气高因课中此件资,中料电管试力壁卷高薄电中、气资接设料口备试不进卷严行保等调护问试装题工置,作调合并试理且技利进术用行,管过要线关求敷运电设行力技高保术中护。资装线料置缆试做敷卷到设技准原术确则指灵:导活在。。分对对线于于盒调差处试动,过保当程护不中装同高置电中高压资中回料资路试料交卷试叉技卷时术调,问试应题技采,术用作是金为指属调发隔试电板人机进员一行,变隔需压开要器处在组理事在;前发同掌生一握内线图部槽 纸故内资障,料时强、,电设需回备要路制进须造行同厂外时家部切出电断具源习高高题中中电资资源料料,试试线卷卷缆试切敷验除设报从完告而毕与采,相用要关高进技中行术资检资料查料试和,卷检并主测且要处了保理解护。现装场置设。备高中资料试卷布置情况与有关高中资料试卷电气系统接线等情况,然后根据规范与规程规定,制定设备调试高中资料试卷方案。