C51单片机C语言编程基础和实例

上传人:工**** 文档编号:470446676 上传时间:2023-11-02 格式:DOC 页数:56 大小:700.50KB
返回 下载 相关 举报
C51单片机C语言编程基础和实例_第1页
第1页 / 共56页
C51单片机C语言编程基础和实例_第2页
第2页 / 共56页
C51单片机C语言编程基础和实例_第3页
第3页 / 共56页
C51单片机C语言编程基础和实例_第4页
第4页 / 共56页
C51单片机C语言编程基础和实例_第5页
第5页 / 共56页
点击查看更多>>
资源描述

《C51单片机C语言编程基础和实例》由会员分享,可在线阅读,更多相关《C51单片机C语言编程基础和实例(56页珍藏版)》请在金锄头文库上搜索。

1、基础知识:C51单片机编程基础单片机的外部结构: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、INTO、INT1、T

2、O、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位的字节变量,则自

3、动截断为低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 /该头文档中有单片机内部资源的符号化定义,其中包含P1.32. void main( void ) /void表示没有输入参数,

4、也没有函数返值,这入单片机运行的复位入口3. 4. P1_3 = 1;/给P1_3赋值1,引脚P1.3就能输出高电平 VCC5. While( 1 );/ 死循环,相当 LOOP: goto LOOP;6. 注意:P0的每个引脚要输出高电平时,必须外接上拉电阻(如 4K7)至VCC电 源。在某引脚输出低电平的编程方法:(比如P2.7引脚)代码1.#include /该头文档中有单片机内部资源的符号化定义,其中包含P2.72.void main(位入口void )/void表示没有输入参数,也没有函数返值,这入单片机运行的复3.4.P2_7 = 0;/给P2_7赋值0,弓I脚P2.7就能输出低电

5、平 GND5.While( 1 );/ 死循环,相当 LOOP: goto LOOP;6.在某引脚输出方波编程方法:(比如P3.1引脚)代码1.#include /该头文档中有单片机内部资源的符号化定义,其中包含P3.12. void main( void ) /void表示没有输入参数,也没有函数返值,这入单片机运行的复位入口3.4.While( 1 )/非零表示真,如果为真则执行下面循环体的语句5.6.P3_1 = 1;II给P3_1赋值1,引脚P3.1就能输出高电平 VCC7.P3_1 = 0;II给P3_1赋值0,引脚P3.1就能输出低电平 GND8./由于一直为真,所以不断输岀高、低

6、、高、低,从而形成方波9.将某引脚的输入电平取反后,从另一个引脚输出:(比如P0.4 = NOT( P1.1)代码1.#include /该头文档中有单片机内部资源的符号化定义,其中包含P0.4 和 P1.12.void main(void ) IIvoid表示没有输入参数,也没有函数返值,这入单片机运行的复3.4.5.6.7.8.9.10.位入口P1_1 = 1;While( 1 )if ( P1_1 = 1 P0_4 = 0; else/初始化。P1.1作为输入,必须输出高电平/IIII P0_4 = 0; II非零表示真,如果为真则执行下面循环体的语句/读取P1.1,就是认为P1.1为输

7、入,如果P1.1输入高电平VCCII给P0_4赋值0,引脚P0.4就能输出低电平 GND否则P1.1输入为低电平GND给P0_4赋值0,引脚P0.4就能输出低电平 GND11. P0_4 = 1; /给P0_4赋值1,引脚P0.4就能输出高电平 VCC12. /由于一直为真,所以不断根据 P1.1的输入情况,改变 P0.4的输出电平13. 将某端口 8个引脚输入电平,低四位取反后,从另一个端口 8个引脚输出:(比如 P2 = NOT( P3 )代码1.#include /该头文档中有单片机内部资源的符号化定义,其中包含P2 和 P32.void main(void ) /void表示没有输入参

8、数,也没有函数返值,这入单片机运行的复3.4.5.6.位入口P3 = 0xff;电平While( 1 )/初始化。P3作为输入,必须输出高电平,同时给 P3 口的8个引脚输出高/非零表示真,如果为真则执行下面循环体的语句取反的方法是异或1,而不取反的方法则是异或 07. P2 = P3A0x0f/读取P3,就是认为P3为输入,低四位异或者1,即取反,然后输出8. II由于一直为真,所以不断将P3取反输出到P29. 注意:一个字节的8位D7、D6至D0,分别输出到P3.7、P3.6至P3.0,比如P3=0x0f,则 P3.7、P3.6、P3.5、P3.4 四个引脚都输出低电平,而 P3.3、P3

9、.2、P3.1、P3.0四个引脚都输出高电平。同样,输入一个端口 P2,即是将P2.7、P2.6 至P2.0,读入到一个字节的 8位D7、D6至D0。#ee0000; FONT-FAMILY:宋体初始化。P1.1作为输入,必须输出高电平5. While( 1 )/非零表示真,如果为真则执行下面循环体的语句6. 7. if ( P1_1 = 1 )/读取P1.1,就是认为 P1.1为输入,如果 P1.1输入高电平 VCC8. P0_4 = 0; /给P0_4赋值0,弓I脚P0.4就能输出低电平 GND9. else/否则P1.1输入为低电平GND10. / P0_4 = 0; /给P0_4赋值0

10、,弓I脚P0.4就能输出低电平 GND11. P0_4 = 1; /给P0_4赋值1,引脚P0.4就能输出高电平 VCC12. /由于一直为真,所以不断根据P1.1的输入情况,改变P0.4的输出电平13. 将某端口 8个引脚输入电平,低四位取反后,从另一个端口 8个引脚输出:(比如 P2 = NOT( P3 )代码1. #include /该头文档中有单片机内部资源的符号化定义,其中包含P2和P32. void main( void ) /void表示没有输入参数,也没有函数返值,这入单片机运行的复位入口3. 4. P3 = 0xff;/初始化。P3作为输入,必须输出高电平,同时给 P3 口的

11、8个引脚输出高电平5. While( 1 )/非零表示真,如果为真则执行下面循环体的语句6. /取反的方法是异或1,而不取反的方法则是异或07. P2 = P3A0x0f/读取P3,就是认为P3为输入,低四位异或者1,即取反,然后输出8. /由于一直为真,所以不断将 P3取反输出到P29. 注意:一个字节的8位D7、D6至DO,分别输出到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,读入到一个字节的

12、8位D7、D6至D0第一节:单数码管按键显示 单片机最小系统的硬件原理接线图:1. 接电源:VCC ( PIN40 )、GND( PIN20 )。加接退耦电容 0.1uF2. 接晶体:X1( PIN18 )、X2( PIN19 )。注意标出晶体频率(选用 12MHz),还有辅助电容30pF3. 接复位:RES( PIN9 )。接上电复位电路,以及手动复位电路,分析复位工作原理4. 接配置:EA( PIN31 )。说明原因。发光二极的控制:单片机I/O输出将一发光二极管LED的正极(阳极)接P1.1,LED的负极(阴极)接地 GND。 只要P1.1输出高电平VCC, LED就正向导通(导通时 L

13、ED上的压降大于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. #include2. #define LED P1A1 /3.#d

14、efine KEY_ON PM6 /4.#define KEY_OFF PM7 /用符号LED代替P1_1用符号KEY_ON代替P1_6用符号 KEY_OFF代替P1_75. void main( void )/单片机复位后的执行入口, void 表示空,无输入参数,无返回值6. 7. KEY_ON = 1;/作为输入,首先输出高,接下KEY_ON, P1.6则接地为0,否则输入为18. KEY_OFF = 1;/作为输入,首先输出高,接下KEY_OFF,P1.7则接地为0,否则输入为19. 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个发光二

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 资格认证/考试 > 自考

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号