您好,欢迎访问三七文档
当前位置:首页 > 行业资料 > 酒店餐饮 > LM4229(lcd240128)
【北京奥运】LM4229(lcd240128)显示“北京欢迎你”2008-08-0819:182008年8月8日。同一个世界,同一个梦想;祝福北京,祝福奥运。整个电路图(8952+DS1302+LM4229)程序设计部分主程序部分lm4229_ds1302.c//=====================================//祝福北京,祝福奥运//北京欢迎你//时钟暂未加设置时间功能//=====================================#includereg52.h#includemath.h#includeabsacc.h#includeds1302.h#includelm4229.h//0123671011151618192122uchartab_time[]=2008年08月08日00:00:00星期;/*年月日时分秒星期*/sbitk1=P3^3;sbitk2=P3^4;//--------------------------//-------函数声明--------voidtrans();voidkey_scan();voidweek();voiddelay(uint);//============================================//主函数//============================================voidmain(){lcd_init();write_lcd(10,0,------------------------------);write_lcd(102,0,------------------------------);//write_lcd(0,0,2008年08月08日00:00:00星期五);write_lcd(22,1,同);write_lcd(38,1,一);write_lcd(54,1,个);write_lcd(72,1,世);write_lcd(90,1,界);write_lcd(22,27,同);write_lcd(38,27,一);write_lcd(54,27,个);write_lcd(72,27,梦);write_lcd(90,27,想);write_lcd(112,0,四川师大电子工程学院聂金波);write_pic(30,5);//北京欢迎你大字write_lcd(70,8,2008北京奥运);while(1){ds1302();trans();write_lcd(0,0,tab_time);week();}}//----------------------------------//按键函数//----------------------------------voidkey_scan(){if(k1==0){delay(5);if(k1==0){tab_time[2]++;}}}voiddelay(uintk){uinti,j;for(i=k;i0;i--)for(j=110;j0;j--);}//------------------------------------------//数据转换//------------------------------------------voidtrans(){tab_time[2]=tab_1302[6]/10+'0';//年十位tab_time[3]=tab_1302[6]%10+'0';//年个位tab_time[6]=tab_1302[4]/10+'0';//月十位tab_time[7]=tab_1302[4]%10+'0';//月个位tab_time[10]=tab_1302[3]/10+'0';//日十位tab_time[11]=tab_1302[3]%10+'0';//日个位tab_time[15]=tab_1302[2]/10+'0';//小时十位tab_time[16]=tab_1302[2]%10+'0';//小时个位tab_time[18]=tab_1302[1]/10+'0';//分十位tab_time[19]=tab_1302[1]%10+'0';//分个位tab_time[21]=tab_1302[0]/10+'0';//秒十位tab_time[22]=tab_1302[0]%10+'0';//秒个位}//------------------------------------------//星期显示//------------------------------------------voidweek(){uchari;i=tab_1302[5]-1;/*实时时钟里的值是6,但是2008/08/08是星期五,所以减1,Proteus的问题??*/switch(i){case1:write_lcd(0,28,一);break;case2:write_lcd(0,28,二);break;case3:write_lcd(0,28,三);break;case4:write_lcd(0,28,四);break;case5:write_lcd(0,28,五);break;case6:write_lcd(0,28,六);break;case7:write_lcd(0,28,日);break;default:;break;//其它情况}}//==============================================//=========================================//-----驱动程序---------------//-----作者:聂金波niejinbo999@163.com//-----完成日期:2008-07-28------//=========================================//-----星期一monday星期二tuesday星期三wednesday//-----星期四thursday星期五friday星期六saturday//-----星期日sunday//-----//-----//==========================================//--------------------------#defineucharunsignedchar#defineuintunsignedint//--------------------------//------定义端口---------sbitrst=P3^0;sbitsclk=P3^1;sbitio=P3^2;//---------------------------uchartab_1302[7]={0,10,19,30,7,3,8};//初始化时时间日期设置//秒分时日月星期年uchartab1_1302[7]={0,10,19,30,7,3,8};//--------------------------//-----函数声明------//--------------------------voidds1302();//获取DS1302时间voidwriteds_byte(uchar);//向DS1302写一字节ucharreadds_byte();//从DS1302读一字节voidds1302_init();//DS1302初始化voidwriteds_add(uchar,uchar);//指定地址向1302写一数据ucharreadds_add(uchar);//指定地址从1302读一数据//=========================================//------函数------//=========================================//-------------------------------//----向DS1302写一字节(上升沿有效)-------//----数据输入从低位到高位------------//-------------------------------voidwriteds_byte(uchardat){uchari,dat_w;dat_w=dat;//数据送给变量dat_wfor(i=0;i8;i++){io=0;//数据线先拉低if(dat_w&0x01)//如果是1{io=1;}else//如果是0{io=0;}dat_w=dat_w1;//右移一位sclk=0;//先拉低时钟信号sclk=1;//拉高时钟信号}sclk=0;//写一字节完毕,拉低时钟信号}//-------------------------------//----从DS1302读一字节(下降沿有效)--------//----读出数据时从低位0位到高位7-----------//-------------------------------ucharreadds_byte(){uchari,k;k=0;for(i=0;i8;i++){k=k1;//k右移一位,确保先读来的数据在低位if(io){k=k|0x80;}//读取的值先送K最高位sclk=1;//先拉低时钟信号sclk=0;}sclk=0;return(k);}//-------------------------------//----指定地址写一数据--------//-------------------------------voidwriteds_add(ucharadd,uchardat)//dat为十进制数{rst=0;sclk=0;rst=1;//拉高RSTwriteds_byte(add);//写地址writeds_byte((dat/104)|(dat%10));//DS1302中的时间数据是BCD码形式sclk=0;rst=0;}//-------------------------------//----指定地址读出一数据------//-------------------------------ucharreadds_add(ucharadd){uchartemp,dat1,dat2;rst=0;sclk=0;rst=1;writeds_byte(add);temp=readds_byte();//读取的数据为16进制sclk=0;//读取完毕,拉低SCLKrst=0;//拉低SCLKdat1=temp/16;//16进制转成BCDdat2=temp%16;temp=dat1*10+dat2;//转换成10进制数字return(temp);}//-------------------------------//----DS1302初始化--------//----设置初始时间--------//-------------------------------voidds1302_init(){uchari,add;add=0x80;writeds_add(0x8e,0x00);//允许写入for(i=0;i7;i++){writeds_add(add,tab1_1302[i]);add+=2;}writeds_add(0x90,0xa6);//写充电控制寄存器.writeds_add(0x8e,0x80);//禁止写入}//-------------------------------//----获取DS1302时间--------//----在主函数中调用--------//-------------------------------voidds1302(){uchari,add=0x81;//wr
本文标题:LM4229(lcd240128)
链接地址:https://www.777doc.com/doc-5249653 .html