欢迎来到天天文库
浏览记录
ID:61462261
大小:19.00 KB
页数:5页
时间:2021-02-02
《pic单片机C语言程序例程之stopwatch.doc》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库。
1、//此程序实现计时秒表功能,时钟显示范围00.00~99.99秒,分辨度:0.01秒#include"p18f458.h"unsignedchars[4];//定义0.01秒、0.1秒、1秒、10秒计时器unsignedchark,data,sreg;unsignedinti;consttable[11]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0XD8,0x80,0x90};//不带小数点的显示段码表consttable0[10]={0X40,0X79,0X24,0X30,0X19,0X1
2、2,0X02,0X78,0X00,0X10};//带小数点的显示段码表voidclkint(void);//TMR0初始化子程序voidtmint(){T0CON=0XCF;//设定TMR0L工作于8位定时器方式//内部时钟,TMR0不用分频INTCON=0X20;//总中断禁止,TMR0中断允许,清除TMR0的中断标志INTCON2bits.TMR0IP=1;//TMR0中断高优先级RCONbits.IPEN=1;//使能中断优先级}//系统其它部分初始化子程序voidinitial(){TRISA=0x00;//A口设
3、置为输出TRISB=0XF0;//RB1输出,RB4输入TRISC=0x00;//SDO引脚为输出,SCK引脚为输出TRISE=0x00;//E口设置为输出SSPCON1=0x30;//SSPEN=1;CKP=1,FOSC/4SSPSTAT=0xC0;//时钟下降沿发送数据PIR1=0;//清除SSPIF标志data=0X00;//待显示的寄存器赋初值PORTBbits.RB1=0;PORTAbits.RA3=0;PORTE=0;//将K1,K2,K3,K4四条列线置0}//SPI传输数据子程序voidSPILED(cha
4、rdata){SSPBUF=data;//启动发送do{;}while(PIR1bits.SSPIF==0);PIR1bits.SSPIF=0;}//显示子程序,显示4位数voiddispaly(){PORTAbits.RA5=0;//准备锁存for(k=0;k<4;k++){data=s[k];if(k==2)data=table0[data];//个位需要显示小数点elsedata=table[data];SPILED(data);//发送显示段码}for(k=0;k<4;k++){data=0xFF;SPILED(d
5、ata);//连续发送4个DARK,使显示好看一些}PORTAbits.RA5=1;//最后给锁存信号,代表显示任务完成}//软件延时子程序voidDELAY(){for(i=3553;--i;)continue;}//键扫描子程序voidKEYSCAN(){while(1){dispaly();//调用一次显示子程序while(PORTBbits.RB4==0){DELAY();//若有键按下,则软件延时break;}if(PORTBbits.RB4==0)break;//若还有键按下,则终止循环扫描,返回}}//等键松
6、开子程序voidkeyrelax(){while(1){dispaly();//调用一次显示子程序if(PORTBbits.RB4==1)break;//为防止按键过于灵敏,每次等键松开才返回}}/*高优先级中断向量*/#pragmacodeInterruptVectorHigh=0x08voidInterruptVectorHigh(void){_asmgotoclkint//跳到中断程序_endasm}//中断服务程序#pragmacode#pragmainterruptclkintvoidclkint(){TMR0=
7、0X13;//对TMR0写入一个调整值。因为写入TMR0后接着的//两个周期不能增量,中断需要3个周期的响应时间,//以及C语言自动进行现场保护要消耗周期INTCONbits.T0IF=0;//清除中断标志sreg=sreg+1;//中断计数器加1if(sreg==40)//中断次数为40后,才对S0,S1,S2,S3操作{sreg=0;s[0]=s[0]+1;if(s[0]==10){s[0]=0;s[1]=s[1]+1;if(s[1]==10){s[1]=0;s[2]=s[2]+1;if(s[2]==10){s[2]=
8、0;s[3]=s[3]+1;if(s[3]==10)s[3]=0;}}}}}//主程序main(){tmint();//TMR0初始化initial();//spi显示初始化及系统其它部分初始化INTCONbits.GIE=0;//总中断禁止while(1){for(k=0;k<4;k++){s[k]=
此文档下载收益归作者所有