智能药箱代码

智能药箱代码

ID:82215849

大小:33.00 KB

页数:7页

时间:2022-10-18

上传者:U-145318
智能药箱代码_第1页
智能药箱代码_第2页
智能药箱代码_第3页
智能药箱代码_第4页
智能药箱代码_第5页
智能药箱代码_第6页
智能药箱代码_第7页
资源描述:

《智能药箱代码》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

#include#include#defineucharunsignedchar#defineuintunsignedint//1为功能键,2为增加时间键,3为减少时间键#include//#include//#include#defineucharunsignedcharsbitsclk=P1^5;sbitio=P1^6;sbitrst=P1^7;uchartime[]={0x00,0x42,0x08,0x04,0x09,0x06,0x10};uchartimetmp[7];ucharMAX[]={59,59,23,31,12,7,99};ucharMINX[]={0,0,0,1,1,1,1};uintreaddata[7];ucharsec,min,hour,day,month,week,year;ucharkeynum,ss;voidwrite(uchardate)//写一个字节{uchari;for(i=0;i<8;i++){io=date&0x01;sclk=1;sclk=0;date=date>>1;}}ucharread()//读一个字节{ucharshuju,i;for(i=0;i<8;i++){shuju=shuju>>1;sclk=0;if(io)shuju=shuju|0x80;

1sclk=1;}returnshuju;}voidwritebyte(ucharadd,date)//写时间的一个单位(分/秒/时/年/月/日/周){rst=0;sclk=0;rst=1;write(0x8e);write(0x00);rst=0;sclk=0;rst=1;write(add);write(date);rst=0;sclk=0;rst=1;write(0x8e);write(0x80);rst=0;sclk=1;}voidwritetime()//初始化时间{uchari,j=0x80;for(i=0;i<7;i++){writebyte(j,time[i]);j+=2;}}ucharreadbyte(add)//读一个单位时间(分/秒/时/年/月/日/周){uchardate;rst=0;sclk=0;rst=1;write(add);date=read();rst=0;sclk=1;returndate;}voidreadtime()//读取时间{uchari,j=0x81;for(i=0;i<7;i++){readdata[i]=readbyte(j);j+=2;}}

2voidprocess()//数制转换{uchari;for(i=0;i<7;i++){readdata[i]=(readdata[i]>>4)*10+(readdata[i]&0x0f);}}voiddisplay()//显示函数{display_1602N(0,1,2);display_1602N(1,1,0);display_1602N(2,1,year/10);display_1602N(3,1,year%10);display_1602S(4,1,"-");display_1602N(5,1,month/10);display_1602N(6,1,month%10);display_1602S(7,1,"-");display_1602N(8,1,day/10);display_1602N(9,1,day%10);display_1602S(11,1,"WEEK");display_1602N(15,1,week);display_1602S(1,2,"TIME");display_1602S(5,2,":");display_1602N(6,2,hour/10);display_1602N(7,2,hour%10);display_1602S(8,2,":");display_1602N(9,2,min/10);display_1602N(10,2,min%10);display_1602S(11,2,":");display_1602N(12,2,sec/10);display_1602N(13,2,sec%10);}voidtimeout()//提取时间{sec=readdata[0];min=readdata[1];hour=readdata[2];day=readdata[3];month=readdata[4];week=readdata[5];year=readdata[6];}voidshanshuo2(ucharadd,time)//1602第二行闪烁函数

3{write_com(0x80+0x40+add);write_date(0x10);write_com(0x80+0x40+add-1);write_date(0x10);delay(100);display_1602N(add,2,time%10);display_1602N(add-1,2,time/10);delay(100);}voidshanshuo1(ucharadd,time)//1602第一行闪烁函数{write_com(0x80+add);//当前位什么也不显write_date(0x10);write_com(0x80+add-1);write_date(0x10);delay(100);//延时display_1602N(add,1,time%10);//显示时间display_1602N(add-1,1,time/10);delay(100);//延时}voidzj(ucharnum)//增减函数{switch(keynum){case1:ss++;break;//如果是1,则进入下一位的调整case2:{//如果是2,则当前闪烁的位加1timetmp[num]++;if(timetmp[num]>MAX[num])//如何超过了闪烁位的最大值,返回最小值timetmp[num]=MINX[num];}break;case3:{//如果是3,则当前闪烁的位减1timetmp[num]--;if(timetmp[num]

4while(ss==0)//调秒{key=0;timetmp[0]=readbyte(0x81)/16*10+readbyte(0x81)%16;//从1302中取出时间shanshuo2(13,timetmp[0]);//显示时间并闪烁keynum=jiance();//按键检测zj(0);//对时间进行操作writebyte(0x80,timetmp[0]/10*16+timetmp[0]%10);//把调整过的时间写到1302中}while(ss==1)//调分{key=0;timetmp[1]=readbyte(0x83)/16*10+readbyte(0x83)%16;//同上shanshuo2(10,timetmp[1]);keynum=jiance();zj(1);writebyte(0x82,timetmp[1]/10*16+timetmp[1]%10);}while(ss==2)//调时{key=0;timetmp[2]=readbyte(0x85)/16*10+readbyte(0x85)%16;//同上shanshuo2(7,timetmp[2]);keynum=jiance();zj(2);writebyte(0x84,timetmp[2]/10*16+timetmp[2]%10);}while(ss==3)//调日{key=0;timetmp[3]=readbyte(0x87)/16*10+readbyte(0x87)%16;//同上shanshuo1(9,timetmp[3]);keynum=jiance();zj(3);writebyte(0x86,timetmp[3]/10*16+timetmp[3]%10);}while(ss==4)//调月{key=0;timetmp[4]=readbyte(0x89)/16*10+readbyte(0x89)%16;shanshuo1(6,timetmp[4]);keynum=jiance();zj(4);

5writebyte(0x88,timetmp[4]/10*16+timetmp[4]%10);}while(ss==5)//调周{key=0;timetmp[5]=readbyte(0x8b)/16*10+readbyte(0x8b)%16;//同上shanshuo1(15,timetmp[5]);keynum=jiance();zj(5);writebyte(0x8a,timetmp[5]/10*16+timetmp[5]%10);}while(ss==6)//调年{key=0;timetmp[6]=readbyte(0x8d)/16*10+readbyte(0x8d)%16;//同上shanshuo1(3,timetmp[6]);keynum=jiance();zj(6);writebyte(0x8c,timetmp[6]/10*16+timetmp[6]%10);}}}voidmain(){init_1602();//初始化1602writetime();//首次上电,往1302里面写时间while(1){readtime();//从1302中读时间process();//把取出的时间(BCD码)转化为十进制timeout();//把时间从数组中提取出来display();//在1302上显示时间keynum=jiance();//检测按键是不是要调整时间if(keynum==1){ss=0;jpaction();//相应调时操作writebyte(0x80,timetmp[0]/10*16+timetmp[0]%10);//重写秒,把秒写回到调之前的位置ss=0;key=0;}}

6}

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。
大家都在看
近期热门
关闭