PIC单片机C语言程序设计_5__第1页
PIC单片机C语言程序设计_5__第2页
PIC单片机C语言程序设计_5__第3页
PIC单片机C语言程序设计_5__第4页
PIC单片机C语言程序设计_5__第5页
已阅读5页,还剩1页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、就业技能JOBSEEKERS作 者丁锦滔PIC单片机C语言程序设计(5)(接上期)九、C语言的运算符C 语言提供了 30 多个运算符,范围很大,应用广。除了控制语句和输入、输出之外,几乎所有的基本操作,都是按照运算符来进行处理的,可见其在 C 语言中的重要性。1. C语言运算符的作用与分类C 语言的运算符可以灵活地与运算对象组合成运算表达式。按其在表达式中的作用,运算符可分成基本运算符和其他运算符。基本运算符有 8 类,即算术运算符、关系运算符、逻辑运算符、自增运算符、自减运算符、字位运算符、赋值运算符、条件运算符、逗号运算符等。而其他运算符有指针运算符和杂项运算符等。每类运算符又包含了多种运

2、算符。2. 基本运算符 算术运算符及自增、自减运算符表 4列出了加、减、乘、除、取模5种算术运算符,以及自增、自减运算符的操作说明。其中,除法运算符又分两种情况,一是整除,即两个整数相除,所得商舍尾数,仅取整数部分,如 5/10 等于 0 ;二是实除,即两个实数相除,所得商也是实数,如 5.0/10等于 0.5。表4算术和自增自减运算符符号意 义说 明+加法运算或表示正进行加法或连加运算,如数y=a+b+c。-减法运算或表示负进行减法或连减运算,如y=a-数b-c。*乘法运算符进行乘法运算,如y=a*b。/除法运算符进行除法运算。%取模运算(求余)参加运算的均应整数,如5/2结果为1。+自增运

3、算符(+)操作数(变量自身)+1。-自减运算符(-)操作数(变量自身)-1。自增运算符 + 和自减运算符 -,是 C 语言中最具特色的单目(一个量)运算符,其操作对象必须是整型变量,而不能为常量或表达式,其功能分别是使变量增1或减1。自增运算符+和自减运算符-有前缀运算符和后缀运算符两种应用方式,两者产生的效果有些不同:前缀运算符,如 +i 或 -i,在使用 i 之前,先使 i 的值 +1 或 -1 ;后缀运算符 i+ 或 i-,在使用 i 之后,才使 i 的值加 1 或减 1。例如,y 的原值等 5,则:语句 X=+y,表示 y 先加 1 再运算,得y=y+1=6,x=y=6 ;语句 X=y

4、+,表示 y 先运算再加 1,得x=y=5,y=y+1=6。在电子制作2009 年第 10 期,PIC 单片机 C 语言程序(1)的延时函数中,我们已用过后缀运算符 i+,大家可以从中体会其用法。 逻辑运算符逻辑运算符是基本运算符中的一种。逻辑运算符有:与“&”、或“”、非“!”等 3 三种。逻辑运算符 &、 为双目(两个量)运算符,!为单目运算符。它们要求的操作对象是非 0 的整型值和整型 0 表示的逻辑量。其运算规则如下:1)若两个操作对象都为非 0 整型值(真),则相与的结果为 1(真),否则为 0(假);2)若两个操作对象都为整型值 0(假),则相或结果为 0(假),否则为 1(真);

5、3)若操作对象为非 0 整型值(真),求非的结果为 0(假),否则为 1(真)。这里补充一点,算术运算符中的加、减和乘,与大家熟悉的算术运算规则完全相同,而除运算符应按上述规范使用。C 语言的运算符内容较多,限于篇幅,这里仅概况地加以介绍,希望读者在学习时,根据PIC 单片机书籍,深入学习 C 语言的运算符,并通过编写 C 语言程序,掌握每个运算符的意义和使用规则。51就业技能JOBSEEKERS3. 可预置起始时刻的时钟程序 硬件电路利用电子制作2010 年第 1 期PIC 单片机C 语言程序(4)一文中的 4 位 LED 数码管显示电路(图 3),可以制成 24 小时或 12 小时循环显示

6、的时钟电路,且该时钟可以由人工预置起始时刻,即电路插上电源后,可根据当时的实时时刻,如手机或电视屏上显示的时刻,进行人工校时,之后即可作时钟用;若不进行人工预置(校时),该电路就自动从 00.00 开始,以分为单位起始计时,此时,该电路可作人工守侯定时器。该时钟电路不显示秒,而是以分钟开始的显示。该电路仍采用 PIC16F84A 芯片,当写入本文下面给出的程序后,即可作 24 小时时钟用。其使用方法如下:插上电源,LED 数码管显示 00.00,按下图 3 中的 K1 键,数码管全灭,松开 K1 键,再按下 K1 键,数码管从 0(分位)开始计数,到达指定的分钟显示时,放开 K1 键,又按 K

7、1 键,时位显示,到达指定的时显示时,放开 K1,时钟即按人工预置起始时刻工作,操作十分简单。注意:如果预置时间的时位是从 00 开始而仅有分钟的有效值时,当预置分钟指定值后,仍要再按下 K1 键,使时位从 00 递增又回到 00,时钟即可工作,否则时钟电路不会工作。 24 小时的时钟 C 程序根据图 3 编写的 24 小时时钟电路的功能,可绘出相关流程图(限于篇幅,这里从略,若需要,可根据PIC 单片机 C 语言程序(4)一文的图 5,09999 的计数流程图,加上下面的 C 程序中的注释,扩展绘出),再由流程图编写出24 小时的时钟 C 程序。该程序命名为 pic0.5.c,其清单如下:#

8、include 包含头文件#define PORTAIT(add,bit)(unsigned) (&add)*8+(bit)static bit PORTA_0 PORTAIT(PORTA,0); PIC16F84Astatic bit PORTA_1 PORTAIT(PORTA,1); A 口位定义static bit PORTA_2 PORTAIT(PORTA,2);static bit PORTA_3 PORTAIT(PORTA,3);static bit PORTA_4 PORTAIT(PORTA,4);unsigned int ttr=0;无符号整型变量 ttr,并赋值 0unsig

9、ned char x=0,y=0,sign_a=0;无符号字符型变量void key_server(); 键值服务函数 void display(unsigned int x);带形参的显示函数void display_set(unsigned int x);键值显示函数void delay_1m(); 按键延时函数 -1m void delay(unsigned long int k ) 延时函数 unsigned long int i; 无符号字符型变量 i for(i=0;i0) while 语句PORTA=0x1F;关显示PORTB=SEG7unit_bit; 个位段码送 B 口RA3

10、=0;显示个位delay(200);延时RA3=1;关个位显示delay(2);延时PORTB=SEG7ten_bit; 十位段码送 B 口52 2010 VOL.02显示百位延时关百位显示延时就业技能RA2=0;显示十位delay(200);延时RA2=1; 关十位显示 delay(2); 延时 PORTB=SEG7hund_bit; 百位段码送 B 口 RA1=0;delay(200);RA1=1;delay(2);PORTB=SEG7thou_bit; 千位段码送 B 口RA0=0;显示千位delay(200); 百万 延时RA0=1;关百位显示delay(2);延时d-; d 从 29

11、00 开始自减量if( PORTA_4=0) K1 按下?未按下退出执行上程序 while(1)if( PORTA_4=1) 按下,执行以下程序sign_a=1; d=0;break;跳出循环void main( )主程序TRISB=0x00; A 口初始化TRISA=0x10;PORTB=0x40;INTCON=0x00;PORTA=0x10;ttr=0; 给 ttr 赋值 0 while(1) while 循环语句开始 / ;while(x24) 限制时钟最大为 24(时)y=0;给 y 赋值 0JOBSEEKERSwhile(y59)y=0; 分值大于 59,Y 清 0 value=x*

12、100+y;将 X(时)和 Y(分)按显示格式 display_set(value); 整合计算,再显示 delay_1m(); 按键延时,以便观察 if(PORTA_4=1) 如果 K1 放开进入小时设定,K=1k=1; 小时设定开始 break; 跳出分钟设定循环if(PORTA_4=0)&(k=1)第二次按下 K1 K=1,进入小时设定循环53就业技能JOBSEEKERSx+; 24 小时制,K1 未放开,X 一直累加到 23 if(x23) X23,X 清 0x=0;value=x*100+y; 整合计算设定值 display_set(value); 调键值显示delay_1m();

13、延时 display_set(value); 调键值显示while(1)重复x+;if(x23)x=0;value=x*100+y;display_set(value);delay_1m();display_set(value);if(PORTA_4=1) 如果 K1 放开sign_a=0; 清 0 设定时间标志位 y=y-1;break;跳出设定循环返回void display_set(unsigned int x)键值显示程序unsigned int d=5,unit_bit,ten_bit,hund_bit, thou_bit;unsigned char SEG710=0xc0,0xf9

14、,0xa4, 0xb0,0x99,0x92,0x82,0xf8,0x80,0x90;这里的注释与显示 displa 的函数相似unit_bit=x%10;ten_bit=x/10%10;hund_bit=x/100%10;thou_bit=x/1000%10;while(d0)PORTA=0x1F;/63;PORTB=SEG7unit_bit;RA3=0;delay(200);RA3=1;delay(2);PORTB=SEG7ten_bit;RA2=0;delay(200);RA2=1;delay(2);PORTB=SEG7hund_bit;RA1=0;delay(200);RA1=1;delay(2);PORTB=SEG7thou_bit;RA0=0;delay(200);RA0=1;delay(2);d-;void delay_1m() 按键 K1,延时函数开始unsigned long int k; 说明语句for(k=0;k4;k+) for 语句display_set(x*100

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论