单片机C语言编程相对于汇编语言来讲入门比较容易,不需要对硬件理解那么深刻,有C语言基础的人学习起来更有优势。单片机C语言编程入门只需要学会编写简单的输入、输出控制即可,入门后再根据需要逐步深入学习。
一、电路图
说明:仿真软件后台已默认是单片机最小系统,本图没再添加电源、复位电路和时钟电路。P0口连接发光二极管,并且连接了上拉电阻和5V电源,P3口连接独立式按键。
二、单片机C语言入门常用指令
1、#include(包含命令)
#include <reg51.h> //将指定的定义和声明文件加入程序中。
2、#define(宏定义命令)
#define D P0 //定义D为端口P0。
3、sbit(位定义)
sbit D1=P0^0; //定义D1为引脚P0.0。
3、if(条件判断指令)
if (条件1)
程序a;
else(条件2)
程序b; //条件1满足,执行程序a;条件2满足,执行程序b;
4、for(循环指令)
for(int i=0;i<8;i++)
{ } //i为整型变量,小于8时一直循环大括号内容。
5、while(循环指令)
while (表达式)
{
语句;
} //表达式成立,执行大括号里内容。
三、入门任务讲解:
1、单片机控制流水灯D1-D8(输出练习)
(1)分析:根据上图所示,P0口连接发光二极管正极,所以P0口要输出高电平才能使发光二极管导通。大部分电路P0连接发光二极管负极,只要输出低电平就可以导通,并且减少了上拉电阻。
(2)程序及注释
#include//引用52单片机头文件 sbit D1=P0^0; sbit D2=P0^1; sbit D3=P0^2; sbit D4=P0^3; sbit D5=P0^4; sbit D6=P0^5; sbit D7=P0^6; sbit D8=P0^7; /*位定义做流水灯,入门容易;也可端口定义,#define D P0*/ delay() //延时函数 { unsigned char i,j; //定义无符号字符型,也可用int定义为整型变量 for(i=0;i<2;i++) //外层循环,这里不加分号。 for(j=0;j<112;j++); //内层循环,加分号,表示后面不执行任何指令 } main() //主函数 { D1=0; D2=0; D3=0; D4=0; D5=0; D6=0; D7=0; D8=0; /*初始灯处于熄灭状态。也可for循环for(int i=1;i<9;i++) {Di=0;}*/ while(1) //1表示条件永远成立,这里使用while形成死循环。{ D1=1; //点亮第1盏灯 delay(); //点亮的时间 D1=0; //熄灭第1盏灯 delay(); //熄灭的时间 D2=1; //点亮第2盏灯 delay(); //点亮的时间 D2=0; //熄灭第2盏灯 delay(); //熄灭的时间 D3=1; //点亮第3盏灯 delay(); //点亮的时间 D3=0; //熄灭第3盏灯 delay(); //熄灭的时间 D4=1; //点亮第4盏灯 delay(); //点亮的时间 D4=0; //熄灭第4盏灯 delay(); //熄灭的时间 D5=1; //点亮第5盏灯 delay(); //点亮的时间 D5=0; //熄灭第5盏灯 delay(); //熄灭的时间 D6=1; //点亮第6盏灯 delay(); //点亮的时间 D6=0; //熄灭第6盏灯 delay(); //熄灭的时间 D7=1; //点亮第7盏灯 delay(); //点亮的时间 D7=0; //熄灭第7盏灯 delay(); //熄灭的时间 D8=1; //点亮第8盏灯 delay(); //点亮的时间 D8=0; //熄灭第8盏灯 delay(); //熄灭的时间 } } /*也可以使用for循环,参考初始定义部分注释,流水就是等依次点亮,熄灭的过程 */
2、按键K1时D1-D8开始流水(输入输出练习)
(1)分析:通常按键一端接引脚,另一端接地。按键接通时,输入单片机引脚的电平为低电平0。判断是否按下,使用if指令进行判断。按键按下时,会有抖动,使用延时消除抖动。
(2)程序及注释:
#include//引用52单片机头文件 sbit D1=P0^0; sbit D2=P0^1; sbit D3=P0^2; sbit D4=P0^3; sbit D5=P0^4; sbit D6=P0^5; sbit D7=P0^6; sbit D8=P0^7; //位定义,也可以整个端口定义,#define D P0 sbit K1=P3^0; //定义K1连接引脚P3.0。 delay() //延时函数 { unsigned char i,j; //定义无符号字符型 for(i=0;i<2;i++) //外层循环,这里不加分号 for(j=0;j<112;j++); //内循环加分号,表示后面不执行任何指令 } main() //主函数 { D1=0; D2=0; D3=0; D4=0; D5=0; D6=0; D7=0; D8=0; //也可以for循环for(int i=1;i<9;i++) {Di=0;} while(1) //使用while形成死循环,即灯一直流水。 { if(K1==0) //按键按下时引脚接地,即等于0。 { delay(); //延时一下,防抖动 if(K1==0) //再断按键是否按下,按下则流水,否则退出。 { D1=1; //点亮第1盏灯 delay(); //点亮的时间 D1=0; //熄灭第1盏灯 delay(); //熄灭的时间 D2=1; //点亮第2盏灯 delay(); //点亮的时间 D2=0; //熄灭第2盏灯 delay(); //熄灭的时间 D3=1; //点亮第3盏灯 delay(); //点亮的时间 D3=0; //熄灭第3盏灯 delay(); //熄灭的时间 D4=1; //点亮第4盏灯 delay(); //点亮的时间 D4=0; //熄灭第4盏灯 delay(); //熄灭的时间 D5=1; //点亮第5盏灯 delay(); //点亮的时间 D5=0; //熄灭第5盏灯 delay(); //熄灭的时间 D6=1; //点亮第6盏灯 delay(); //点亮的时间 D6=0; //熄灭第6盏灯 delay(); //熄灭的时间 D7=1; //点亮第7盏灯 delay(); //点亮的时间 D7=0; //熄灭第7盏灯 delay(); //熄灭的时间 D8=1; //点亮第8盏灯 delay(); //点亮的时间 D8=0; //熄灭第8盏灯 delay(); //熄灭的时间 } } } } /*也可以使用for循环,参考初始定义部分注释,流水就是等依次点亮,熄灭的过程 */