LING=0;
if(hour==shi&&minute==fen&&niao_hao) ShowASC(6,120,0x3d); if(Ms50==10) { Ms50=0; half_s=!half_s; } if(Ms50==0) LING=1; ShowASC(6,120,0x3a); }
/**************timer0中断处理**************************/ void time0() interrupt 1 {
TH0=-50000/256; TL0=-50000%6; Ms50++; }
(2)液晶显示子程序
#ifndef _LCM12864_2009_4_1_ #define _LCM12864_2009_4_1_
/*********************选择屏幕********************************/ void SelectScreE(uchar screE) {
switch(screE) {
case 0:CS1=1;CS2=1;break;//全屏 case 2:CS1=1;CS2=0;break;//左屏 case 1:CS1=0;CS2=1;break;//右屏 default:break; } }
/*********************初始化相关*******************************/ void InitLCD(void) {
SetOnOff(0); ClearScreE(0); SetOnOff(1); }
/***************开关显示******************/ void SetOnOff(uchar onoff) {
onoff|=0x3e; WriteCmd(onoff); }
/*************清屏**********/ void ClearScreE(uchar screE) {
unsigned char i,j; SelectScreE(screE); for(i=0;i<8;i++) {SetLine(i);
for(j=0;j<64;j++) {
SetColumn(j); WriteByte(0x00); } } }
/******************设定列地址**************/ void SetColumn(uchar column) {
column &= 0x3f; // 0= 26 } /**************显示数字8*16*********************/ void ShowASC(uchar lin,uchar column,uchar ASC) { unsigned char *address; address=&nAsciiDot[ASC-0X30][0]; Show8x8(lin,column,address); Show8x8(lin+1,column,address+8); } /********************显示汉字16*16****************************/ void ShowChina(uchar lin,uchar column,uchar num) { unsigned char *address; address = &HZcode[num][0]; Show8x8(lin,column,address); Show8x8(lin,column+8,address+8); Show8x8(lin+1,column,address+16); Show8x8(lin+1,column+8,address+24); } #endif (3)ds1302子程序 #ifndef __ds1302_H__ #define __ds1302_H__ /***************往DS1302写入1Byte数据************************/ void v_WTInputByte(uchar ucDa) { uchar i; ACC= ucDa; for(i=8; i>0; i--) { T_IO = ACC0; T_CLK = 1; T_CLK = 0; ACC =ACC>> 1; } } /**********************从DS1302读取1Byt**********************/ uchar uc_RTOutputByte(void) { uchar i; for(i=8; i>0; i--) { ACC = ACC>>1; ACC7 = T_IO; T_CLK = 1; T_CLK = 0; } return(ACC); } /**********************往DS1302写入数*************************/ void wr_ds1302(uchar ucAddr, uchar ucDa) { T_RST = 0; T_CLK = 0; T_RST = 1; v_WTInputByte(ucAddr); /* 地址,命令 */ v_WTInputByte(ucDa); /* 写1Byte数据*/ T_CLK = 1; T_RST =0; } #endif 3.仿真图 27 四论文小结 转眼间论文已近到了尾声了。在这期间我学习到很多的新知识。尤其是对编程的掌握。以往在学校时学习编程时遇到到新的芯片时,都是老师先编好程序我们理解记忆。而这次我独立的完成DS1302的编程对我来说这是一次很大的进步吧。在这次论文中我还把我以前学的很多的知识又用了一边。使我对以前的知识又有了新的理解。在次还要感谢我的指导老师 高老师的帮助。 五参考文献 1. AT89S52数据手册 2. DS1302数据手册 3. LM35数据手册 4. LM358 数据手册 5. ADC0804数据手册 6. FG12864E数据手册 28