您的位置 首页 数字

怎么使用PIC单片机完成计时秒表功用

如何利用PIC单片机实现计时秒表功能-//该源程序已在实验板上调试通过,读者可直接引用,并可利用软件编程的灵活性,加以拓展,实现更为复杂的功能。

//此程序实现计时秒表功能,时钟显示范围00.00~99.99秒,分辨度:0.01秒

//定义0.01 秒、0.1 秒、1秒、10秒计时器

//该源程序已在试验板上调试经过,读者可直接引证,并可使用软件编程的灵活性,加以拓宽,完结更为杂乱的功用。

//此程序完结计时秒表功用,时钟显现规模00.00~99.99秒,分辩度:0.01秒

//界说0.01 秒、0.1 秒、1秒、10秒计时器


 

#include

#include

unsigned chars0,s1,s2,s3;

unsigned char s[4];

unsigned char k ,data ,sreg;

unsigned inTI;

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不必分频

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引脚置为输出,输出显现锁存信号

}

//体系其它部分初始化子程序

voidiniTIal()

{

TRISB1=0;

TRISB2=0;

TRISB4=1;

TRISB5=1;//设置与键盘有关的各口的输入输出方法

RB1=0;

RB2=0;//树立键盘扫描的初始条件

}

//SPI传输数据子程序

void SPILED(data)

{

SSPBUF=data;//发动发送

do{

}while(SSPIF==0);

SSPIF=0;

}

//显现子程序,显现4位数

voiddispaly()

{

RA5=0;//预备锁存

for(k=4;k》0;k–)

{

data=s[k-1];

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;//最终给锁存信号,代表显现使命完结

}

//软件延时子程序

void DELAY()

{

for(i = 3553; –i ;)conTInue;

}

//键扫描子程序

voidKEYSCAN()

{

while(1){

while(1)

{

dispaly();//调用一次显现子程序

if ((RB5==0)||(RB4==0))break;

}

DELAY();//若有键按下,则软件延时

if ((RB5==0)||(RB4==0))break;//若还有键按下,则中止循环扫描,回来

}

}

//等键松开子程序

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;

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;

}

//主程序

main()

{

OPTION=0XFF;

tmint();//TMR0初始化

SPIINIT();//spi显现初始化

initial();//体系其它部分初始化

di();//总中止制止

while(1){

inizhi();//体系赋值初始化

KEYSCAN();//键扫描,直到开端键按下

keyrelax();//等键松开

ei();//总中止答应

TMR0=0X08;

KEYSCAN();//键扫描直到中止键按下,在键扫描时有显现

keyrelax();//等键松开

di();//总中止制止

KEYSCAN();//键扫描到清0键按下,在键扫描时有显现

keyrelax();//等键松开

}

}

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/zhishi/shuzi/346869.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部