‘壹’ 51单片机应用实例详解的内容简介
如果不是为了应付考试,那单片机的学习更应该强调系统的应用。 《51单片机应用实例详解》是《51单片机应用从零开始》的姊妹书,既可作为其“续集”以扩展学习单片机基础知识之后的系统应用,也可独立成册作为单片机从基础学习到系统应用的帮手。
《51单片机应用实例详解》在选材时,结合国内外重点大学一线教师的教学经验,并借鉴国外经典教材的写作手法,对51单片机的应用系统及局部知识进行了详实的介绍。除了每章中大量的单片机系统模块及有机系统的介绍外,“实例点拨”环节还展示了许多相对完整的单片机系统实例供读者学习、开发时参考。在多角度、多方面的实例化讲解中,读者既掌握了单片机系统开发的基本技能,还开阔了单片机流行应用的视野。
《51单片机应用实例详解》秉承《51单片机应用从零开始》一书语言生动风趣及讲解循序渐进的特点,在顾及实用性、技术性的同时,最大程度地提高了可读性,力求阐述得平实、通俗、易懂。《51单片机应用实例详解》适合作为电类本科、专科学生的参考用书及高职高专学生的单片机应用技术教材,也可作为无线电爱好者学习单片机的参考书。
‘贰’ 51单片机应用实例详解的介绍
51系列单片机不仅是国内用得最多的单片机之一,同时也是最适合上手学习单片机系统开发的一款单片机。《51单片机应用实例详解》主要以51系列单片机为核心控制器,从广度和深度上对其系统应用进行了梳理,通过《51单片机应用实例详解》的学习和实践,可以顺利完成多任务、多功能单片机系统的设计及开发,能对日常生活、生产中的一些测控系统进行自主设计及实施。书中丰富的实例及全面的应用讲解将能极大地开阔单片机系统设计者的思路,并为其设计提供蓝图和模块。
‘叁’ 51单片机C语言开发与实例的内容提要
书中列举了大量应用实例,着重介绍了51单片机的一些新技术及其应用方法,同时还介绍了几款简易编程器的编制和使用方法,使读者尽快、尽可能容易地掌握利用C51对MCS-51单片机进行开发的方法。
系统全面、突出重点、由浅入深、通俗易懂、学用结合、软硬兼备、实例丰富是本书的主要特色,因此,本书适用于具备一定电子技术基础和具有一定的单片机基础知识的学生、教师、单片机爱好者、电子制作爱好者、电器维修人员、电子产品开发设计者、工程技术人员阅读参考。
‘肆’ 51单片机 如何检测某个引脚是否为高低电平 求一个C源程序实例
sbitGO_OUT=P3^5;//需要检测的引脚
sbitLED=P3^4;//显示led引脚为低时候亮
voidmain()//主程序
{
while(1)//主循环
{
if(GO_OUT==0)
{
LED=1;//引脚为低led不亮
}
elseLED=0;//否则led点亮
}
}
‘伍’ C51单片机“冒泡法”排序实例
用keil调试下,就可以知道结果了。
感觉楼主的分析是正确的……
只是不清楚这个程序段的意图是对数组a[]的全部数据进行排序还是仅对其前9个数据排序。
printf("the unsorted numbers:\n");
for(i=0;i<9;i++)
printf("%bx",a[i]);
printf("\n");
printf("the sorted number:\n");
for(i=0;i<=10;i++)
printf("%bx",a[i]);
按常理,这两段应该是对应的,判断条件下面的那个更合理,按分析前面那段只打印未排序前的a[0]~a[8];后面那段却将11个数全部打印出来了。 (实际还应以调试结果为准)
‘陆’ 基于5151单片机嵌入式系统的实例
这个有很多实例,随便一个开发板配套光盘都有可以直接运行的实例。
‘柒’ 51单片机片选信号的确定,实例说明
51单片机任意IO都可以作为一个IC的片选信号,如P0.0接74HC245的片选,则
CLR P0.0 那么74HC245就选中工作。
‘捌’ 51单片机应用实例详解的图书目录
第1章 大转折——从学习单片机到应用单片机 1
1.1 如何利用单片机 1
1.2 哪些工具可以帮助我们 4
1.3 调试乃成功之母 13
1.4 实例点拨——无线鼠标 15
第2章 时刻准备着——扫除基础知识障碍 21
2.1 AT89S51单片机满足需要吗 22
2.2 管脚描述 25
2.3 工作时序问题 32
2.4 存储器组织 33
2.5 汇编语言 43
2.6 寻址方式与指令概述 45
2.7 定时/计数器 48
2.8 串行口通信 59
2.9 中断 65
2.10 实例点拨——啤酒装瓶系统中的单片机 69
第3章 系统的“脸蛋”——显示器 72
3.1 电子时钟的“脸蛋”——多位七段数码管 73
3.2 大屏幕的秘密——发光二极管点阵 88
3.3 计算器的“脸蛋”——段式液晶屏 97
3.4 “Hello, world!”——字符液晶屏 101
3.5 图形的显示——点阵液晶屏 108
3.6 绚丽的世界——彩色液晶屏 123
3.7 系统应用——中文液晶屏显示系统 125
第4章 从收录机到CD唱机——模拟与数字之间的转换 132
4.1 从数字温度计中学习模拟与数字的转换 134
4.2 单片机与A/D 139
4.3 单片机与D/A 144
4.4 如何选择A/D与D/A器件 149
4.5 系统应用——空调温度控制系统 151
第5章 凝固的数据——扩展存储器 156
5.1 透过电子密码锁观察片外存储器 157
5.2 半导体存储器的种类 161
5.3 单片机与片外程序存储器的接口 163
5.4 单片机与片外数据存储器的接口 167
5.5 存储器的地址解码 173
5.6 典型片外存储器的扩展接口电路 178
5.7 系统应用——串行片外存储器扩展实例( 接口) 184
第6章 触角的延伸——输入技术 199
6.1 常用开关 200
6.2 I/O口作为输入端口 202
6.3 I/O口的使用 206
6.4 使用8255扩充更多的I/O口 210
6.5 键盘 218
6.6 传感器与单片机 225
6.7 输入信号的调理 245
6.8 实例点拨——指纹安保系统 250
第7章 触角的延伸——输出技术 265
7.1 为控制电机准备 266
7.2 直流电机的控制 271
7.3 步进电机的控制 277
7.4 开集电极输出结构 283
7.5 逻辑家族及逻辑电平 288
7.6 通用输出技术 293
7.7 实例点拨——量程的自动转换 300
第8章 信息沟通无极限——通信技术 308
8.1 串行通信的魅力 309
8.2 两个单片机之间的沟通 314
8.3 多个单片机之间的沟通 323
8.4 单片机与计算机的沟通 331
8.5 单片机的无线通信 354
8.5.1 利用红外线检测物体 355
8.5.2 利用红外线传输数据 373
8.5.3 单片机与蓝牙通信 377
8.6 实例点拨——射频识别(RFID)系统 384
8.6.1 射频标签的秘密 385
8.6.2 射频识别系统规划 387
8.6.3 射频识别系统设计 388
第9章 启发设计的灵感——完整系统实例点拨 389
9.1 生理参数监护仪 391
9.1.1 心率的测量原理 392
9.1.2 系统规划与设计 394
9.2 电子器件测试仪 420
9.2.1 系统功能说明 421
9.2.2 电子器件测试仪软件设计 422
9.3 电话远程遥控器 435
9.3.1 电话线利用有道 436
9.3.2 电话远程遥控器设计 438
9.4 你准备好了吗 444
参考文献 446
附录A 51单片机指令集及用法示例 450
附录B 指令的执行代码表 472
附录C 中文字型码表 479
附录D 51单片机USB口下载线 483
附录E 基础逻辑门及常用数字电路芯片 484
附录F 霁ision3支持的单片机 488
附录G 51单片机伪指令 497
附录H 51单片机比较表 500
附录I ASCII码表 502
附录J 常见封装形式 506
附录K 常见芯片生产商 509
附录L 指纹传感器SM630通信协议 511
附录M 常用低容量存储器器件表(RAM、ROM) 516
附录N 希腊字母表 518
附录O 电阻阻值读取方法和色环定义 519
附录P 用于重定位和连接模块的指令介绍 521
附录Q AT89S51单片机特殊功能寄存器一览表 523
附录R 51单片机汇编程序保留字 530
‘玖’ 51单片机C语言应用程序设计实例精讲的内容简介
全书实例丰富,每个例子都调试通过,都有具体的设计思路、硬件电路、软件设计以及程序代码分析,同时附录里专门提供了实例配套实验箱内容,对于读者学习51单片机的应用开发提供了参考和指导价值。
《51单片机C语言应用程序设计实例精讲》中的所有程序代码都使用C语言实现,简单易学、易懂。《51单片机C语言应用程序设计实例精讲》适合计算机、自动化、电子及硬件等相关专业的学生进行学习,同时也可供从事51单片机开发的科研设计人员参考使用。
《51单片机C语言应用程序设计实例精讲》配有一张光盘,光盘里包括了书中所有的程序代码和电路图,读者稍加修改即可用于自己的设计,物超所值。
‘拾’ 单片机c语言编程100个实例
51单片机C语言编程实例 基础知识:51单片机编程基础 单片机的外部结构: 1. DIP40双列直插; 2. P0,P1,P2,P3四个8位准双向I/O引脚;(作为I/O输入时,要先输出高电平) 3. 电源VCC(PIN40)和地线GND(PIN20); 4. 高电平复位RESET(PIN9);(10uF电容接VCC与RESET,即可实现上电复位) 5. 内置振荡电路,外部只要接晶体至X1(PIN18)和X0(PIN19);(频率为主频的12倍) 6. 程序配置EA(PIN31)接高电平VCC;(运行单片机内部ROM中的程序) 7. P3支持第二功能:RXD、TXD、INT0、INT1、T0、T1 单片机内部I/O部件:(所为学习单片机,实际上就是编程控制以下I/O部件,完成指定任务) 1. 四个8位通用I/O端口,对应引脚P0、P1、P2和P3; 2. 两个16位定时计数器;(TMOD,TCON,TL0,TH0,TL1,TH1) 3. 一个串行通信接口;(SCON,SBUF) 4. 一个中断控制器;(IE,IP) 针对AT89C52单片机,头文件AT89x52.h给出了SFR特殊功能寄存器所有端口的定义。 C语言编程基础: 1. 十六进制表示字节0x5a:二进制为01011010B;0x6E为01101110。 2. 如果将一个16位二进数赋给一个8位的字节变量,则自动截断为低8位,而丢掉高8位。 3. ++var表示对变量var先增一;var—表示对变量后减一。 4. x |= 0x0f;表示为 x = x | 0x0f; 5. TMOD = ( TMOD & 0xf0 ) | 0x05;表示给变量TMOD的低四位赋值0x5,而不改变TMOD的高四位。 6. While( 1 ); 表示无限执行该语句,即死循环。语句后的分号表示空循环体,也就是{;} 在某引脚输出高电平的编程方法:(比如P1.3(PIN4)引脚) 代码 1. #include <AT89x52.h> //该头文档中有单片机内部资源的符号化定义,其中包含P1.3 2. void main( void ) //void 表示没有输入参数,也没有函数返值,这入单片机运行的复位入口 3. { 4. P1_3 = 1; //给P1_3赋值1,引脚P1.3就能输出高电平VCC 5. While( 1 ); //死循环,相当 LOOP: goto LOOP; 6. } 注意:P0的每个引脚要输出高电平时,必须外接上拉电阻(如4K7)至VCC电源。 在某引脚输出低电平的编程方法:(比如P2.7引脚) 代码 1. #include <AT89x52.h> //该头文档中有单片机内部资源的符号化定义,其中包含P2.7 2. void main( void ) //void 表示没有输入参数,也没有函数返值,这入单片机运行的复位入口 3. { 4. P2_7 = 0; //给P2_7赋值0,引脚P2.7就能输出低电平GND 5. While( 1 ); //死循环,相当 LOOP: goto LOOP; 6. } 在某引脚输出方波编程方法:(比如P3.1引脚) 代码 1. #include <AT89x52.h> //该头文档中有单片机内部资源的符号化定义,其中包含P3.1 2. void main( void ) //void 表示没有输入参数,也没有函数返值,这入单片机运行的复位入口 3. { 4. While( 1 ) //非零表示真,如果为真则执行下面循环体的语句 5. { 6. P3_1 = 1; //给P3_1赋值1,引脚P3.1就能输出高电平VCC 7. P3_1 = 0; //给P3_1赋值0,引脚P3.1就能输出低电平GND 8. } //由于一直为真,所以不断输出高、低、高、低……,从而形成方波 9. } 将某引脚的输入电平取反后,从另一个引脚输出:( 比如 P0.4 = NOT( P1.1) ) 代码 1. #include <AT89x52.h> //该头文档中有单片机内部资源的符号化定义,其中包含P0.4和P1.1 2. void main( void ) //void 表示没有输入参数,也没有函数返值,这入单片机运行的复位入口 3. { 4. P1_1 = 1; //初始化。P1.1作为输入,必须输出高电平 5. While( 1 ) //非零表示真,如果为真则执行下面循环体的语句 6. { 7. if( P1_1 == 1 ) //读取P1.1,就是认为P1.1为输入,如果P1.1输入高电平VCC 8. { P0_4 = 0; } //给P0_4赋值0,引脚P0.4就能输出低电平GND 2 51单片机C语言编程实例 9. else //否则P1.1输入为低电平GND 10. //{ P0_4 = 0; } //给P0_4赋值0,引脚P0.4就能输出低电平GND 11. { P0_4 = 1; } //给P0_4赋值1,引脚P0.4就能输出高电平VCC 12. } //由于一直为真,所以不断根据P1.1的输入情况,改变P0.4的输出电平 13. } 将某端口8个引脚输入电平,低四位取反后,从另一个端口8个引脚输出:( 比如 P2 = NOT( P3 ) ) 代码 1. #include <AT89x52.h> //该头文档中有单片机内部资源的符号化定义,其中包含P2和P3 2. void main( void ) //void 表示没有输入参数,也没有函数返值,这入单片机运行的复位入口 3. { 4. P3 = 0xff; //初始化。P3作为输入,必须输出高电平,同时给P3口的8个引脚输出高电平 5. While( 1 ) //非零表示真,如果为真则执行下面循环体的语句 6. { //取反的方法是异或1,而不取反的方法则是异或0 7. P2 = P3^0x0f //读取P3,就是认为P3为输入,低四位异或者1,即取反,然后输出 8. } //由于一直为真,所以不断将P3取反输出到P2 9. } 注意:一个字节的8位D7、D6至D0,分别输出到P3.7、P3.6至P3.0,比如P3=0x0f,则P3.7、P3.6、P3.5、P3.4四个引脚都输出低电平,而P3.3、P3.2、P3.1、P3.0四个引脚都输出高电平。同样,输入一个端口P2,即是将P2.7、P2.6至P2.0,读入到一个字节的8位D7、D6至D0。 第一节:单数码管按键显示 单片机最小系统的硬件原理接线图: 1. 接电源:VCC(PIN40)、GND(PIN20)。加接退耦电容0.1uF 2. 接晶体:X1(PIN18)、X2(PIN19)。注意标出晶体频率(选用12MHz),还有辅助电容30pF 3. 接复位:RES(PIN9)。接上电复位电路,以及手动复位电路,分析复位工作原理 4. 接配置:EA(PIN31)。说明原因。 发光二极的控制:单片机I/O输出 将一发光二极管LED的正极(阳极)接P1.1,LED的负极(阴极)接地GND。只要P1.1输出高电平VCC,LED就正向导通(导通时LED上的压降大于1V),有电流流过LED,至发LED发亮。实际上由于P1.1高电平输出电阻为10K,起到输出限流的作用,所以流过LED的电流小于(5V-1V)/10K = 0.4mA。只要P1.1输出低电平GND,实际小于0.3V,LED就不能导通,结果LED不亮。 开关双键的输入:输入先输出高 一个按键KEY_ON接在P1.6与GND之间,另一个按键KEY_OFF接P1.7与GND之间,按KEY_ON后LED亮,按KEY_OFF后LED灭。同时按下LED半亮,LED保持后松开键的状态,即ON亮OFF灭。 代码 1. #include <at89x52.h> 2. #define LED P1^1 //用符号LED代替P1_1 3. #define KEY_ON P1^6 //用符号KEY_ON代替P1_6 4. #define KEY_OFF P1^7 //用符号KEY_OFF代替P1_7 5. void main( void ) //单片机复位后的执行入口,void表示空,无输入参数,无返回值 6. { 7. KEY_ON = 1; //作为输入,首先输出高,接下KEY_ON,P1.6则接地为0,否则输入为1 8. KEY_OFF = 1; //作为输入,首先输出高,接下KEY_OFF,P1.7则接地为0,否则输入为1 9. While( 1 ) //永远为真,所以永远循环执行如下括号内所有语句 10. { 11. if( KEY_ON==0 ) LED=1; //是KEY_ON接下,所示P1.1输出高,LED亮 12. if( KEY_OFF==0 ) LED=0; //是KEY_OFF接下,所示P1.1输出低,LED灭 13. } //松开键后,都不给LED赋值,所以LED保持最后按键状态。 14. //同时按下时,LED不断亮灭,各占一半时间,交替频率很快,由于人眼惯性,看上去为半亮态 15. } 数码管的接法和驱动原理 一支七段数码管实际由8个发光二极管构成,其中7个组形构成数字8的七段笔画,所以称为七段数码管,而余下的1个发光二极管作为小数点。作为习惯,分别给8个发光二极管标上记号:a,b,c,d,e,f,g,h。对应8的顶上一画,按顺时针方向排,中间一画为g,小数点为h。 我们通常又将各二极与一个字节的8位对应,a(D0),b(D1),c(D2),d(D3),e(D4),f(D5),g(D6),h(D7),相应8个发光二极管正好与单片机一个端口Pn的8个引脚连接,这样单片机就可以通过引脚输出高低电平控制8个发光二极的亮与灭,从而显示各种数字和符号;对应字节,引脚接法为:a(Pn.0),b(Pn.1),c(Pn.2),d(Pn.3),e(Pn.4),f(Pn.5),g(Pn.6),h(Pn.7)。 如果将8个发光二极管的负极(阴极)内接在一起,作为数码管的一个引脚,这种数码管则被称为共阴数码管,共同的引脚则称为共阴极,8个正极则为段极。否则,如果是将正极(阳极)内接在一起引出的,则称为共阳数码管,共同的引脚则称为共阳极,8个负极则为段极。 以单支共阴数码管为例,可将段极接到某端口Pn,共阴极接GND,则可编写出对应十六进制码的七段码表字节数据