单片机C语言入门之二for循环延时闪烁灯
这节我想补充下最基础的东西,变量和运算符,在程序执行过程中,其值不发生改变的量称为常量,其值可变的量称为变量。在程序中,常量是可以不经说明而直接引用的,而变量则必须先定义类型说明后使用。变量定义的一般形式为:类型说明符 变量名标识符;如:unsigned int num;基本数据类型的说明符,占用RAM大小和数值范围如下:
类型说明符 | 数的范围 | 字节数 |
char | -128~127 | 1 |
unsigned char | 0-255 | 1 |
int | -32768~32767 | 2 |
unsigned int | 0~65535 | 2 |
short int | -32768~32767 | 2 |
unsigned short int | 0~65535 | 2 |
long int | -2147483648~2147483647 | 4 |
unsigned long | 0~4294967295 | 4 |
循环结构是程序中一种很重要的结构。其特点是,在给定条件成立时,反复执行某程序段,直到条件不成立为止。给定的条件称为循环条件,反复执行的程序段称为循环体。C语言提供了多种循环语句,可以组成各种不同形式的循环结构。1.用goto语句和if语句构成循环;2.用while语句;3.用do-while语句;4.用for语句;这节我们来看循环结构之For循环。
上节提到过,main函数中必须有个while(1)大循环,否则程序只会跑一遍便停止了,while语句的形式为:while(表达式){语句}, while语句的语义是:计算表达式的值,当值为真(非0)时, 执行循环体语句。可以看到while(1),1永远为1表达式一直成立,他的语句就会一直在里面循环。
for语句最简单的应用形式如下:for(循环变量赋初值;循环条件;循环变量运算) {语句}
循环变量赋初值总是一个赋值语句, 它用来给循环控制变量赋初值; 循环条件是一个关系表达式,它决定什么时候退出循环;循环变量运算,运算后的新值让循环条件判断是否继续成立,这三个部分之间用半角“;”分开。
例如:for(i=1; i<=100; i++){语句},先给i赋初值1,然后判断i是否小于等于100, 若是,则执行循环体语句一次,之后i++值增加1。再重新判断是否满足,循环体语句执行第二次, 直到条件为假,即i>100时,结束循环。
由于单片机每条指令的执行是需要时间的,下面我们来用for循环让单片机原地打转延时一会,让一个小灯闪烁起来。第一遍不需要看懂,照抄一遍,然后编译成功看到效果了再去看每句的意思,代码如下:
#include<stc12.h> //STC12系列头文件 复制到工程目录下
sbit LEDK = P1^4;// 定义一个IO口控制三极管基极
sbit LED1 = P0^0; //定义一个IO口驱动LED
void main(void)
{
unsigned int i; //定义变量
LEDK=0; //置0使PNP型三极管导通LED负极接地
P0=0x00; //P0口电平初始化为0 关闭全部LED
P0M1=0x00;
P0M0=0xff; //P0口全部设置为推挽输出 见手册87页 IO口模式配置
while(1)
{
LED1 = 1;//置高点亮LED
for(i=0;i<60000;i++); //for一直跑6万次,延时一会
LED1 = 0;//置低关闭LED
for(i=0;i<60000;i++); //for一直跑6万次,延时一会
}
}
上面搞懂了,自己尝试写个流水灯吧,流程如下:先让第八个灯熄灭的同时点亮第一个延时一会,然后让第一个熄灭的同时点亮第二个延时一会,以此例推,直到第七个熄灭的同时点亮第八个延时一会。