欢迎来到天天文库
浏览记录
ID:5317606
大小:189.98 KB
页数:5页
时间:2017-12-08
《pic单片机c语言程序设计(6)》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、万方数据勰
2、illr————————⋯⋯~⋯⋯——~J口BsEEKERs渊就业技毹;髓(接上期)PIC单片机c语言程序设计(6)4.可预置起始时刻的倒计时程序在2010年第2期《PIC单片机C语言程序(5)》一文中,我们介绍了可预置起始时刻的时钟的硬件电路并给出了C语言程序。下面要介绍的可预置起始时刻的倒计时程序,是作为日常生活中对某事件的定时之用:只要某事件由人工设置的计时时间到,倒计时电路便会发出报警声。倒计时的特点是,计时一旦达到预定值,其值就归零。利用归零条件。即可实现任意倒计时达到时的报警功能,提示人们定时已到。本倒计时器可在0~9
3、9分钟内任意设置计时值。例如在厨房中。蒸大米饭(8两米),定时33分钟,烧开水(一壶)为20分钟,煮胡罗卜(红色)为30分钟等,只要设定时间一到。倒计时器即报警.使用十分方便。当然,上述倒计时值。均是事先用普通时钟确定每个事件所要花费的时间,列出相应定时标准,才能用倒记时器进行定时。(1)硬件电路图6是0~99分钟可预置的倒计时电路。PICl6F84A单片机:4、脚为手动复位端,外接R1、DO、C6、K0(微动开关)组成复位电路;③脚RA4外接上电阻R2和倒计时人工预置开关K1;a7)脚RAO外接R0、V3和蜂鸣器。组成倒计时值达到(归零)时
4、的自动报警信号。电路中的两位LED数码管和V1、V2组成0~99分钟可预置LED数码显示电路,其电路原理与2009年第12期《PIC单片机C语言程序(3)》一文中图3的起始两位计数电路相似。(2)程序流程图图7、图8、图9分别为0~99分钟可预置的倒计时程序的主程序、显示函数和键值扫描程序流程图。通过流程图,读者可以加深对于倒计时程序设计原理和对2010年第2期《PIC单片机C语言程序(5)》一文中可预置时钟电路程序的理解。。⋯.⋯⋯~⋯、⋯一一⋯。一闺§Q,锣分钟舶倒计肘电路.一一⋯一⋯⋯一⋯~。电孑嗣佑59筮就JDI;业SE技EkE能ES
5、—一lIlI万方数据I一一II鞠幽IlI霸主程序流程图602010VOL.03(3)倒计时的C程序根据图7~图9编写的的倒计时C程序(命名为pic06.c)清单如下:#include#definePORTAIT(add,bit)((unsigned)(&add)+8+(bit))staticbitPORTA_O@PORTAIT(PORTA,O):flpicl6F84AstaticbitPORTA_1@PORTAIT(PORTA,1);staticbitPORTA一2@PORTAIT(PORTA.2)://A口的位定义static
6、bitPORTA..3@PORTAIT(PORTA,3):staticbitPORTA_4@PORTAIT(PORTA.4):unsignedintttr=O;//无符号整形变量ttr,并赋值0unsignedcharx=O,sign_a=0;/,字符变量X,标志位并赋值0voidkey_server();//键值服务函数voiddisplay(unsignedintx)://带形参X的显示函数voiddisplay_set(unsignedint×)://带形参X的键值显示函数voiddelay_lmO;//按键延时函数voiddelay(
7、unsignedlongintk)//延时函数{unsignedlongintI://无符号整形变量ifor(i.O:i<=k:i++)//for语句continue;//继续循环}voiddispIay(unsignedintX)//显示函数开始{unsignedintd=5800.unit_bit,ten—.bit./,整型变量d并赋值,个、十位unsignedcharSEG7【10】-{oXc0,Oxf9.Oxa4,0xb0,0x99,0x92,0x82,oXf8,Ox80,0x90};/,引用数组字符段码unit_bit=x%10;/
8、/picc编译器可识别的个位ten—bit=x/10%10;//picc可识别的十位while(d>O)//while语句f万方数据隧
9、HIlIr~⋯⋯⋯⋯~J口Bs芒EkERs溅就业技毹,懒PORTAI=0xlE://关显示PORTB=SEG7【uniLbIt】://个位字段码送B1:3RA3=0;//显示个位delay(200);//延时以便观察RA3=I://关个位显示delay(2);//延时PORTB=SEG7[ten—bit];/,十位字段码送B口RA2=0;//显示十位delay(200);//延时以便观察RA2=1://关十位
10、显示delay(2);fl延时d一一://d从5800开始自减量if(PORTA_4==0)//K1未按下{while(1)//执行while语句{if(PORTA
此文档下载收益归作者所有