电子万年历 - 图文(5)

2019-04-16 18:19

if (key1 == 3) //如果选择日 { ri=((now[3]>>4)&0x0F)*10 + (now[3]&0x0F); ri--; if (ri == 0) { ri = 31; } now[3]=((ri/10)<<4)|(ri); DS1302_WriteData(0x8e, 0x00); //允许写操作 DS1302_WriteData(0x86, now[3]); DS1302_WriteData(0x8e, 0x80); //写保护 }

if (key1 == 4) //如果选择星期 { zhou=((now[5]>>4)&0x0F)*10 + (now[5]&0x0F); zhou--; if (zhou == 0) { zhou = 7; } switch(zhou) { case 1: now[5]=0x01;break; case 2: now[5]=0x02;break; case 3: now[5]=0x03;break; case 4: now[5]=0x04;break; case 5: now[5]=0x05;break; case 6: now[5]=0x06;break; case 7: now[5]=0x07;break; } DS1302_WriteData(0x8e, 0x00); //允许写操作 DS1302_WriteData(0x8a, now[5]); DS1302_WriteData(0x8e, 0x80); //写保护 }

if (key1 == 5) //如果选择小时 { xiaoshi=((now[2]>>4)&0x0F)*10 + (now[2]&0x0F); xiaoshi--; if (xiaoshi == -1) { xiaoshi = 23; } if(xiaoshi >= 24) { xiaoshi=0; } now[2]=((xiaoshi/10)<<4)|(xiaoshi); DS1302_WriteData(0x8e, 0x00); //允许写操作 DS1302_WriteData(0x84, now[2]); DS1302_WriteData(0x8e, 0x80); //写保护 }

if (key1 == 6) //如果选择分钟 { fenzhong=((now[1]>>4)&0x0F)*10 + (now[1]&0x0F); fenzhong--; if (fenzhong == -1)

{ fenzhong = 59; } if(fenzhong == 60) { fenzhong =0; } now[1]=((fenzhong/10)<<4)|(fenzhong); DS1302_WriteData(0x8e, 0x00); //允许写操作 DS1302_WriteData(0x82, now[1]); DS1302_WriteData(0x8e, 0x80); //写保护 } if (key1 == 7) //如果选择秒 { miao=((now[0]>>4)&0x0F)*10 + (now[0]&0x0F); miao--; if (miao == -1) { miao = 59; } if (miao == 60) { miao = 0; } now[0]=((miao/10)<<4)|(miao); DS1302_WriteData(0x8e, 0x00); //允许写操作 DS1302_WriteData(0x80, now[0]); DS1302_WriteData(0x8e, 0x80); //写保护 } } //end if } //end if(k3) if(!k4) //确定键按下,返回显示温度 { delayK(20); if(!k4) { key1 = 0; } } }

/********************************************************* * * * 主函数 * * * *********************************************************/ void main() { DS1302_Initial(); //初始化DS1302 DS1302_SetTime(init); //设置初始时间 lcd_init(); //初始化LCD mark_lcd1(); //显示提示信息 delay(2000); lcdflag(); //闪烁提示信息 clr_screen(); mark_lcd(); //显示标志信息 delay(1);

while(1) { DS1302_GetTime(now); //读取当前时间 display_second(now[0]); //显示秒 display_minute(now[1]); //显示分 display_hour(now[2]); //显示时 display_year(now[6]); //显示年 display_month(now[4]); //显示月 display_day(now[3]); //显示日 display_week(now[5]); //显示周 key(); /****温度显示管理*****/ DS18B20(); //读取当前温度 if(key1!=1&&key1!=2&&key1!=3&&key1!=4&&key1!=5&&key1!=6&&key1!=7) //当按下功能选择键时,关闭温度显示 { lcd_pos(4,1); //设置显示位置为第四行 lcd_wdat(DIS4[0]); //显示“温度” lcd_wdat(DIS4[1]); lcd_wdat(DIS4[2]); lcd_wdat(DIS4[3]); lcd_wdat(DIS3[0]); //显示“:” lcd_wdat(DIS3[3]); //显示“:” lcd_pos(4,6); lcd_wdat(DIS4[4]); //显示“C\ display_temper(temp); //显示当前温度 } else { lcd_pos(4,6); lcd_wdat(DIS3[3]); } } }

/*********************************************************/

2. 12864液晶显示子程序

/*************************************************************************** * 文件名:12864液晶显示程序 * * 说明:数据端口p0,控制端口p2 * ***************************************************************************/ #include #include

#define uchar unsigned char #define uint unsigned int

/************* 12864LCD引脚定义 *************/ #define LCD_data P0 //数据口

sbit LCD_RS = P2^7; //寄存器选择输入 sbit LCD_RW = P2^6; //液晶读/写控制 sbit LCD_EN = P2^5; //液晶使能控制 sbit LCD_PSB = P2^4; //串/并方式控制 sbit LCD_RST = P2^3; //液晶复位端口

/****************显示信息定义**********************/ uchar code DIS1[] = {\年月日三\

uchar code DIS2[] = {\星期%uchar code DIS3[] = {%uchar code DIS4[] = {\温度C\

uchar code DIS5[] = {\

uchar code DIS6[] = {0xD2,0xBB,0xB6,0xFE,0xC8,0xFD,0xCB,0xC4,0xCE,0xE5,0xC1,0xF9,0xC8,0xD5}; //////// 一 , 二 , 三 , 四 , 五 , 六 , 日 uchar code DIS7[] = {0xC9,0xE8,0xD6,0xC3,0xC4,0xEA,0xD4,0xC2,0xD6,0xDC,0xC8,0xD5,0xCA,0xB1,0xB7,0xD6,0xC3,0xEB};

// 设 置 年 月 周 日 时 分 秒

uchar code tempM1[]={\ 云南师范大学 %uchar code tempM2[]={\ 物电学院 %uchar code tempM3[]={\ 10应电班 %uchar code tempM4[]={\ 李希才制作 \

/*******************************************************************/ /* 函数名称:延时函数 */ /* 函数功能:延时ms个ms(用于1T单片机) */ /* */ /*******************************************************************/ void delay(uint ms) { uchar n,i,j; while(--ms!=0) { for(n=1;n>0;n--) for(j=222;j>0;j--) for(i=12;i>0;i--) ; } }

/*******************************************************************/ /* 函数名称:延时函数 */ /* 函数功能:延时us个us(用于1T单片机) /* */ /*******************************************************************/ void delay_us(uint us) { while(us--) { _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); } }

void delayNOP() { _nop_();_nop_(); _nop_();_nop_(); _nop_();_nop_(); _nop_();_nop_(); _nop_();_nop_(); _nop_();_nop_(); _nop_();_nop_(); _nop_();_nop_(); _nop_();_nop_(); _nop_();_nop_(); _nop_();_nop_(); _nop_();_nop_();

*/

_nop_();_nop_(); _nop_();_nop_(); _nop_();_nop_(); _nop_();_nop_(); _nop_();_nop_(); _nop_();_nop_(); _nop_();_nop_(); _nop_();_nop_(); _nop_();_nop_(); _nop_();_nop_(); _nop_();_nop_(); _nop_();_nop_(); }

/*******************************************************************/ /* */ /*检查LCD忙状态 */ /*lcd_busy为1时,忙,等待。lcd-busy为0时,闲,可写指令与数据。 */ /* */ /*******************************************************************/ bit lcd_busy()

{ bit result; LCD_RS = 0; LCD_RW = 1; LCD_EN = 1; delayNOP();

result = (bit)(P0&0x80); LCD_EN = 0; LCD_RS = 1; return(result); }

/*******************************************************************/ /* */ /*写指令数据到LCD */ /*RS=L,RW=L,E=高脉冲,D0-D7=指令码。 */ /* */ /*******************************************************************/ void lcd_wcmd(uchar cmd)

{ while(lcd_busy()); LCD_RS = 0; LCD_RW = 0; LCD_EN = 0; LCD_EN = 1; delay_us(10); P0 = cmd; delayNOP(); LCD_EN = 0; delayNOP(); LCD_RS = 1; }

/*******************************************************************/ /* */ /*写显示数据到LCD */ /*RS=H,RW=L,E=高脉冲,D0-D7=数据。 */ /* */ /*******************************************************************/ void lcd_wdat(uchar dat)

{ delayNOP();

while(lcd_busy()); LCD_RS = 1;


电子万年历 - 图文(5).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:教育心理学每章复习题

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: