PIC单片机C语言程序设计实例之C语言if语句与LED数码管显示

if 语句也称为条件语句,是c 语言中转移语句之一。在设计c 语言程序时,常常要根据某些条件以决定程序运行的流向,这时就需要if 语句来实现。任何if语句(包括else 部分),都可当作一条c 语句使用。
格式:if(表达式) 语句1
else 语句2
其中else 为选择项;即可有、可无的。所以条件语句,可分为两种;if 语句和if— else 语句。
式中的表达式为关系表达式或逻辑表达式以及由条件运算符(有关运算符将在后文介绍)构成的一种表达式。
功能:先计算if 中的条件表达式,其值为真(满足条件时),执行语句1 ;其值为假(不满足条件时),若有else,就执行语句2。
if 语句常用有几种形式:
⑴ if(条件表达式) 语句
该形式无选择项else。
例1 :if(a>b) c=b ;
∥满足条件a>b,将b 赋值给c
例2 :i f ( t t r = = 9 9 9 9 )ttr=0 ;
∥ 满足运算条件ttr==9999 ;将0 赋值给ttr
⑵ if(条件表达式) 语句1
else 语句2
例1 :if(a>b) c=b ;
∥满足a>b,将b 赋值给c
else c=a ;
∥ 不满足a>b 时, 将a 赋值给c
例2:若比较两个整量a、b,要求其大者送x,即可用if 语句实现;
⑶表达式赋值(简化式)的条件语句。读者在阅读一些书籍上的单片机c 语言程序时,会遇到条件语句的一种简化形式,其格式如下:
表达式1 ?表达式2 ;表达式3
如以上if 语句的形式⑵中的例2,即可简化为条件表达式的赋值语句;
if 语句尚有一些其他格式,这里暂略去。
3.led数码管显示的硬件电路
在电子技术中,数码管显示(0~9)是最常见的显示技术。数码管显示时,可用lcd(液晶),也可用led 数码管显示0~9 的数。这里首先介绍用pic16f84a控制的数码管led 的显示电路,如图3 所示。图3 是四位数码管的,也可以扩展更多的位或减少到一位数的显示。
pic16f84a 的引脚④ 是低电平复位端,外接复位按钮k0和r1、二极管d0 以及电容c0组成的复位电路。引脚、脚外接晶振(4m)和电容c1、c2组成的单片机时钟电路。ra4 位(脚③)外接微动开关按键,其用途按图3 电路具体功能而定,如该电路用于计数,k1 可作起动计数作用;如该电路用作时钟,k1 可作时钟人工预置起始时刻用。
pic16f84a 的portb 口,其中的rbo~bb6 位通过限流电阻r3~r9 与led 数码管笔段码a、b、c、d、e、f、g 分别对应相连。porta 口的ra3、ra2、ra1 和ra0 通过电阻r10~r13与三极管(pnp 型)v4~v1 的基极相连。三极管的集电极分别与对应的数码管的供电端(⑧、③脚)相连。三极管的发射极都接到电源+5v 上。该三极管v4~v1 用于数码管led 动态扫描时的电源开通信号。数码管上的符号dp 为数显时的小数点位,用户可按需要在其某位数码管的dp 上外接一只470ω 电阻和led(与电阻串联),用于四位数码管特征显示标记,如数码管计数时的百位段;记时的时位段等。
图3 电路的数码管led,笔者选用共阳型数码管,其实物的引脚和内部电路如图4 所示。为了读者使用方便, 所以图3中的数码管led 的电路是以实物结构绘制的。所述的图3 电路即将在后文的数码管led 计数和时钟(包括可预置的时钟)派上用场。
4.led数码管计数显示的软件流程
这里首先介绍利用四位led 数码管计数(0~9999)的显示技术,因为计数是单片机中a/d 转换,时钟电路的基础。根据图3 提供的硬件电路,用c语言编写的4 位加计数器的程序流程,如图5 所示。从该流程图看出:c 语言程序是以函数功能要求编写的,所用的函数都应给予定义或声明,然后由主函数main 调用,以完成电路计数(0~9999)的功能。
5.led数码管计数的c程序
根据图3 的硬件电路,用c 语言编写的0-9999 加计数器的源程序,命名为pic0.4.c,其程序清单如下:
说明:在上述的c 程序display(显示)函数中,其说明语句的无符号整形变量d,是一个重要的变量,由d 值决定了计数器每位显示值递增的时间。改变d 值,使d 值变大,每位递增的持续时间就长,这个特性,就是单片机计时(时钟)c 程序的基础。字段(seg7)给每位赋值后的延时,只决定显示值亮、灭的时间,这个时间是供人眼观察数码管显示值的视觉效应(连续感)。
读者在阅读上述c 程序时,请参看注释的说明,以便理解编写led 数码管计数(0~9999)程序的方法。在理解了上述程序之后,尽可能背诵上述程序,以便为后文中介绍的时钟程序、a/d 转换程序打下基础。

Sheba推出革命性的MEMS自动对焦执行器
移远通信与千寻位置达成合作,共同打造高精度定位车载前装通信模组
三年之后,说不定你能用上5G
几种彩电色解码块强行停止消色的方法
示波器可以测量什么电信号参数
PIC单片机C语言程序设计实例之C语言if语句与LED数码管显示
PQFN封装技术提高能效和功率密度
阿里巴巴近期以50亿元控股无线互联网、蓝牙芯片和其解决方案公司——乐鑫信息科技
ATA-L系列水声功率放大器的应用领域都有哪些
硅碱性蚀刻中的绝对蚀刻速率
NVIDIA正式获得Hopper商标申请 或创造出怪兽级的超级大核
断电延时继电器设计方案
74ls147和74ls148有什么区别
天津大学承办第十三届英国-欧洲-中国毫米波太赫兹技术研讨会
传感器和云之间发生了什么
元气满满少女风 小冰演绎朱主爱新歌《做梦》
Marvell发布极具突破性的64位双核SoC平台继续扩大打印行业领先优势
西藏航空西安基地完成了一架A330飞机的发动机更换工作
如何用Apache实现虚拟主机服务
苹果AirPods 2021年何去何从