专栏电商日志财经减肥爱情
投稿投诉
爱情常识
搭配分娩
减肥两性
孕期塑形
财经教案
论文美文
日志体育
养生学堂
电商科学
头戴业界
专栏星座
用品音乐

单片机大数字万年历电子钟制作带农历年属性温度

  介绍
  LCD12864大数字万年历电子钟设计,用了一个多星期时间,经过实物实测,每月时间相差几分钟,这是时钟走时芯片决定的,温度显示还算正常。
  图片
  万年历图片
  单片机板子
  代码includereg51。hincludeintrins。hincludestdio。hincludestring。hdefineucharunsignedchardefineuintunsignedintLCD12864通讯端口sbitRSLCD12864P27;定义选择显示类型,定义数据或指令,1数据,0指令sbitRWLCD12864P26;定义读写信号控制端,定义读或写??1读,??0写sbitENLCD12864P25;定义数据锁存信号,定义使能操作,1能,??0否defineLCD12864DatabusP0定义数据端definesc00definesc11ucharDS1302flag;定义DS1302RAM中是否写数的标志位,第一次开机初始化后RAM中写1sbitCS1P24;定义选择芯片右半屏信号sbitCS2P23;定义选择芯片左半屏信号DS1302时钟端口sbitSCLKP20;DS1302时钟口sbitDATAP21;DS1302串口数据sbitRSTP22;DS1302的复位口ucharcodeWriteRTCADDR〔7〕{0x80,0x82,0x84,0x86,0x88,0x8a,0x8c};ucharcodeREADRTCADDR〔7〕{0x81,0x83,0x85,0x87,0x89,0x8b,0x8d};ucharTIME〔7〕{0,0x38,0x15,0x25,0x05,0x03,0x22};2022年5月25星期3,15:38:00DS18B20sbitDQP37;温度探测口ucharfb;文字反白标示uinttempvalue;温度值,此变量若为uchar则温度不正常ucharTempFlag;温度正负标志按键端口sbitsetP10;设置sbitkey1P11;加sbitkey2P12;减sbitkey3P13;蜂鸣开关sbitkey4P14;背光开关ucharsetflag0;按键计数,决定调节的日期和时间sbitblP35;背光控制端sbitbzP36;蜂鸣控制端uchartempa;调时农历部分defineuintunsignedintcharsec,min,hour,day,month,year,week;定义全局变量,秒,分,时,日,月,年和星期bitcentury;世纪位标志,0为20世纪,1为19世纪ucharseccount0;定义定时计数,当seccount20时,秒加一codeuchartableweek〔12〕{0,3,3,6,1,4,6,2,5,0,3,5};月修正数据表codeuchardaycode1〔9〕{0x0,0x1f,0x3b,0x5a,0x78,0x97,0xb5,0xd4,0xf3};月份数据表codeuintdaycode2〔3〕{0x111,0x130,0x14e};bitcmoon;dataucharyearmoon,monthmoon,daymoon;函数声明读取数据表中农历月的大月或小月,如果该月为大返回1,为小返回0bitgetmoonday(ucharmonthp,uinttableaddr);voidConversion(bitc,charyear,charmonth,charday);输入阳历数据,输出阴历数据voidConverweek();输入BCD阳历数据,输出BCD星期数据voiddelayms(uintx);voidLcd12864BusyChk();voidsetxy(unsignedcharx,unsignedchary);函数名称:Conversion功能描述:输入阳历数据,输出阴历数据(只允许19012099年)参数:参数名称voidConversion(bitc,charyear,charmonth,charday){c0为21世纪,c1为19世纪输入输出数据均为BCD数据uchartemp1,temp2,temp3,monthp;uinttemp4,tableaddr;bitflag2,flagy;定位数据表地址if(c0){tableaddr(year0x641)0x3;}else{tableaddr(year1)0x3;}定位数据表地址完成取当年节日所在的公历月份temp1yearcode〔tableaddr2〕0x60;temp1cror(temp1,5);取当年节日所在的公历月份完成取当年节日所在的公历日temp2yearcode〔tableaddr2〕0x1f;取当年节日所在的公历日完成计算当年春年离当年元旦的天数,节日只会在公历1月或2月if(temp10x1){temp3temp21;}else{temp3temp20x1f1;}计算当年春年离当年元旦的天数完成计算公历日离当年元旦的天数,为了减少运算,用了两个表daycode1〔9〕,daycode2〔3〕如果公历月在九月或前,天数会少于0xff,用表daycode1〔9〕,在九月后,天数大于0xff,用表daycode2〔3〕如输入公历日为8月10日,则公历日离元旦天数为daycode1〔81〕101如输入公历日为11月10日,则公历日离元旦天数为daycode2〔1110〕101if(month10){temp4daycode1〔month1〕day1;}else{temp4daycode2〔month10〕day1;}if((month0x2)(year0x40)(year!0))temp41;如果公历月大于2月并且该年的2月为闰月,天数加1计算公历日离当年元旦的天数完成判断公历日在节日前还是节日后if(temp4temp3){公历日在节日后或就是节日当日使用下面代码进行运算temp4temp3;month0x1;monthp0x1;monthp为月份指向,公历日在节日前或就是节日当日monthp指向首月flag2getmoonday(monthp,tableaddr);检查该农历月为大小还是小月,大月返回1,小月返回0flagy0;if(flag20)temp10x1d;小月29天elsetemp10x1e;大小30天temp2yearcode〔tableaddr〕0xf0;temp2cror(temp2,4);从数据表中取该年的闰月月份,如为0则该年无闰月while(temp4temp1){temp4temp1;monthp1;if(monthtemp2){flagyflagy;if(flagy0)month1;}elsemonth1;flag2getmoonday(monthp,tableaddr);if(flag20)temp10x1d;elsetemp10x1e;}daytemp41;}else{公历日在节日前使用下面代码进行运算temp3temp4;if(year0x0){year0x63;c1;}elseyear1;tableaddr0x3;month0xc;temp2yearcode〔tableaddr〕0xf0;temp2cror(temp2,4);if(temp20)monthp0xc;elsemonthp0xd;monthp为月份指向,如果当年有闰月,一年有十三个月,月指向13,无闰月指向12flagy0;flag2getmoonday(monthp,tableaddr);if(flag20)temp10x1d;elsetemp10x1e;while(temp3temp1){temp3temp1;monthp1;if(flagy0)month1;if(monthtemp2)flagyflagy;flag2getmoonday(monthp,tableaddr);if(flag20)temp10x1d;elsetemp10x1e;}daytemp1temp31;}cmoonc;原程序这里又把这得出的值变回BCD码。但根据我后面的程序,我不需要。后面用来显示的农历信息的程序分别是dispt3()和dispt4()yearmoonyear;monthmoonmonth;daymoonday;}函数名称:Converweek功能描述:输入BCD阳历数据,输出BCD星期数据(只允许19012099年)参数:参数名称:输入输出?类型描述算法:日期年份所过闰年数月较正数之和除7的余数就是星期,但如果是在闰年又不到3月份上述之和要减一天再除7星期数。余数为0时,为星期天。voidConverweek(){century0为21世纪,c1为19世纪输入输出数据均为BCD数据uchartemp1,temp2;temp1year;if(century0){temp1temp1100;}如果为21世纪,年份数加100temp2temp14;所过闰年数只算1900年之后的temp2temp1temp2;temp2temp27;为节省资源,先进行一次取余,避免数大于255temp2temp2daytableweek〔month1〕;if(year0x40month3)temp21;weektemp27;}LCD12864部分端口说明:ENLCD12864:使能端锁存信号。RSLCD12864:DI命令数据寄存器选择端RWLCD12864:读写信号控制端。defineLCDDataP0RS(DI)1,表示DB0DB7显示数据;RS(DI)0,表示DB0DB7显示指令数据RW1,E1,数据被读到DB7DB0;RW0,E10,数据被读到DB7DB0;数据被写到IR或DR。(定义数据端口为LCDData为P0口)RSTLCD12864复位端口,不接或接高电平,低电平会导致复位函数名称:voidLcd12864BusyChk()函数功能:忙检测,若忙则等待,最长等待时间为60MS(此判忙函数经过仿真已OK)入口参数:无出口参数:无voidLcd12864BusyChk(){LCD12864Databus0x00;ENLCD128640;RSLCD128640;RWLCD128641;ENLCD128641;while(LCD12864Databus0x80);判断P0。7口nop();ENLCD128640;}函数名称:voidsetxy(unsignedcharx,unsignedchary)(仿真时的函数,已OK)功能描述:设置显示位置!X,Y分别代表横纵坐标!输入参数?:unsignedcharx,unsignedchary输出参数:无??参数名称:??列地址赋值,?x取值064,页面地址赋值,y取值08voidsetxy(unsignedcharx,unsignedchary){if(x64){CS11;CS20;}选择右半屏else{CS10;CS21;}选择左半屏Lcd12864BusyChk();RSLCD128640;RWLCD128640;LCD12864Databus0x40x;列地址赋值,x取值064ENLCD128641;ENLCD128640;Lcd12864BusyChk();RSLCD128640;RWLCD128640;LCD12864Databus0xb8y;页面地址赋值,y取值08ENLCD128641;ENLCD128640;LCD12864Databus0xff;}函数名称:voidsetxy(unsignedcharx,unsignedchary)(实物时的函数,已OK)功能描述:设置显示位置!X,Y分别代表横纵坐标!输入参数?:unsignedcharx,unsignedchary输出参数:无??参数名称:??列地址赋值,?x取值064,页面地址赋值,y取值08函数名称:voidLCD12864DispYanYueRi(fb)函数功能:设置日期的时候,选中的参数可以反白显示,右屏第一行显示程序,由which决定第几个参数黑显,如which1时,年份黑显。入口参数:无出口参数:无voidLCD12864DispYanYueRi(fb)显示年月日{if(century)如果世纪为1{Lcd12864DispChar(0,0,1,0);则第1行第1列显示’1Lcd12864DispChar(1,0,9,0);则第1行第2列显示’9}else{Lcd12864DispChar(0,0,2,0);则第1行第1列显示’2Lcd12864DispChar(1,0,0,0);则第1行第2列显示’0}Lcd12864DispChar(2,0,year10,fb);第1行第3列显示年十位数Lcd12864DispChar(3,0,year10,fb);第1行第4列显示年个位数Lcd12864DispChar(4,0,11,0);第1行第5列显示第11个数据Lcd12864DispChar(5,0,month10,fb);第1行第6列显示月十位数Lcd12864DispChar(6,0,month10,fb);第1行第7列显示月个位数Lcd12864DispChar(7,0,11,0);第1行第8列显示第11个数据Lcd12864DispChar(8,0,day10,fb);第1行第9列显示日十位数Lcd12864DispChar(9,0,day10,fb);第1行第10列显示日个位数}函数名称:voidLCD12864DispShiFenMiao(fb)显示时分秒函数功能:设置时间的时候,选中的参数可以反白显示,右屏第二行显示程序,由which决定第几个参数黑显,如which1时,年份黑显。入口参数:无出口参数:无voidLCD12864DispShiFenMiao(fb){Lcd12864DispDaShuZi(0,2,hour10,fb);第2行第1列显示小时十位数Lcd12864DispDaShuZi(2,2,hour10,fb);第2行第3列显示小时个位数if(sec20)如果秒为奇数则显示冒号,否则显示空Lcd12864DispDaShuZi(4,2,10,0);第2行第4列第10个大数字为显示冒号,不反白elseLcd12864DispDaShuZi(4,2,11,0);第2行第4列第11个大数字为显示空,不反白Lcd12864DispDaShuZi(6,2,min10,fb);第2行第6列显示分钟的十位数Lcd12864DispDaShuZi(8,2,min10,fb);第2行第8列显示分钟的个位数if(sec20)Lcd12864DispDaShuZi(10,2,10,0);第2行第10列第10个大数字为显示冒号,不反白elseLcd12864DispDaShuZi(10,2,11,0);第2行第10列第11个大数字为显示空,不反白Lcd12864DispDaShuZi(12,2,sec10,fb);第2行第10列显示秒钟的十位数Lcd12864DispDaShuZi(14,2,sec10,fb);显示秒钟}函数名称:voidLCD12864DispWeek(fb)显示周函数功能:设置时间的时候,选中的参数可以反白显示,右屏第一行显示程序,由which决定第几个参数黑显,如which1时,年份黑显。入口参数:无出口参数:无voidLCD12864DispWeek(){uchartemp;Lcd12864DispWord(12,0,27,0);第1行第13列第27个汉字为显示周字Converweek();调用星期阳历数据if(week)tempweek;赋week值为16,用来显示一六elseweek26;赋week值为0时,赋值26用来显示日Lcd12864DispWord(14,0,week,0);第1行第14列第26个汉字为显示日verifytime();此函数加上才能得到十二生肖后的农历日期ReadTimeDS1302();GetTimeDS1302();Conversion(century,year,month,day);得到农历日期if(cmoon)tempyearmoon1212;如果是19世纪,则可直接得出年的属性elsetemp(yearmoon100)1212;农历年也过了世纪,则农历年加100再求属性Lcd12864DispWord(0,6,temp,1);第7行第1列显示十二生肖属性}函数名称:voidLCD12864DispNongLiRiQi(fb)显示农历日期函数功能:第4行农历显示由which决定第几个参数黑显,如which1时,年份黑显。入口参数:无出口参数:无voidLCD12864DispNongLiRiQi(){uchartemp1,temp2;verifytime();Conversion(century,year,month,day);得到农历日期,世纪年月日temp1monthmoon10;temp2monthmoon10;月份高位为0,低位为1,则月份前位显正,后位显示月字if(temp10temp21)如果农历日期,月的十位为0,个位为1,则为正月{Lcd12864DispWord(2,6,39,0);第7行第3列显示正字Lcd12864DispWord(4,6,25,0);第7行第5列显示月字}月份高位为0,低位都大于等于2,则月份高位显月份,后位显月。elseif(temp10temp22){Lcd12864DispWord(2,6,temp2,0);第7行第3列显示月份Lcd12864DispWord(4,6,25,0);第7行第5列显示月字}月份高位为1,低位为0,则月份高位显十,后位显月。elseif(temp11temp20){Lcd12864DispWord(2,6,0,0);第7行第3列显示十字Lcd12864DispWord(4,6,25,0);第7行第5列显示月字}月份高位为1,低位为1,则月份高位显冬,后位显月。elseif(temp11temp21){Lcd12864DispWord(2,6,29,0);第7行第3列显示冬字Lcd12864DispWord(4,6,25,0);第7行第5列显示月字}else{Lcd12864DispWord(2,6,30,0);第7行第3列显示腊字Lcd12864DispWord(4,6,25,0);第7行第5列显示月字}temp1daymoon10;temp2daymoon10;switch(temp1){日期高位为0,则前位显初case0:Lcd12864DispWord(6,6,10,0);第7行第7列显示初字Lcd12864DispWord(8,6,temp2,0);第7行第9列显示低位字break;日期高位为1且低位不为0,则前位显十case1:if(temp2){Lcd12864DispWord(6,6,0,0);第7行第7列显示十字Lcd12864DispWord(8,6,temp2,0);第7行第9列显示低位农历月份break;}else日期高位为1且低位为0,则显初十{Lcd12864DispWord(6,6,10,0);第7行第7列显示初字Lcd12864DispWord(8,6,0,0);第7行第9列显示十字break;}日期高位为2,则前位显廿case2:Lcd12864DispWord(6,6,11,0);第7行第7列显示廿字Lcd12864DispWord(8,6,temp2,0);第7行第9列显示低位农历月份break;日期高位为3,则前位显三,低位显十case3:Lcd12864DispWord(6,6,3,0);第7行第7列显示三字Lcd12864DispWord(6,6,temp2,0);第7行第9列显示低位农历月份break;}}主程序voidmain(void){bl0;lcd12864Init();液晶初始化,此函数只起清屏的作用century0;对世纪赋初值Conversion(century,year,month,day);DS1302flagReadDS1302(0xc0);读取首地址中的值,0xc0为DS1302RAM的首地址,偶数为写,奇数读if(DS1302flag0){InitDS1302();时间初始化,起决于当前显示的时间WriteDS1302(0xc0,1);}while(1){ReadTimeDS1302();读出时钟数据GetTimeDS1302();将BCD时钟数据转换为可以计算的HEX数据GetTemp();Lcd12864DispTemp();KeyScan();if(setflag0){Lcd12864DispTime();这里调用显示时间程序}}}

未来5年中美强势霸榜,中国GDP预计增长8。12万亿美元,美国呢?未来5年,全球经济格局将发生巨大的变化。美国加息和逆全球化会在全球造成巨大的波动,各国经济会呈现明显的两极分化,强者越强,弱者越弱。美国是全球唯一的超级强国,也是全球第一大经济体,官宣!独行侠完成压哨签约,球哥或赛季报销,勇士不该续约鲁尼?官宣!独行侠完成压哨签约,球哥或赛季报销,勇士不该续约鲁尼?湖人昨天在主场惨遭步行者读秒绝杀无缘三连胜,真的让人尤为惊叹!因为他们在第四节前段曾一度领先对手多达17分,但最终却被步NBA最新排名!4大竞争对手全部输球,勇士坐收大礼,库里双喜临门东部最新排名NBA常规赛已经打了一个多月,凯尔特人是全联盟唯一一支胜率超过80的球队,他们战绩17胜4负,胜率81,不仅坐稳了东部第一的宝座,而且还是联盟第一战绩,遥遥领先其他球队为什么鼻子丑的人无法好看?公认的7种丑鼻子,希望你没有中招鼻子还是中医上的面王,有上诊于鼻,下验于腹的说法,可以看出在面部望诊中鼻的价值非常大。拥有一个好看的鼻子,能非常好地改善一个人的面部形态,但是在现实生活中,很多人却没有一个令自己非17岁西班牙公主暗恋足球小将?双方粉丝支持两人颜值超般配近日,卡塔尔世界杯是很多球迷关注的焦点,除了赛事,关于界杯球星的成长经历和新闻故事也吸引了无数网友,其中在西班牙对阵哥斯达黎加的比赛中,小将加维凭借精湛的球技和超高的颜值获得了超高足球到底有没有国界足球有没有国界?现在足球联赛非常商业化,每个球队都有外籍球员,但是足球没有国界吗?作为大英帝国的当家人英格兰说了算,英格兰队对战美国队的时候,英格兰队与美国队竟然是平局,请问您自己高跟鞋的来历高跟鞋是一种带有高跟的鞋,最早是男性的增高鞋。据说是法国国王路易十四发明的。为了限制宫女们晚上偷偷出宫参加舞会,工匠们就将鞋跟加高,当宫女们踩踏地板时会发出嘎吱声,从而制止宫女出宫44岁刘涛有多美?穿上新中式旗袍,尽显古典优雅的女神范儿头条创作挑战赛刘涛是很多人心中的气质女神,她也是一位冻龄女神,44岁的她看上去依旧还是那么年轻漂亮,而且,她还是两个孩子的妈妈呢。如果要问刘涛到底有多美?那就看看她最新的一组新中式巴西球员集体感冒巴西球星安东尼近来出现了感冒症状,这影响了他的竞技状态。在接受采访时,安东尼称自己感冒是球场空调所致。据报道,巴西阵中的内马尔帕奎塔阿利松等人也出现了感冒的症状。与此同时,巴西媒体打勇士14分钟0分0板0助0断0帽0失误!连个犯规都没有!真奇葩战独行侠,金州信心十足,勇士近来一扫颓势,近6战5胜,赢尼克斯,灭火箭,诛爵士,胜森林狼,胜快船,汤普森和普尔等人状态回暖,让库里不必再孤军作战。勇士连胜,士气正盛。反观独行侠这边刘雯身材好真任性,穿浴袍式大衣就出门,却意外显得高级大气在时尚圈当中,有一些潮流单品总是让人摸不到头脑,不知道设计师们到底是怎么想的,这些服饰,往往驾驭难度非常高,并不是普通人能够hold住的。比如,浴袍风的大衣就是其中一种,中长款的大
一群人闯入蒙古妖山,遭遇山难,27年后幸存者才讲出当年的细节欢迎来到自说自话的总裁今天,我们来聊一个真正的未解之谜哈马尔达班山难事件。事件发生在1993年的8月,地点是俄罗斯贝加尔湖南边的哈马尔达班(KhamarDaban)山脉。这片山脉最双十一将至先涨价再降价老套路为何难禁止10月24日晚8点,各大电商平台的双十一预售正式开启,今年双十一大促进入实质性阶段。近日有网友发现某平台在售的手机在悄然涨价。山东的沈女士爆料称,某品牌同款型号的手机,10月18日剧中令人胆颤的假戏真做,是真敬业还是借拍戏之名真霸凌文2号探秘人编辑2号探秘人拍戏演戏,顾名思义需要演员来演,好的演员更是要演得逼真。有些演员为了追求逼真,更是提出假戏真做真耳光真拳打脚踢,观众看了都胆颤,更有甚者吻戏入迷到伸舌头但两岸青年以乐交友以书会友在无锡分享青春梦两岸情活动合影(图片来源无锡市滨湖区台办)中国台湾网10月28日讯10月26日,书香两岸乐动湖湾两岸青年读书分享会暨两岸音乐文化交流会在无锡市滨湖区滨心连台交流基地举行。台湾青年代表区培外媒欧洲今冬能源保障看天吃饭欧洲因俄罗斯能源供应减少而出现的天然气价格和电价暴涨正在加剧通货膨胀,在北半球冬季来临前就让消费者深受创纪录账单之苦。而今年冬天的能源保障只能看天吃饭。据西班牙世界报网站10月24民政部等部门加强残疾人两项补贴精准管理民政部网站10月28日消息,民政部财政部中国残联发布关于加强残疾人两项补贴精准管理的意见。一进一步加强补贴政策宣传。各地要加强残疾人两项补贴政策宣传讲解,帮助残疾人及监护人知晓政策中国人寿前三季度净利润下降36,财务负责人董秘迎变更10月27日晚间,中国人寿发布2022年度三季报。报告显示,2022年前三季度,中国人寿实现营业收入7010。12亿元,同比下降3。7。实现归属于母公司股东的净利润311。17亿元为什么说好公司不等于好股票?恒瑞医药的暴跌深刻说明了这一点在leo十多年的股票投资经历中,最惨的经历应该是这两年的生物医药投资了,也正是因为这一次的惨痛经历,让我对好公司不等于好股票,这句话有了一个全新的,极其深刻的认识和理解。去年看到恒前三季营收增长不及预期,老板电器布局智能厨电切入预制菜赛道南方财经全媒体记者翁榕涛广州报道10月25日,老板电器披露了三季报,前三季度录得营收72。37亿元,同比微增2。35录得归母净利润12。34亿元,同比减少8。11。年初,老板电器副从90后演技担当到如今无戏可拍,丑闻缠身的张一山到底做错了什么2014年,在做客青海卫视真人秀我是传奇专访时,张一山在被问及是否真的和小雪谈恋爱时,流露出了一副耍赖的表情你们怎么说我管不着,反正在我这里我一定说不是。而在录制我是传奇过程中,张世界动画日小时候每天最期待的就是放学奔跑回家守在电视旁等待心仪的动画片趁着今天(10月28日)世界动画日让我们一起回忆一下那些经典又令人印象深刻的国产动画片世界动画日的由来世界动画日,每年的
友情链接:快好找快生活快百科快传网中准网文好找聚热点快软网