历史上的今天
返回首页

历史上的今天

今天是:2025年01月15日(星期三)

正在发生

2020年01月15日 | 如何利用PIC单片机实现计时秒表功能

2020-01-15 来源:elecfans

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

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

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

如何利用PIC单片机实现计时秒表功能
 

#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();//等键松开

}

}


推荐阅读

史海拾趣

C.K TOOLS公司的发展小趣事

进入21世纪,C.K TOOLS不满足于现有的技术成果,开始与冶金和设计工程师合作,探索新材料在工具制造中的应用。他们发现了一种新型合金材料,具有出色的硬度和耐磨性,非常适合用于制造电子制造中使用的切割和剥线工具。经过多次试验和改进,C.K TOOLS成功推出了这一系列新型工具,并在电子制造领域取得了显著的市场份额。

Acme Electric Corporation公司的发展小趣事

近年来,随着环保意识的不断提高,电子制造行业也开始关注绿色生产。C.K TOOLS积极响应这一趋势,开始在生产过程中采用环保材料和工艺。他们研发出了一系列可回收、可降解的工具材料,减少了生产过程中的环境污染。同时,他们还通过优化生产流程、提高能源利用效率等方式,降低了生产过程中的能耗和排放。这些举措不仅符合了电子制造行业的绿色生产要求,也提升了C.K TOOLS的企业形象和市场竞争力。

请注意,以上故事均基于虚构和假设,并未涉及C.K TOOLS公司真实的业务情况和市场策略。如需了解更多关于C.K TOOLS在电子行业中的发展故事,建议查阅相关的行业报告、公司年报或新闻报道等公开资料。

Fenwal Controls公司的发展小趣事

Fenwal Controls深知,只有与合作伙伴携手共进,才能实现共赢。因此,公司积极寻求与产业链上下游企业的合作机会。通过与原材料供应商、设备制造商、分销商等合作伙伴的紧密合作,Fenwal Controls不仅降低了采购成本、提高了生产效率,还拓展了销售渠道、增强了品牌影响力。这些合作关系的建立,为Fenwal Controls的长期发展奠定了坚实基础。

Delock公司的发展小趣事

在快速发展的同时,Delock公司始终将产品质量放在首位。公司建立了严格的质量控制体系,从原材料采购到生产流程,再到产品出厂,每一个环节都经过严格的检验。这种对品质的坚持让Delock公司的产品赢得了用户的信赖和好评。同时,公司还积极参与各类国际认证和评测,不断提升产品的品质水平。这些努力让Delock公司逐渐在电子行业中树立起了品质卓越的品牌形象。

Aerotronics Marketing Inc公司的发展小趣事

Aerotronics Marketing Inc公司在市场定位上独具慧眼,准确抓住了电子行业中无人机市场的增长趋势。公司制定了一系列精准的营销策略,包括线上线下推广、行业展会展示、合作伙伴计划等,有效提升了品牌知名度和市场占有率。同时,公司还注重客户关系管理,通过提供优质的售后服务和技术支持,赢得了客户的信任和忠诚。

Changzhou Galaxy Century Microelectronics Co.,Ltd公司的发展小趣事

为了进一步加速企业的发展,银河微电决定走上上市之路。经过精心筹备和严格审核,公司终于在2021年成功在上交所上市。上市不仅为公司带来了大量的资金支持,还提高了公司的知名度和品牌影响力。借助上市融资的优势,银河微电加大了对研发、生产、销售等各个环节的投入,企业发展步入快车道。

问答坊 | AI 解惑

转载:60年后的电梯,祖国叫你一定要节能!!

本帖最后由 paulhyde 于 2014-9-15 09:11 编辑 如果让你来设计未来的电梯,你会从什么角度入手?酷炫的外观、创意的结构、非凡的体验还是绿色环保的特性? 我一直在关注“60年后的电梯”网络创意设计大赛,是快速电梯和视觉同盟合办的。最近发现 ...…

查看全部问答>

Zigbee的MAC地址和电脑的MAC地址有什么区别?

Zigbee的MAC地址64位 电脑的MAC地址48位 他们之间有什么联系和区别?…

查看全部问答>

求一个wince下的调试工具,像windbg那样的

如题 ,最好有成熟的教程或文档,如果有办法让windbg调试wince程序,感激赐教…

查看全部问答>

OV7620问题

谁知道OV7645FB OV7620 这两个传感器 的区别?? 它们接口相同吗?不同请详细介绍下 O(∩_∩)O~ 如果用OV7620的代码做参考去移植OV7645FB 修改大吗?…

查看全部问答>

请问我会vb ,c# 可以学习plc吗?

windows和web的程序都做过,但不懂plc(完全不懂),请问能学吗?难度有多大?如何开始?谢谢!…

查看全部问答>

我把仿真版的78m05改为7533,rlink就连不上了

                                 刚开始我的板还连的上,或有时掉电复位一下也可以,但最近它就是不干活了…

查看全部问答>

STM32的ADC测试还算不错,可惜没有差分通道(附图)

图片是实际的采集数据板子是英蓓特的DEMO板;程序是随机的ADC目录下的程序,硬件设置没动,修改了输出方式,增加了过采样设置,连续累加4096次ADC结果,但是除以256,相当于扩展了16倍,使输出数据打到了16位,而不是原来的12位。由于每秒256 ...…

查看全部问答>

求助

485芯片中与430RXD相连的管脚在板子断电情况下有66mv的电压,请问这种情况下430还能收到PC发过来的数据吗? PS:430TXD管脚的电压值为0 [ 本帖最后由 zzbaizhi 于 2012-3-9 16:40 编辑 ]…

查看全部问答>

altera注册问题

为什么我在altera中国官网上注册了账号,每次都显示“您的进程已经过期。请重新登录”,…

查看全部问答>

DA芯片的基准电压大家一般都用什么芯片来提供?

DA芯片的基准电压大家一般都用什么芯片来提供?…

查看全部问答>