PIC单片机C语言编程实例之秒表

来源:本站
导读:目前正在解读《PIC单片机C语言编程实例之秒表》的相关信息,《PIC单片机C语言编程实例之秒表》是由用户自行发布的知识型内容!下面请观看由(电工技术网 - www.9ddd.net)用户发布《PIC单片机C语言编程实例之秒表》的详细说明。
简介:详细介绍了PIC单片机C语言编程的秒表实例

第7章秒表 7.2.2程序清单 该源程序已在实验板上调试通过,读者可直接引用,并可利用软件编程的灵活性,加以拓展,实现更为复杂的功能。#include#include //此程序实现计时秒表功能,时钟显示范围00.00~99.99秒,分辨度:0.01秒unsignedchar s0,s1,s2,s3; //定义0.01秒、0.1秒、1秒、10秒计时器unsignedchars[4];unsignedchark,data,sreg;unsignedint i; consttable[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0XD8,0x80,0x90};//不带小数点的显示段码表 consttable0[10]={0X40,0X79,0X24,0X30,0X19,0X12,0X02,0X78,0X00,0X10};//带小数点的显示段码表//TMR0初始化子程序voidtmint() {T0CS=0;//TMR0工作于定时器方式(内部指令周期时钟)PSA=1;//TMR0不用分频(预分频指定给WDT)T0IF=0;//清除TMR0的中断标志T0IE=1; //TMR0中断允许 } //spi显示初始化子程序voidSPIINIT(){PIR1=0;SSPCON=0x30; SSPSTAT=0xC0; //设置SPI的控制方式,允许SSP方式,并且时钟下降沿发送。与"74HC595,当其//SCLK从低到高跳变时,串行输入寄存器"的特点相对应TRISC=0xD7;//SDO引脚为输出,SCK引脚为输出TRISA5=0; //RA5引脚置为输出,输出显示锁存信号 } //系统其它部分初始化子程序

130 voidinitial() {TRISB1=0;TRISB2=0;TRISB4=1;TRISB5=1; //设置与键盘有关的各口的输入输出方式 RB1=0;RB2=0; //建立键盘扫描的初始条件 } //SPI传输数据子程序voidSPILED(data) {SSPBUF=data; //启动发送 do{; }while(SSPIF==0); SSPIF=0; } //显示子程序,显示4位数voiddispaly() {RA5=0; //准备锁存 for(k=4;k>0;k--) {data=s[k-1];(data值为0~9) if(k==3)data=table0[data];//第二位需要显示小数点elsedata=table[data];SPILED(data); //发送显示段码 } for(k=0;k<4;k++){data=0xFF;SPILED(data); //连续发送4个DARK,使显示好看一些 }RA5=1; //最后给锁存信号,代表显示任务完成 } //软件延时子程序

131 voidDELAY() {for(i=3553;--i;)continue; } //键扫描子程序voidKEYSCAN() C{while(1)B{while(1)A{dispaly();//调用一次显示子程序 if((RB5==0)||(RB4==0))break; }ADELAY(); //若有键按下,则软件延时 if((RB5==0)||(RB4==0)){ifRB5=0 else break;//若还有键按下,则终止循环扫描(跳出该循环,执行下一步),返 回}B}C //等键松开子程序voidkeyrelax() {while(1){dispaly();//调用一次显示子程序 if((RB5==1)&&(RB4==1))break; } //为防止按键过于灵敏,每次等键松开才返回 } //系统赋值初始化子程序voidinizhi() { s0=0x00;s[0]=s0;s1=0x00;s[1]=s1;s2=0x00; s[2]=s2;

132 s3=0x00;s[3]=s3; //s0=s1=s2=s3=0,并放入显示缓冲数组中sreg=0x00; //tmr0中断次数寄存器清0 } //中断服务程序voidinterruptclkint(void) { TMR0=0X13; //对TMR0写入一个调整值。因为写入TMR0后接着的//两个周期不能增量,中断需要3个周期的响应时间,//以及C语言自动进行现场保护要消耗周期 T0IF=0;//清除中断标志CLRWDT(); sreg=sreg+1;//中断计数器加1 if(sreg==40) //中断次数为40后,才对S0,S1,S2,S3操作 {sreg=0;s0=s0+1;if(s0==10){s0=0; s1=s1+1;if(s1==10){s1=0;s2=s2+1;if(s2==10){s2=0;s3=s3+1;if(s3==10) s3=0; } } } }s[0]=s0;s[1]=s1;s[2]=s2;s[3]=s3; }//主程序

133 main(){OPTION=0XFF;tmint();//TMR0初始化SPIINIT(); //spi显示初始化initial();//系统其它部分初始化di(); //总中断禁止 while(1){ inizhi(); //系统赋值初始化KEYSCAN();//键扫描,直到开始键按下keyrelax();//等键松开ei(); //总中断允许 KEYSCAN();//键扫描直到停止键按下,在键扫描时有显示keyrelax();//等键松开di(); //总中断禁止 KEYSCAN();//键扫描到清0键按下,在键扫描时有显示keyrelax(); //等键松开 } }

提醒:《PIC单片机C语言编程实例之秒表》最后刷新时间 2024-03-14 01:07:30,本站为公益型个人网站,仅供个人学习和记录信息,不进行任何商业性质的盈利。如果内容、图片资源失效或内容涉及侵权,请反馈至,我们会及时处理。本站只保证内容的可读性,无法保证真实性,《PIC单片机C语言编程实例之秒表》该内容的真实性请自行鉴别。