收藏 分享(赏)

多功能秒表程序.doc

上传人:cjc2202537 文档编号:5285492 上传时间:2019-02-18 格式:DOC 页数:13 大小:143KB
下载 相关 举报
多功能秒表程序.doc_第1页
第1页 / 共13页
多功能秒表程序.doc_第2页
第2页 / 共13页
多功能秒表程序.doc_第3页
第3页 / 共13页
多功能秒表程序.doc_第4页
第4页 / 共13页
多功能秒表程序.doc_第5页
第5页 / 共13页
点击查看更多>>
资源描述

1、#include /包含文件#include #define uchar unsigned char/对数据类型的宏定义#define uint unsigned int#define Hi 0/点阵代表 Hi#define xin 4/点阵代表心形#define xiaol 5#define xiaolm 6sbit wei=P27;/数码管锁存允许定义sbit duan=P26;sbit xzhou=P30;/点阵锁存允许定义sbit yzhou=P31;sbit DS=P34;/温度传感器 I/O 口sbit SCL=P36;/EEPROM 时钟sbit SDA=P37;/EEPROM

2、数据uchar FM=0;/sbit FM=P32;/蜂鸣器定义sbit ZSD=P33;/指示灯定义sbit k1=P25;/定义六颗按键sbit k2=P24;sbit k3=P23;sbit k4=P22;sbit k5=P21;sbit k6=P20;uchar key1=1;/ 用于键盘扫描函数对六颗按键的识别uchar key2=2;uchar key3=3;uchar key4=4;uchar key5=5;uchar key6=6;uchar fen,miao,miaoxs,wd,nk1;uchar ntime;/ntime 用于定时器中断函数累加到 40 表示百分之一秒uch

3、ar i,address,ndisplay,time_END,nk2,changci;/i 用于写入数据时地址连续相加,ndisplay 用于显示某场比赛数据,time_END 表示某场参加的人数uint temp;/整合两个字节的温度到一个变量float f_temp;uchar time32;/8 人次数据uchar ye;/页unsigned char code tableduan=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f;/不带冒号编码unsigned char code tabled=0xbf,0x86,0xdb,0xcf,0

4、xe6,0xed,0xfd,0x87,0xff,0xef;/带冒号编码unsigned char code tablewei=0xff,0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f;/数码管位编码unsigned char code tablex=0x00,0x80,0x40,0x20,0x10,0x08,0x04,0x02,0x01;/点阵 X 轴编码,共阴极unsigned char code tabley=0xff,0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe;/点阵 Y 轴编码,共阳极void delay(uint);

5、void display(uchar,uchar,uchar,uchar);void leddiandisplay(uchar,uchar,ucahr);void leddisplay(uchar);uchar keyscan(uchar);void shortdelay(void);void IICinit(void);void start(void);void respons(void);void stop(void);void writebyte(uchar);uchar readbyte(void);void shortdelay(void)/IIC 简短延时;void delay(u

6、int xms) /简单延时函数uint i,j;for(i=xms;i0;i-)for(j=55;j0;j-);void dsreset(void) /温度传感器初始化uint i;DS=0;i=103;while(i0)i-;DS=1;i=4;while(i0)i-;bit tmpreadbit(void) /读一位uint i;bit dat;DS=0;i+; /i+ 用于延时DS=1;i+;i+;dat=DS;i=8;while(i0)i-;return (dat);uchar tmpread(void) /读一个字节数据uchar i,j,dat;dat=0;for(i=1;i1);

7、 /读出的数据最低位在最前面,这样刚好一个字节在 DAT 里return(dat);void tmpwritebyte(uchar dat) /写一个字节uint i;uchar j;bit testb;for(j=1;j1;if(testb) /写 1DS=0;i+;i+;DS=1;i=8;while(i0)i-;elseDS=0; /写 0i=8;while(i0)i-;DS=1;i+;i+;void tmpchange(void) /发送温度转换指令。开始转换dsreset();delay(1);tmpwritebyte(0xcc); / 地址tmpwritebyte(0x44); /

8、跳过寻址uint tmp() /获取温度uchar a,b;dsreset();delay(1);tmpwritebyte(0xcc);tmpwritebyte(0xbe);a=tmpread();b=tmpread();temp=b;temp4;display(fen,miao,miaoxs,wd);void start(void)/启动信号SDA=1;shortdelay();SCL=1;shortdelay();SDA=0;shortdelay();void respons(void)/应答信号uchar i=0;SCL=1;shortdelay();while(SDA=1)fen=ti

9、mendisplay*4+0;miao=timendisplay*4+1;miaoxs=timendisplay*4+2;wd=timendisplay*4+3;if(keyscan(key6)if(ndisplay=0)ndisplay=time_END-1;else ndisplay-;fen=timendisplay*4+0;miao=timendisplay*4+1;miaoxs=timendisplay*4+2;wd=timendisplay*4+3;void main()/主函数uint kk;uchar w1,w2,w3,test;test=read_add(0xfe);if(t

10、est!=0)for(kk=0;kk100)nk1=1;xzhou=0;/初始化yzhou=0;EA=1;ET1=1;TMOD=0x20;TH1=0x06;TL1=0x06;while(!keyscan(key1)if(keyscan(key2)nk1+;if(nk1=4)nk1=1;tmpchange();temp=tmp();f_temp=temp*0.0625;w1=f_temp;w2=(uint)(f_temp*100)%100;w3=(uint)(f_temp*10000)%100;display(w1,w2,w3,fen);lddisplay(nk1);if(nk1=1)/模式 1

11、moshi1();if(nk1=2)/模式 2moshi2();if(nk1=3)/模式 3moshi3();void T1interrupt(void) interrupt 3 /定时/计数器中断函数if(nk1=1)/模式 1 对应中断处理ntime+;if(ntime=40)ntime=0;miaoxs+;if(miaoxs=99)miaoxs=0;miao+;wdfunc();/ miaoxs+=1;用于补偿调用温度函数时产生的中断丢失。但为了让效率更高,在if(miaoxs=99)中把 100 改为了 99if(miao=60)miao=0;fen+;if(fen=60)miaoxs=0;miao=0;fen=0;if(nk1=2)/模式 2 对应中断处理ntime+;if(ntime=40)ntime=0;if(fen!=0)|(miao!=0)|(miaoxs!=0)if(miaoxs=0)miaoxs=98;/把 99 改为 98 目的是弥补中断丢失if(miao=0)miao=59;if(fen=0)fen=59;else fen-;wdfunc();else miao-;wdfunc();else miaoxs-;else TR1=0;

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 实用文档 > 统计图表

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报