1.赋值语句和赋值表达
1)赋值语句赋值语句是C语言中最常用的一种语句,如公式中的计算,一般都是通过赋值语句完成的,赋值语句的格式为:
标识符二表达式;
等式左边的标识符,代表变量的标识符,该变量是除函数以外的一种变量。等式右边的表达式,可以是任何一种C表达式。赋值语句的执行过程算法规则是,首先计算等式右边的表达式,再将计算的结果(值)作为变量的值,赋给等式左边的标识符(变量)。
赋值表达式的使用频率很高,在PIC单片机C语言实例1-5中,赋值语句曾多次出现,如TRISB =Ox00;INTCON=0x00;TRISA=Ox 1 F;RBO=! RBO:
注意:这里的‘,=”号,在C语言中不是等号,而是代表将等式右边的计算值,赋给等式左边的变量,如RBO=! RBO,即先对RBO取反(值),再送给等式左边的RBO。这点初学C语言者很容易弄错!C语言中的等号应该是“二二”。
2)赋值表达式赋值表达式是C语言中一种特殊形式的赋值,它不能独立构成语句,只能在赋值语句的表达式中应用。赋值表达式的格式为:
变量二表达式
其执行过程与赋值语句相同。例如,赋值语句:m=a+(b=c+d)中的赋值表达式b=c+d属于赋值语句的中间结果(b),中间结果(b)会在该程序中该语句之后使用,从而省去相同的计算,还可以节省程序空间和运行时间。
2.循环语句
循环语句是C语句重复结构的组成部分。C语言循环语句有三种形式:while语句、do-while语句和for语句。循环语句按循环条件控制循环次数,但可在循环体中用break(间断语句)或return(返回语句)来终止循环,还可用continue继续语句)终止当前循环周期中的操作,使控制进人下一循环,继续执行。
1)while语句while语句的格式为:
while(条件表达式)语句1
可以看出,while循环结构简单,仅有条件部分,其他成分(如增量等)应另外安排。正因为如此.while语句执行过程是首先判断while中的“条件表达式’,中的条件是否满足,满足,就执行while语句中的语句;不满足,就退出循环。当while中的条件一开始就为0时,则语句一次也不执行;当while中的条件为1 }}' , while语句无限循环。可见while语句的使用极其灵活多样。
2) do -while语句do -while语句的格式为:do
语句
while(条件表达式犷1
语句;
其执行过程是不管while语句中的条件表达式,首先执行一次d。中的语句,而后再进行while中的条件判断,若满足条件,则返回重新执行do中的语句,直到while中表达式不满足条件或0时,才退出循环。
注意:即使while中的表达式一开始就为‘,0”,其do中的语句也要执行一次。
3)for语句for循环语句包括计数器初始化、条件及增量等,其格式为:
for(初始化表达式,条件表达式,士曾量表达式)
语句;
其执行过程是,先求解初始化表达式,再判断条件表达式,若满足条件要求,则执行for中的语句,然后求解增量表达式,之后又判断条件表达式,若不能满足条件,则执行for语句下面的语句。
3IF语句
iF晤句又称条件语句。在程序设计时,若需根据某些条件,来决定程序的流向,常用iflA句完成。所以,if语句又称转移语句。i石吾句有三种格式,限于版面,这里仅介绍程序实例6中要用到的一种格式:
If(条件表达式)
语句
例如:if(a>b)
c=d//如条件中a>b,则d赋值给
iflA句中的表达式,可以是关系
表达式,算术表达式等多种,其执行过程是先判断if中的条件,若满足该条件,就执行if中的语句,若条件不满足,则转移到if语句的下一条语句。
十二、实例6
这里用PIC16F84A单片机(其他一型号同样等效)编辑一种C程序,其硬件电路如图7所示。电路功能:在单片机的B口外接两位LED数码管、在RA4位外接微动开关K,作电路启动信号。按动一下K,LED数码管开始从00-99自动计数,且反复循环,从而实现LED数码管计数的动态扫描功能。这里仅取两位计数显尔。读者很容易将程序扩展到多位数。为此命名该C程序为PIC06.c,其清单如下,#include <pic.h>//包含文件
#define PORTAIT (add,bit) ((unsigned)(&add)*8+(bit))
static bit PORT-2 @PORTAIT(PORTA,2);
static bit PORT_3 @PORTAIT(PORTA,3);
static bit PORT_4 @PORTAIT(PORTA,4);
//RA2、RA3、RA4的定义unsigned int ttr-0;
//ttr为无符号整型变量,并赋值。void delay(unsigned long int k)//定义带形参数K的延时子函数//延时函数开始
unsigned long int i;//i为无符号长整型变量
for(i=O;i<=k;i++)// for语句标准格式continue;
void display(unsigned int x)
产定义带形参数x的display子函数
//显示display子函数开始
unsigned int d="l",unit bit,ten_bit;
//自定义数码显示个位、十位及整型变量d并赋值I
unsigned char SEG7 [10]二(OxcO,Oxf9,Oxa4,
//数组定义和初始化
Oxb0,Ox99,Ox92,Ox82,Oxf8,Ox80,Ox90);unit bit="x"%10;
//数组个位表达并赋值自定义符ten_bit=x/10%10;
//数组10位表达并赋值自定义符while(d>0);//给定d=1的循环次数
PORTA=0x1凡
PORTB=SEG7[unit bit];
//给LED字段码的个位赋值给B C7RA3=0;//位选门个位RA3打开
delay (1000);//个位数显示延时约24ms
RA3=1;//位选门个位RA3关闭delay(10);//个位显示关闭约250ws
PORTB=SEG7[tenesbit];
//给LED字段码的十位赋值给B口
RA2=0;//位选门十位RA2打开(参看图6)
delay (1000);//第10位显示延时约24..a
=1;//位选门第l0ftRA2关
delay(10);//关闭约250wsvoid main;//定义main为函数长//主函数开始
TRISB=0x00;//给专用寄存器赋值TRISA=Ox 10;//初始化A,B
PORTB=0x40;
INTCON=0x00;//关中断PORTA=0x10;
tt-氏//整型变量ttrllR "0"值while(RA4);//判RA4位为1
//无限循环乍、//RA4位为0,执行以下语句
while(1);// while引导无限循环
display(ttr);//调用LED数码显示ttr++;// ttr自增加1
if(tts=99)//如果ttr等于99,ttre.0ttr-0;
1//如果ttr<99,LED继续增量显示//主函数结束
说明:1)上述C程序,只需在MPLAB IDE(高版本)和PICC C编译器中按已介绍的方法进行编译,并生成目标码hex,即可用PIC编程器将该目标码烧写到PIC16F84A中,利用图6观察LED数码管从b-99的反复显示。读者还可更改字段显示中的延时delay(k)量K值,以确认动态扫描的最佳延时(无频闪)。
2)若读者有兴趣将数码管扩到多位计数,可按程序中的思维方式增添百位、千位的自定义标识符,如hund-bit(百位)、thou-bit(千位)和对自定义百位、千位赋标准字符,女口:
hund-bit=x/100%10;
thoud-bit= x/1000%10;
再将十位、百位添到上述C程序中,即可完成多位数LED数码管的计数(动态扫描)显示。
文章评论(0条评论)
登录后参与讨论