完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
分享PIC单片机的C语言程序一实例
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 #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[tene***it]; //给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数码管的计数(动态扫描)显示。 |
|
相关推荐
1 个讨论
|
|
【敏矽微ME32G070开发板免费体验】使用coremark测试敏矽微ME32G070 跑分
250 浏览 0 评论
【敏矽微ME32G070开发板免费体验】开箱+点灯+点亮OLED
473 浏览 2 评论
571 浏览 0 评论
嵌入式学习-飞凌嵌入式ElfBoard ELF 1板卡-内核编译之初次编译
260 浏览 0 评论
400 浏览 0 评论
【youyeetoo X1 windows 开发板体验】少儿AI智能STEAM积木平台
11977 浏览 31 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-20 15:00 , Processed in 0.602055 second(s), Total 42, Slave 34 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号