单片机课程设计报告--基于at89s52的电子万年历设计内容摘要:

C^0。 //移位时的第 0 位 sbit acc7=ACC^7。 //移位时用的第 7 位 uint tem,flag1,flag2,lfen,lshi,shi,fen,year1,year2。 uchar tflag,ReadValue。 uchar miao,minute,hour,day,month,year,week,count=0,flag3=0,flag4=0。 uchar read[7]={0,0,0,0,0,0,0}。 //时间日期缓存 uchar read1[]={0,0,0}。 //闹钟缓存 uchar code write1[]={0x10,0x59,0x23}。 //闹钟初始化 uchar code write[7]={0x30,0x58,0x23,0x31,0x12,0x07,0x13}。 //时间日期初始化 uchar code table1[]=2020 年 00 月 00 日。 uchar code table4[]=周日 23 时 58分 00。 uchar code table2[]={闹铃 : 00时 00 分 00}。 uchar code table3[]=温度: ℃。 uchar code table5[]={Wele To Lcd!}。 //欢迎界面 uchar code table6[]={Happy Every Day!}。 //欢迎界面 uchar code table55[]={欢迎 _ _ 欢迎 }。 uchar code table66[]={快乐每一天 }。 uchar code yearout0[]={0,12,24,36,48,60,72,84,98}。 //龙 uchar code yearout1[]={1,13,25,37,49,61,73,85,99}。 //蛇 uchar code yearout2[]={2,14,26,38,50,62,74,86}。 //马 uchar code yearout3[]={3,15,27,39,51,63,75,87}。 //羊 uchar code yearout4[]={4,16,28,40,52,64,76,88}。 //猴 19 uchar code yearout5[]={5,17,29,41,53,65,77,89}。 //鸡 uchar code yearout6[]={6,17,30,42,54,66,78,90}。 //狗 uchar code yearout7[]={7,19,32,43,55,67,79,91}。 //猪 uchar code yearout8[]={8,20,33,44,56,68,80,92}。 //鼠 uchar code yearout9[]={9,21,34,45,57,69,81,93}。 //牛 uchar code yearout10[]={10,22,35,46,58,70,82,94,96}。 //虎 uchar code yearout11[]={11,23,36,47,59,71,83,95,97}。 //兔 uchar code year1out0[]={龙 }。 uchar code year1out1[]={蛇 }。 uchar code year1out2[]={马 }。 uchar code year1out3[]={羊 }。 uchar code year1out4[]={猴 }。 uchar code year1out5[]={鸡 }。 uchar code year1out6[]={狗 }。 uchar code year1out7[]={猪 }。 uchar code year1out8[]={鼠 }。 uchar code year1out9[]={牛 }。 uchar code year1out10[]={虎 }。 uchar code year1out11[]={兔 }。 uchar code table7[]={一 }。 uchar code table8[]={二 }。 uchar code table9[]={三 }。 uchar code table10[]={四 }。 uchar code table11[]={五 }。 uchar code table12[]={六 }。 uchar code table13[]={日 }。 void delayms(uint i)//毫秒 { uint j,k。 for(j=i。 j0。 j) for(k=144。 k0。 k)。 } void delayus(uint i) { while(i)。 } void didi() { beer=0。 delayms(100)。 beer=1。 delayms(100)。 } void write_mand(uchar )//写指令函数 { rs=0。 20 rw=0。 P2=。 delayms(2)。 en=1。 delayms(3)。 en=0。 } void write_data(uchar dat)//写数据函数 { rs=1。 rw=0。 P2=dat。 delayms(2)。 en=1。 delayms(3)。 en=0。 } void LCD_init()//对 1602 初始化 { write_mand(0x01)。 //清屏 write_mand(0x38)。 // write_mand(0x80)。 //初始地址 write_mand(0x0c)。 //开显示,光标不显示 write_mand(0x06)。 //地址指针自动加 1 } void displaystart(void) //显示欢迎界面 { uchar i。 write_mand(0x80)。 for(i=0。 i15。 i++) { write_data(table5[i])。 } write_mand(0x88)。 for(i=0。 i16。 i++) { write_data(table6[i])。 } write_mand(0x90)。 for(i=0。 table55[i]!=39。 \039。 i++) { write_data(table55[i])。 } 21 write_mand(0x98)。 for(i=0。 table66[i]!=39。 \039。 i++) { write_data(table66[i])。 } delayms(3000)。 write_mand(0x01)。 } void write_byte(uchar temp) { uchar i。 for(i=0。 i8。 i++) { clk=0。 delayus(5)。 if(tempamp。 0x01) dat=1。 else dat=0。 clk=1。 delayus(5)。 temp=1。 } } uchar read_byte() { uchar i,temp=0。 for(i=0。 i8。 i++) { clk=0。 delayus(5)。 dat=0。 temp=1。 if(dat) temp|=0x80。 //1000 0000 else tempamp。 =0x7f。 //0111 1111 clk=1。 delayus(5)。 } 22 return temp。 } void write_date(uchar addr,uchar date) { res=0。 clk=0。 delayus(5)。 res=1。 delayus(5)。 write_byte(addr)。 delayus(1)。 write_byte(date)。 res=0。 delayus(5)。 } uchar ReadSet1302(uchar addr) { uchar dat。 res=0。 clk=0。 delayus(5)。 res=1。 delayus(5)。 write_byte(addr)。 delayus(5)。 dat=read_byte()。 res=0。 delayus(5)。 return dat。 } void ReadTime() //读时间 { write_date(0x8f,0x80)。 //禁止写入 read[0]=ReadSet1302(0x81)。 //读取秒寄存器的数据 read[1]=ReadSet1302(0x83)。 //读取分钟寄存器的数据 read[2]=ReadSet1302(0x85)。 //读取小时寄存器的数据 read[3]=ReadSet1302(0x87)。 //读取日期寄存器的数据 23 read[4]=ReadSet1302(0x89)。 //读取月寄存器的数据 read[5]=ReadSet1302(0x8b)。 //读取星期寄存器的数据 read[6]=ReadSet1302(0x8d)。 //读取年寄存器的数据 read1[2]=ReadSet1302(0xc1)。 //闹钟时 read1[1]=ReadSet1302(0xfd)。 //闹钟分 read1[0]=ReadSet1302(0xf9)。 //闹钟秒 } void SetTime() //写入时间 { write_date(0x8e,0x00)。 //可以写入 write_date(0x80,write[0])。 //miao write_date(0x82,write[1])。 //fen write_date(0x84,write[2])。 // shi write_date(0x86,write[3])。 //ri write_date(0x88,write[4])。 //yue write_date(0x8a,write[5])。 //week write_date(0x8c,write[6])。 //nian write_date(0xc0,write1[2])。 //闹钟小时初始化 write_date(0xfc,write1[1])。 //闹钟分钟初始化 write_date(0xf8,write1[0])。 //闹钟秒钟初始化 write_date(0x8f,0x80)。 //禁止写入 } void display(uchar date)//在 lcd 显示两位数 { uchar ge,shi。 shi=date/16。 ge=date%16。 write_data(shi+0x30)。 write_data(ge+0x30)。 } void display2(uchar date) //显示星期 { uchar ge,i。 ge=date%16。 switch(ge) { case 24 1:write_mand(0x91)。 for(i=0。 table7[i]!=39。 \039。 i++)write_data(table7[i])。 break。 case 2:write_mand(0x91)。 for(i=0。 table8[i]!=39。 \039。 i++)write_data(table8[i])。 break。 case 3:write_mand(0x91)。 for(i=0。 table9[i]!=39。 \039。 i++)write_data(table9[i])。 break。 case 4:write_mand(0x91)。 for(i=0。 table10[i]!=39。 \039。 i++)write_data(table10[i])。 break。 case 5:write_mand(0x91)。 for(i=0。 table11[i]!=39。 \039。 i++)write_data(table11[i])。 break。 case 6:write_mand(0x91)。 for(i=0。 table12[i]!=39。 \039。 i++)write_data(table12[i])。 break。 case 7:write_mand(0x91)。 for(i=0。 table13[i]!=39。 \039。 i++)write_data(table13[i])。 break。 } } void display3(void) //显示生肖 { uchar num,i。 for(i=0。 i9。 i++) {if(year2==yearout0[i])。
阅读剩余 0%
本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。 用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。