




已阅读5页,还剩9页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
#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数据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表示百分之一秒uchar 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,0xe6,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);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(uint 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;i=8;i+) j=tmpreadbit(); dat=(j1); /读出的数据最低位在最前面,这样刚好一个字节在DAT里 return(dat);void tmpwritebyte(uchar dat) /写一个字节 uint i; uchar j; bit testb; for(j=1;j1; if(testb) /写1 DS=0; i+;i+; DS=1; i=8;while(i0)i-; else DS=0; /写0 i=8;while(i0)i-; DS=1; i+;i+; void tmpchange(void) /发送温度转换指令。开始转换 dsreset(); delay(1); tmpwritebyte(0xcc); / 地址 tmpwritebyte(0x44); / 跳过寻址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)&(i255)i+;SCL=0;shortdelay();void stop(void)/停止信号SDA=0;shortdelay();SCL=1;shortdelay();SDA=1;shortdelay();void writebyte(uchar date)/写一个字节uchar i,tempofdate;tempofdate=date;for(i=0;i8;i+)tempofdate=tempofdate1;SCL=0;shortdelay();SDA=CY;shortdelay();SCL=1;shortdelay();SCL=0;shortdelay();SDA=1;shortdelay();shortdelay();shortdelay();uchar readbyte(void)/读一个字节uchar i,k;SCL=0;shortdelay();SDA=1;for(i=0;i8;i+)SCL=1;shortdelay();k=(k1)|SDA;SCL=0;shortdelay();shortdelay();return(k);void write_add(uchar address,uchar date)start();writebyte(0xa0);/寻芯片地址respons();writebyte(address);respons();writebyte(date);respons();stop();uchar read_add(uchar address)uchar date;start();writebyte(0xa0);respons();writebyte(address);respons();start();writebyte(0xa1);respons();date=readbyte();stop();return(date);void display(uchar fen,uchar miao,uchar miaoxs,uchar wd)/数码管显示函数,4个参数,带冒号uchar fenshi,fenge,miaoshi,miaoge,miaoxsshi,miaoxsge,wdshi,wdge;/分离出8位数据fenshi=fen/10;fenge=fen%10;miaoshi=miao/10;miaoge=miao%10;miaoxsshi=miaoxs/10;miaoxsge=miaoxs%10;wdshi=wd/10;wdge=wd%10;wei=1;P0=tablewei1;wei=0;duan=1;P0=tableduanfenshi;duan=0;delay(1);wei=1;P0=tablewei2;wei=0;duan=1;P0=tabledfenge;duan=0;delay(1)wei=1;P0=tablewei3;wei=0;duan=1;P0=tableduanmiaoshi;duan=0;delay(1);wei=1;P0=tablewei4;wei=0;duan=1;P0=tableduanmiaoge;duan=0;delay(1);wei=1;P0=tablewei5;wei=0;duan=1;P0=tableduanmiaoxsshi;duan=0;delay(1);wei=1;P0=tablewei6;wei=0;duan=1;P0=tableduanmiaoxsge;duan=0;delay(1);wei=1;P0=tablewei7;wei=0;duan=1;P0=tableduanwdshi;duan=0;delay(1);wei=1;P0=tablewei8;wei=0;duan=1;P0=tableduanwdge;duan=0;delay(1);void nodisplay(uchar fen,uchar miao,uchar miaoxs,uchar wd)/数码管显示函数,4个参数。不带冒号uchar fenshi,fenge,miaoshi,miaoge,miaoxsshi,miaoxsge,wdshi,wdge;/分离出8位数据fenshi=fen/10;fenge=fen%10;miaoshi=miao/10;miaoge=miao%10;miaoxsshi=miaoxs/10;miaoxsge=miaoxs%10;wdshi=wd/10;wdge=wd%10;wei=1;P0=tablewei1;wei=0;duan=1;P0=tableduanfenshi;duan=0;delay(1);wei=1;P0=tablewei2;wei=0;duan=1;P0=tableduanfenge;duan=0;delay(1);wei=1;P0=tablewei3;wei=0;duan=1;P0=tableduanmiaoshi;duan=0;delay(1);wei=1;P0=tablewei4;wei=0;duan=1;P0=tableduanmiaoge;duan=0;delay(1);wei=1;P0=tablewei5;wei=0;duan=1;P0=tableduanmiaoxsshi;duan=0;delay(1);wei=1;P0=tablewei6;wei=0;duan=1;P0=tableduanmiaoxsge;duan=0;delay(1);wei=1;P0=tablewei7;wei=0;duan=1;P0=tableduanwdshi;duan=0;delay(1);wei=1;P0=tablewei8;wei=0;duan=1;P0=tableduanwdge;duan=0;delay(1); void ddisplay(uchar x,uchar y)/8*8红绿双色点阵基本控制函数(像素点控制)xzhou=1;P1=tablexx;xzhou=0;yzhou=1;P1=tableyy;yzhou=0;delay(1);/使用例子:leddiandisplay(5,5)表示点亮点X=5,Y=5void lddisplay(uchar tx)/tx代表图形,编码一个图形前,先宏定义一下代表符号if(tx=0)/编码HIddisplay(2,2);ddisplay(2,5);ddisplay(2,7);ddisplay(3,2);ddisplay(3,5);ddisplay(3,7);ddisplay(4,2);ddisplay(4,5);ddisplay(4,7);ddisplay(5,2);ddisplay(5,5);ddisplay(5,3);ddisplay(5,4);ddisplay(6,2);ddisplay(6,5);ddisplay(6,7);ddisplay(7,2);ddisplay(7,5);if(tx=1) /编码1.ddisplay(2,4);ddisplay(2,5);ddisplay(2,6);ddisplay(3,5);ddisplay(4,5);ddisplay(5,5);ddisplay(6,5);ddisplay(7,5);ddisplay(6,4);if(tx=2)/编码2ddisplay(2,3);ddisplay(2,4);ddisplay(2,5);ddisplay(2,6);ddisplay(3,3);ddisplay(4,4);ddisplay(5,5);ddisplay(6,6);ddisplay(6,3);ddisplay(7,4);ddisplay(7,5);if(tx=3)/编码3ddisplay(1,4);ddisplay(1,5);ddisplay(2,3);ddisplay(2,6);ddisplay(3,6);ddisplay(4,4);ddisplay(4,5);ddisplay(4,6);ddisplay(5,6);ddisplay(6,3);ddisplay(6,6);ddisplay(7,4);ddisplay(7,5);if(tx=4)/编码 心形ddisplay(2,4);ddisplay(2,5);ddisplay(3,3);ddisplay(3,4);ddisplay(3,5);ddisplay(3,6);ddisplay(4,2);ddisplay(4,3);ddisplay(4,4);ddisplay(4,5);ddisplay(4,6);ddisplay(4,7);ddisplay(5,1);ddisplay(5,2);ddisplay(5,3);ddisplay(5,4);ddisplay(5,5);ddisplay(5,6);ddisplay(5,7);ddisplay(5,8);ddisplay(6,1);ddisplay(6,2);ddisplay(6,3);ddisplay(6,4);ddisplay(6,5);ddisplay(6,6);ddisplay(6,7);ddisplay(6,8);ddisplay(7,2);ddisplay(7,3);ddisplay(7,6);ddisplay(7,7);if(tx=5)ddisplay(2,4);ddisplay(2,5);ddisplay(3,3);ddisplay(3,6);ddisplay(6,1);ddisplay(6,3);ddisplay(6,6);ddisplay(6,8);ddisplay(7,2);ddisplay(7,7);if(tx=6)ddisplay(2,4);ddisplay(2,5);ddisplay(3,3);ddisplay(3,6);ddisplay(6,1);ddisplay(6,2);ddisplay(6,3);ddisplay(6,6);ddisplay(6,7);ddisplay(6,8);uchar keyscan(uchar x)/键盘扫描函数。/调用方法为keyscan(key1),当按下时,返回值为1,当未按下时,返回值为0.if(x=1)if(k1=0)delay(18);if(k1=0)while(!k1)ZSD=0;FM=0;display(fen,miao,miaoxs,wd);lddisplay(nk1);ZSD=1;FM=1;return(1);else return(0);else return(0);if(x=2)if(k2=0)delay(18);if(k2=0)while(!k2)ZSD=0;FM=0;display(fen,miao,miaoxs,wd);lddisplay(nk1);ZSD=1;FM=1;return(1);else return(0);else return(0);if(x=3)if(k3=0)delay(18);if(k3=0)while(!k3)ZSD=0;FM=0;display(fen,miao,miaoxs,wd);lddisplay(nk1);ZSD=1;FM=1;return(1);else return(0);else return(0);if(x=4)if(k4=0)delay(18);if(k4=0)while(!k4)ZSD=0;FM=0;display(fen,miao,miaoxs,wd);lddisplay(nk1);ZSD=1;FM=1;return(1);else return(0);else return(0);if(x=5)if(k5=0)delay(18);if(k5=0)while(!k5)ZSD=0;FM=0;display(fen,miao,miaoxs,wd);lddisplay(nk1);ZSD=1;FM=1;FM=1;ZSD=1;return(1);else return(0);else return(0);if(x=6)if(k6=0)delay(10);if(k6=0)while(!k6)ZSD=0;FM=0;display(fen,miao,miaoxs,wd);lddisplay(nk1);ZSD=1;FM=1;return(1);else return(0);else return(0);void moshi1(void)uchar i;fen=0;miao=0;miaoxs=0;wdfunc();/四个主变量nk2=0;ndisplay=7;ntime=0;while(!keyscan(key1)/等待K1按下wdfunc();display(fen,miao,miaoxs,wd);lddisplay(1);TR1=1;while(1)/检查是否有键按下if(miao%2)display(fen,miao,miaoxs,wd);else nodisplay(fen,miao,miaoxs,wd);/冒号闪烁lddisplay(1);ddisplay(8,nk2);if(keyscan(key1)TR1=0;time(nk2)*4+0=fen;time(nk2)*4+1=miao;time(nk2)*4+2=miaoxs;time(nk2)*4+3=wd;if(nk27)time(nk2+1)*4+0=0xff;/分不可能为255;所以可以以此标记nk2+;/用于计时结束后点阵指示if(keyscan(key2)timenk2*4+0=fen;timenk2*4+1=miao;timenk2*4+2=miaoxs;timenk2*4+3=wd;nk2+;if(nk2=8)TR1=0;if(TR1=0)delay(300);FM=0;delay(200);FM=1;delay(300);FM=0;delay(200);FM=1;delay(300);FM=0;delay(200);FM=1;/蜂鸣器提示计时结束ye=read_add(0xfe);/假设上次254单元中写入的是数据最后一页页地址,共4页if(ye=3)/总共分4页,分别为第0-3页,EEPROM也被开出4个入口for(i=0;i64;i+)if(!(i%2)write_add(i,timei/2);elsewrite_add(i,i);write_add(0xfe,0);elseaddress=(ye+1)*64;/ye+1进入下一个入口for(i=0;i64;i+)if(!(i%2)write_add(address,timei/2);elsewrite_add(address,i);address+;write_add(0xfe,ye+1);ndisplay=nk2-1;while(1)while(1)display(fen,miao,miaoxs,wd);lddisplay(1);ddisplay(8,nk2);ddisplay(8,(ndisplay+1);/*if(keyscan(key1)/break;/回到开始处执行*/if(keyscan(key5)ndisplay+;if(ndisplay=nk2)ndisplay=nk2-1;fen=timendisplay*4+0;miao=timendisplay*4+1;miaoxs=timendisplay*4+2;wd=timendisplay*4+3;if(keyscan(key6)if(ndisplay=0)ndisplay=0;else ndisplay-;fen=timendisplay*4+0;miao=timendisplay*4+1;miaoxs=timendisplay*4+2;wd=timendisplay*4+3;/break;void moshi2(void)fen=0;miao=0;miaoxs=0;wdfunc();while(1)wdfunc();if(miao%2)display(fen,miao,miaoxs,wd);else nodisplay(fen,miao,miaoxs,wd);/冒号闪烁lddisplay(2);if(keyscan(key2)fen=0;miao=0;miaoxs=0;if(keyscan(key3)/按下K3分加1fen+;if(fen=61)fen=0;if(keyscan(key4)/按下K4分减1if(fen=0)fen=60;else fen-;if(keyscan(key5)/按下K5秒加1miao+;if(miao=60)miao=0;if(keyscan(key6)/按下K6秒减1if(miao=0)miao=59;else miao-;if(keyscan(key1)TR1=1;while(TR1)if(miao%2)display(fen,miao,miaoxs,wd);else nodisplay(fen,miao,miaoxs,wd);/冒号闪烁if(keyscan(key1)TR1=TR1;lddisplay(2);while(fen=0)&(miao=0)&(miaoxs=0)FM=0;ZSD=0;lddisplay(xin);display(fen,miao,miaoxs,wd);if(keyscan(key1)FM=1;ZSD=1;fen=0;miao=0;miaoxs=0;break;if(keyscan(key2)FM=1;ZSD=1;fen=0;miao=0;miaoxs=0;break;if(keyscan(key3)FM=1;ZSD=1;fen=0;miao=0;miaoxs=0;break;if(keyscan(key4)FM=1;ZSD=1;fen=0;miao=0;miaoxs=0;break;if(keyscan(key5)FM=1;ZSD=1;fen=0;miao=0;miaoxs=0;break;if(keyscan(key6)FM=1;ZSD=1;fen=0;miao=0;miaoxs=0;break;void moshi3(void)uchar i;changci=4;ndisplay=0;ye=read_add(0xfe);/一共4个入口 0-3address=ye*64;for(i=0;i64;i+)if(!(i%2)timei/2=read_add(address);else ;address+;for(i=0;i8;i+)/检测八组数据中有几组有效数据if(timei*4+0=0xff)time_END=i;break;fen=timendisplay*4+0;miao=timendisplay*4+1;miaoxs=timendisplay*4+2;wd=timendisplay*4+3;ddisplay(changci,time_END);/本行用于点亮点阵X=changci,Y=tmie_END+1 点ddisplay(changci,ndisplay+1);/本行用于点亮点阵X=changci,Y=ndisplay 点display(fen,miao,miaoxs,wd);while(1)ddisplay(time_END,changci);/本行用于点亮点阵X=changci,Y=tmie_END+1 点ddisplay(ndisplay+1,changci);/本行用于点亮点阵X=changci,Y=ndisplay 点display(fen,miao,miaoxs,wd);if(keyscan(key3)ndisplay=0;changci+;if(changci=5)changci=1;ye+;if(ye=4)ye=0;address=ye*64;for(i=0;i64;i+)if(!(i%2)timei/2=read_add(address);else ;address+;for(i=0;i8;i+)/检测八组数据中有几组有效数据if(timei*4+0=0xff)time_END=i;break;fen=timendisplay*4+0;miao=timendisplay*4+1;miaoxs=timendisplay*4+2;wd=timendisplay*4+3;if(keyscan(key4)ndisplay=0;changci-;if(changci=0)changci=4;if(ye=0)ye=3;else ye-;address=ye*64;for(i=0;i64;i+)if(!(i%2)timei/2=read_add(address);else ;address+;for(i=0;i=time_END)ndisplay=0;fen=timendisplay*4+0;miao=timendisplay*4+1;miaoxs=time
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年建筑室内设计师技术能力考核试题及答案解析
- 2025年建筑规划师综合素质检测试卷及答案解析
- 2025年田长制助理笔试重点题库
- 2025年会展策划师资格认证考试试题及答案解析
- 2025年航空安全管理员资格考试试题及答案解析
- 2025年水上安全知识测试题库含答案
- 2025年公共卫生专家资格考试试题及答案解析
- 2025年运行中心招聘笔试高频题集
- 2025年动车乘务安全知识测试题集
- 儿童美术课件中段教学
- 附件 大型机设备安全检查表
- 2023《个人信息保护法》实务解读PPT
- 结核病筛查结果报告单
- GB/T 3799.1-2005商用汽车发动机大修竣工出厂技术条件第1部分:汽油发动机
- 小学音乐《村晚》优质课件设计
- 东锅300MW锅炉说明书
- 咯血(课件幻灯)
- 部门会签单模板
- 上海市环卫作业养护预算定额经费
- 宫颈环扎术护理常规
- G12《贷款质量迁徙情况表》填报说明
评论
0/150
提交评论