菜鸟上路,自己制作的ds1302时钟日历
时间:10-02
整理:3721RD
点击:
以下为部分代码。
- #include <reg52.h>
- [code]#include <reg52.h>
- #include <intrins.h>
- #include "ds1302.h"
- unsigned char code dis[]="20 - - ";
- unsigned char code dis1[]=" : : ";
- unsigned char nian,yue,ri,zhou,shi,fen,miao,key_fun_count;
- struct timer
- {
- unsigned char nian;
- unsigned char yue;
- unsigned char ri;
- unsigned char zhou;
- unsigned char shi;
- unsigned char fen;
- unsigned char miao;
- };
- struct timer temp;
- sbit key_fun=P1^0; //按键定义
- sbit key_jia=P1^1;
- sbit key_jian=P1^2;
- sbit key_yes=P1^3;
- sbit Sled_en=P3^6; //数码管使能端
- sbit LCD_RW=P1^6; //1602液晶引脚设置
- sbit LCD_RS=P1^7;
- sbit LCD_EN=P2^4;
- void delay(unsigned int z) //延时子函数
- {
- unsigned int x,y;
- for(x=z;x>0;x--)
- for(y=125;y>0;y--);
- }
- void write_com(unsigned char com) //写命令
- {
- LCD_RS=0;
- LCD_RW=0;
- LCD_EN=0;
- P0=com;
- delay(5);
- LCD_EN=1;
- delay(5);
- LCD_EN=0;
- }
- void write_dat_pos(unsigned char x,unsigned char y,unsigned char dat) //直接写在显示屏的写数据函数
- { //x为显示第几行{0或1},y为显示第几个{0到15}。dat为数据
- if(x==0)
- x=0x80+y;
- else if(x==1)
- x=0x80+0x40+y;
- write_com(x);
- LCD_RW=0;
- LCD_RS=1;
- LCD_EN=0;
- delay(5);
- P0=dat;
- delay(5);
- LCD_EN=1;
- delay(5);
- LCD_EN=0;
- }
- void write_sfm(unsigned char pos,unsigned char dat) //显示屏上写入时分秒
- {
- unsigned char shi_wei,ge_wei;
- shi_wei=dat/10;
- ge_wei=dat%10;
- write_dat_pos(1,pos,shi_wei+'0');
- write_dat_pos(1,pos+1,ge_wei+'0');
- }
- void write_week(unsigned char dat) //显示屏上写入星期
- {
- unsigned char uc_step;
- uc_step=dat;
- switch(uc_step)
- {
- case 1 :
- write_dat_pos(0,12,'M');
- write_dat_pos(0,13,'o');
- write_dat_pos(0,14,'n');
- break;
- case 2 :
- write_dat_pos(0,12,'T');
- write_dat_pos(0,13,'u');
- write_dat_pos(0,14,'e');
- break;
- case 3 :
- write_dat_pos(0,12,'W');
- write_dat_pos(0,13,'e');
- write_dat_pos(0,14,'n');
- break;
- case 4 :
- write_dat_pos(0,12,'T');
- write_dat_pos(0,13,'h');
- write_dat_pos(0,14,'u');
- break;
- case 5 :
- write_dat_pos(0,12,'F');
- write_dat_pos(0,13,'r');
- write_dat_pos(0,14,'i');
- break;
- case 6 :
- write_dat_pos(0,12,'S');
- write_dat_pos(0,13,'a');
- write_dat_pos(0,14,'t');
- break;
- case 7 :
- write_dat_pos(0,12,'S');
- write_dat_pos(0,13,'u');
- write_dat_pos(0,14,'n');
- break;
- default : break;
- }
- }
- void write_nyr(unsigned char pos,unsigned char dat) //显示屏上写入年月日
- {
- unsigned char shi_wei,ge_wei;
- shi_wei=dat/10;
- ge_wei=dat%10;
- write_dat_pos(0,pos,shi_wei+'0');
- write_dat_pos(0,pos+1,ge_wei+'0');
- }
- unsigned char bcd_to_shijinzhi(unsigned char bcd) //BCD码转换为十进制数
- {
- return (bcd/16)*10+bcd%16;
- }
- void struct_bcd_shijinzhi() //结构体的BCD码转换为十进制数
- {
- miao=bcd_to_shijinzhi(CurrentTime.Second);
- fen=bcd_to_shijinzhi(CurrentTime.Minute);
- shi=bcd_to_shijinzhi(CurrentTime.Hour);
- ri=bcd_to_shijinzhi(CurrentTime.Day);
- yue=bcd_to_shijinzhi(CurrentTime.Month);
- zhou=bcd_to_shijinzhi(CurrentTime.Week);
- nian=bcd_to_shijinzhi(CurrentTime.Year);
- }
真的非常非常不错啊!
真的非常非常不错啊!
真的非常非常不错啊!
