我是我在学习郭天祥的《51单片机C语言教程》中的笔记。
【例2.2.1】编写程序,点亮第一个发光二极管。
#include //52系列单片机头文件
abit led1 = p1^0; //声明单片机P1口的第一位
void main() //主函数
{
led1 = 0; /*点亮第一个发光二极管*/
}
在代码中假如头文件有两种输入方法:
#include
#include "reg52.h"-->先从当前工程文件中搜,搜不到在从软件安装文件中搜
发光二极管:具有单向导电性,通过5mA左右电流即可发光。
锁存器:74HC573
51单片机一上电时,如果我们没有人为的控制其I/O口的状态,它所有的为控制的I/O口都将默认为高电平。
【例2.2.2】
#include //52系列单片机头文件
void main() //主函数
{
P1 = 0xaa;
}
这里的"P1 = 0xaa;"就是对单片机P1口的8个I/O口同时进行操作,“0x”表示后面的数据是十六进制形式表示的,十六进制的aa,转换成二进制是10101010,那么对应的发光二极管便是1,3,5,7亮,2,4,6,8灭。我们将0xaa转换成十进制后为170,也可直接对P0口进行十进制数的赋值。如"P1 = 170;",其效果是一样的,只是麻烦了一些。
【例2.3.1】编写一个完整的点亮发光二极管的程序。
#include //52系列单片机头文件
void main() //主函数
{
P1 = 0xfe;
while(1);
}
使用for语句的延时语句:
unsigned char i , j;
for(i=100;i>0;i--)
for(j=200;j>0;j--);
【例2.6.1】写出一个完整的调用子函数的例子,让实验板上第一个发光二极管以间隔500毫秒亮暗闪动。
#include //52系列单片机头文件
#define uint unsigned int //宏定义
sbit led1 = p1^0; //声明单片机P1口的第一位
void delay1s(); //声明子函数
void main() //主函数
{
while(1) //大循环
{
led1 = 0; /*点亮第一个发光二极管*/
delay1s(); //调用延时子函数
led1 = 1; /*关闭第一个发光二极管*/
delay1s(); //调用延时子函数
}
}
void delay1s() //子函数体
{
uint i , j;
for(i=500;i>0;i--) //i=500即延时约500毫秒
for(j=110;j>0;j--);
}
延时x毫秒的函数的写法:
void delayms(unsigned int xms)
{
uint i , j;
for(i=xms;i>0;i--)
for(j=110;j>0;j--);
}
【例2.7.1】写一个完整的程序,还是让一个小灯闪动,不过这次我们让他以亮200ms、灭800毫秒的方式闪动,完整代码如下:
#include //52系列单片机头文件
#define uint unsigned int //宏定义
sbit led1 = p1^0; //声明单片机P1口的第一位
void delayms(unit); //声明子函数
void main() //主函数
{
while(1) //大循环
{
led1 = 0; /*电亮第一个发光二极管*/
delayms(200); //延时200毫秒
led1 = 1; /*关闭第一个发光二极管*/
delayms(800); //延时800毫秒
}
}
void delayms(uint xms)
{
unit i , j;
for(i=xms;i>0;i--) //i=xms即延时约xms毫秒
for(j=110;j>0;j--);
}
移位操作:
(1)左移,“<<”操作符
(2)右移,“>>”操作符
(3)循环左移:_crol_函数
(4)循环右移:_cror_函数
【例2.8.1】左移程序。
#include //52系列单片机头文件
#define uchar unsigned char //宏定义
uchar a;
void main() //主函数
{
a = 0xaa;
while(1) //大循环
{
a = a << 1;
}
}
【例2.8.2】右移程序。
#include //52系列单片机头文件
#define uchar unsigned char //宏定义
uchar a;
void main() //主函数
{
a = 0xaa;
while(1) //大循环
{
a = a >> 1;
}
}
【例2.8.3】利用C51自带的库函数_crol_(),以间隔500ms,在实验板上实现流水灯程序。
#include //51系列单片机头文件
#include //包含_crol_函数所在的头文件
#define unit unsigned int //宏定义
#define uchar unsigned char
void delayms(uint); //声明子函数
uchar aa; //定义一个变量,用来给P1口赋值
void main() //主函数
{
aa = 0xfe; //赋初值11111110
while(1) //大循环
{
P1 = aa; //先点亮第一个发光管
delayms(500); //延时500毫秒
aa = _crol_(aa , 1); //将aa循环左移一位后再赋值给aa
}
}
void delayms(unit xms)
{
uint i , j;
for(i=xms;i>0;i--) //i=xms即延时约xms毫秒
for(j=110;j>0;j--);
}