单片机c51应用编程与实践(c51单片机怎么自学编程)
一.先来了解一下什么是单片机?
1.硬件知识
单片机是在一片半导体硅片上集成了CPU,存储器(RAM,ROM),并行I/O口,串行I/O口,定时器/计数器(重点内容),以及中断系统,系统时钟,总线等。
说白了就是一个微型计算机,因为具有计算机的软硬件环境。
通常在国际上,我们习惯把它称为嵌入式控制器(类似于STM32系列单片机),微控制器。单片机的使用范围比较广。
2.实物展示
慧净开发板实物图
3.慧净开发板的原理图
慧净的开发板比较适用于初学者,上手比较快。(目前已经更新,功能更强大,值得一学)
4.应用领域
①它可以构成一些智能化的产品,实现仪器设备的智能化,自动化,可以采用单片机来实现数据采集与处理,具有自动化程度高,功耗小,抗干扰能力强等特点。
一.先来了解一下什么是单片机?
1.硬件知识
单片机是在一片半导体硅片上集成了CPU,存储器(RAM,ROM),并行I/O口,串行I/O口,定时器/计数器(重点内容),以及中断系统,系统时钟,总线等。
说白了就是一个微型计算机,因为具有计算机的软硬件环境。
通常在国际上,我们习惯把它称为嵌入式控制器(类似于STM32系列单片机),微控制器。单片机的使用范围比较广。
2.实物展示
慧净开发板实物图
3.慧净开发板的原理图
慧净的开发板比较适用于初学者,上手比较快。(目前已经更新,功能更强大,值得一学)
4.应用领域
①它可以构成一些智能化的产品,实现仪器设备的智能化,自动化,可以采用单片机来实现数据采集与处理,具有自动化程度高,功耗小,抗干扰能力强等特点。
比如示波器
②在家用电器领域,单片机已经被广泛的用于实现家用电器产品的智能化和自动化,目前使用的电冰箱,洗衣机,空调,热水器等等。
比如空调
③在计算机外设当中的应用,如果大家有条件打开一些,类似影响打印机,计算机键盘,软盘驱动器,这样一些计算机的外围设备,大家可以发现,里面有很多都已采用了单片机来作为对一些外部设备的控制单元。
比如键盘
④在工业测控领域当中的应用,在这个应用当中,常常用单片机来构成一些测量系统,可以实现,工业现场的数据采集与处理的智能化,可以以多功能的数字显示,和宽量程的自动切换,取代我们传统仪器的模拟显示等工作。
比如机床
二,引脚以及I/O接口(重点内容)
1.引脚(共40)
(1) 主电源引脚 Vcc:接 +5V 电源正端。 Vss::接 +5V 电源地端。
(2) 外接晶体引脚 XTAL1 :片内反相放大器输入端 XTAL2 : 片内反相放大器输出端
2.I/O接口(P0-P3,每组8个.0-.7共四组32个)
输入/输出引脚 P0.0-P0.7:P0 口的 8 个引脚。在不接片外存储器与不扩展 I/O 接口时,作为准双向输入/输 出接口(在输入时需要附加条件的双向输入输出口,称为准双向 I/O 口)。
在接有片外存储器或扩展 I/O 接口时, P0 口分时复用为低 8 位地址总线和双向数据总线。 P1.0-P1.7:P1 口的 8 个引脚。可作为准双向 I/O 接口使用。
对于 52 子系列, P1.0 与 P1.1 还有 第二种功能: P1.0 可用作定时器/计数器 2 的计数脉冲输入端 T2;P1.1 可用作定时器/计数器 2 的 外部控制端 T2EX 。
P2.0-P2.7;P2 口的 8 个引脚。一般可作为准双向 I/O 接口;在接有片外存储器或扩展 I/O 接 口且寻址范围超过 256 个字节时, P2 口用为高 8 位地址总线。
P3.0-P3.7;P3 口的 8 个引脚。 ① 一般可作为准双向 I/O 接口; ② P3 口的第二功能如表
所示。
单片机
三.小试牛刀(流水灯)
主要是练习i/o口的使用
1.了解C语言的语法知识以及结构(这里不多讲)
C51基本语法知识:数据类型,存储类型、书写格式等及举例(必须要会使用)
2.语言格式的练习
延时函数要会写
避免出现这类写法
注意:初学者一定要注意编程的规范问题。
3.MCS-51并行接口应用——流水灯设计
①LED的驱动方法
注意是低电平
②发光二极管的原理问题阐述(有图有真相)
③实现效果
从左到右的流水灯的实现
片内I/O端口作为输出使用时,最常用的应用是控制相应的
I/O引脚上的LED点亮与熄灭。
8个发光二极管LED0~LED7经限流电阻分别接至P1口的P1.0~P1.7引脚上,阳极共同接高电平。编程来实现发光二极管的从左到右的流水点亮,即按照LED0→LED1→┉→LED7的顺序,每次点亮一个发光二极管,延时一段时间后熄灭这个发光二极管,然后点亮下一个发光二极管,重复循环。
④原理图
protues仿真图
⑤程序流程图
⑥延时程序
⑦延时程序的设计
⑧延时时间的计算
也就是说没做一次循环为1US
⑩程序设计(采用比较容易懂的方法)
设计方法:八个LED从左往右依次为LED0-LED7。低电平低电平点亮
比如让LED0亮 用八位二进制码表示为 1111 1110 用16进制表示为0Xfe
比如让LED1亮 用八位二进制码表示为 1111 1101 用16进制表示为0Xfc
…
一次类推
比如让LED7亮 用八位二进制码表示为 0111 1111 用16进制表示为0X7f
具体设计
#include <reg52.h> /*头文件 */ #define uchar unsigned char /*定义类型 */ #define uint unsigned int void delay_500ms() /*延时函数*/ { uchar i,j,k; for (i=5;i>0;i--) { for (j=200;j>0;j--) { for (k=250;k>0;k--); } } } void main( ) /*主程序*/ { while(1) { P1=0xfe; /*LED0点亮 */ delay_500ms(); P1=0xfc; delay_500ms(); P1=0xfb; delay_500ms(); P1=0xf7; delay_500ms(); P1=0xef; delay_500ms(); P1=0xcf; delay_500ms(); P1=0xbf; delay_500ms(); P1=0x7f; delay_500ms(); delay_500ms(); P1=0xff; /*全灭 */ delay_500ms(); } }