单片机秒表程序

来源:--

作者:--

浏览:1733

时间:2016-08-10 14:18

标签:

摘要:

单片机 秒表程序

该源程序已在实验板上调试通过,读者可直接引用,并可利用软件编程的灵活性,加以拓展,实现更为复杂的功能。 #include     #include      //此程序实现计时秒表功能,时钟显示范围00.00~99.99秒,分辨度:0.0

单片机 秒表程序

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

#include

#include

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

unsigned  char        s0,s1,s2,s3;

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

unsigned  char   s[4];

unsigned  char      k ,data ,sreg;

unsigned   int        i;

const    table[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0XD8,0x80,0x90};

//不带小数点的显示段码表

const    table0[10]={0X40,0X79,0X24,0X30,0X19,0X12,0X02,0X78,0X00,0X10};

//带小数点的显示段码表

//TMR0初始化子程序

void        tmint()

{

T0CS=0;                //TMR0工作于定时器方式

PSA=1;                    //TMR0不用分频

T0IF=0;                    //清除TMR0的中断标志

T0IE=1;                    //TMR0中断允许

}

//spi显示初始化子程序

void        SPIINIT()

{

PIR1=0;

SSPCON=0x30;

SSPSTAT=0xC0;

//设置SPI的控制方式,允许SSP方式,并且时钟下降沿发送。与"74HC595,当其

//SCLK从低到高跳变时,串行输入寄存器"的特点相对应

TRISC=0xD7;            //SDO引脚为输出,SCK引脚为输出

TRISA5=0;                //RA5引脚置为输出,输出显示锁存信号

}

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

void        initial()

{

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位数

void        dispaly()

{

RA5=0;                    //准备锁存

for(k=4;k>0;k--)

{

data=s[k-1];

if(k==3)    data=table0[data];//第二位需要显示小数点

else    data=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;

}

//键扫描子程序

void        KEYSCAN()

{

while(1){

while(1)

{

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

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

}

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

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

}

}

//等键松开子程序

void        keyrelax()

{

while(1){

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

if ((RB5==1)&&(RB4==1))    break;

}                        //为防止按键过于灵敏,每次等键松开才返回

}

//系统赋值初始化子程序

void        inizhi()

{

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

}

//中断服务程序

void        interrupt    clkint(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();                //总中断允许

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

keyrelax()    ;            //等键松开

di();                //总中断禁止

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

keyrelax()    ;            //等键松开

}

}

分享到:

c语言单片机秒表程序,单片机秒表程序相关推荐

  1. 用1602液晶显示秒表功能 c语言编写程序 单片机 加注释,单片机课程设计--1602LCD显示的秒表.doc...

    单片机课程设计 题目: 1602LCD显示的秒表 系别/班级:信息工程系11级嵌入式技术与应用专业 小组成员: 小组成员学号: 指导老师: 目录 1 单片机原理-------------------3 ...

  2. 用c语言编写的99秒表,单片机00到99秒表的课程设计 含源程序,仿真图,文档

    这是我上个月做的单片机秒表课程设计,这个课程设计是实现00到99秒的一个秒表, 并且有开始和复位功能, 用了一个星期的时间, 附件里面包含秒表的单片机源程序,proteus仿真电路图和课设文档, 都是 ...

  3. 51单片机c语言秒表,C51单片机秒表计时(C语言).doc

    C51单片机秒表计时(C语言).doc 南开大学滨海学院C51嵌入式软件设计(C语言) 题目计时秒表 l 功能描述本设计实现在99秒内的秒表计时,一个按键实现开始.暂停.复位.l 原理概述P1接四位七 ...

  4. C语言 int 转单精度浮点,单精度浮点数与十六进制转换 C语言程序 单片机也可用...

    单精度浮点数与十六进制转换 C语言程序 单片机也可用 #include float Hex_To_Decimal(unsigned char *Byte,int num)//十六进制到浮点数 { // ...

  5. c语言单片机循环程序,单片机c语言教程:C51循环语句

    TH1 = 0xE8; //11.0592MHz 1200 波特率 TL1 = 0xE8; TI = 1; TR1 = 1; //启动定时器 for (I=1; I=10; I++) //这里能设初始 ...

  6. DSB算法C语言程序,单片机中使用DSB温度传感器C语言程序.doc

    单片机中使用DSB温度传感器C语言程序 单片机中使用DS18B20温度传感器C语言程序(参考1) /************************************************** ...

  7. 单片机c语言led灯闪烁程序,单片机LED灯闪烁程序

    点亮 LED 小灯的程序我们第二课完成了,就是让 LED = 0.熄灭小灯的程序也很简单,就是 LED = 1.点亮和熄灭都会了,那么如果我们在亮和灭中间加个延时,反复不停的点亮和熄灭小灯,就成了闪烁 ...

  8. 52单片机led灯闪烁c语言程序,单片机LED灯闪烁程序

    原标题:单片机LED灯闪烁程序 点亮 小灯的程序我们第二课完成了,就是让 LED = 0.熄灭小灯的程序也很简单,就是 LED = 1.点亮和熄灭都会了,那么如果我们在亮和灭中间加个延时,反复不停的点 ...

  9. 单片机c语言篮球比分_单片机篮球比赛计分器设计方案与程序详解

    摘 要 本系统是采用单片机AT89C51作为本设计的核心元件.利用7段共阳LED作为显示器件.在此设计中共接入了2个7段共阳LED显示器,用于记录该队的分数, 2个LED显示器显示范围可达到0~99分 ...

  10. 单片机2个按键互锁c语言程序,单片机的C语言应用程序设计 2.ppt

    单片机的C语言应用程序设计 2.ppt (6) C语言中的库文件提供许多标准的例程,例如格式化输出.数据转换和浮点运算等. (7) 通过C语言可实现模块化编程技术,从而可将已编制好的程序加入到新程序中 ...

最新文章

  1. Android 双屏开发 Presentation 的使用教程
  2. [hihocoder 1075] 开锁魔法III
  3. 算法-------三角形最小路径和(Java版本)
  4. 循环矩阵傅里叶对角化
  5. xslt 标签取集合第一条数据_XSLT函数集合:数值函数、字符串函、节点集函数和布尔函数...
  6. 3、 PPT合并形状
  7. mysql 服务器优化_如何对MySQL服务器进行调优
  8. kotlin学习笔记——类、函数、接口
  9. mysql dump 选项_mysqldump的几个主要选项探究
  10. JS 开发常用工具函数
  11. 20幅扎心漫画,道尽无数人的人生!30万网友:这简直是在偷窥我生活...
  12. 玩转CocoaPods
  13. 软件工程学习进度06
  14. [转载] [转载] python 中NumPy和Pandas工具包中的函数使用笔记(方便自己查找)
  15. 如何判断一个类是无用的类?
  16. 对私有API提交的注意事项
  17. Redis牛逼!轻松实现实时订阅推送
  18. 华为BFD的配置规范
  19. MAC系统/虚拟机中的chm打不开
  20. AD多层板拼板内电层网络丢失处理

热门文章

  1. css中设置字体下划线,css如何设置字体下划线
  2. Latex下划线问题
  3. 2022-2027年(新版)中国钢铁行业产量趋势及供需形势预测报告
  4. 深圳科目三辅城坳【手动挡】笔记
  5. C++中的抽象概念详解
  6. .xmind用什么软件打开_xps用什么软件打开(xps文件打开方法)
  7. Brocade switch upgrade firmware
  8. 永劫无间游戏设计之上瘾
  9. 艾森豪威尔法则(四象限法则)
  10. 微信公众号原主体已注销 如何办理账号迁移?