4.用DS1302与12864LCD设计的可调式中文电子日历(2)
用DS1302与12864LCD设计的可调式中文电子日历
LCD_DB_PORT=0xFF; RW=1; _nop_(); DI=0; E=1; _nop_(); E=0;
return (bit)(P0&0x80); }
//--------------------------------------------------------------- // 向LCD写入一个字节(一般用于发送命令)
//-------------------------------------------------------------- void Write_Byte_To_LCD(uchar comand) {
while(LCD_IS_BUSY()); LCD_DB_PORT=0xFF; RW=0; _nop_(); DI=0;
LCD_DB_PORT=comand; E=1; _nop_(); E=0; }
//--------------------------------------------------------------- // 向LCD写入数据
//-------------------------------------------------------------- void Write_Data_To_LCD(uchar dat) {
while(LCD_IS_BUSY()); LCD_DB_PORT=0xFF; RW=0; _nop_(); DI=1;
if(!Reverse_Display) //根据Reverse_Display决定是否反相显示 LCD_DB_PORT=dat; else
LCD_DB_PORT=~dat; E=1; _nop_(); E=0; }
//--------------------------------------------------------------- // 初始化LCD
用DS1302与12864LCD设计的可调式中文电子日历
//-------------------------------------------------------------- void LCD12864_Initialization() {
CS1=1; CS2=1;
Write_Byte_To_LCD(0x38); Write_Byte_To_LCD(0x0F); Write_Byte_To_LCD(0x01); Write_Byte_To_LCD(0x06);
Write_Byte_To_LCD(LCD_START_ROW); }
//---------------------------------------------------------------
// 通用显示函数 从第P页第L列显示W个字节数据,具体显示的数据在r所指的数组中 //-------------------------------------------------------------- void LCD_Show(uchar P,uchar L,uchar W,uchar *r) reentrant {
uchar i; if(L<64) {
CS1=1; CS2=0;
Write_Byte_To_LCD(LCD_PAGE+P); Write_Byte_To_LCD(LCD_COL+L); if(L+W<64) {
for(i=0;i<W;i++)
Write_Data_To_LCD(r[i]); } else {
for(i=0;i<64-L;i++)
Write_Data_To_LCD(r[i]); CS1=0; CS2=1;
Write_Byte_To_LCD(LCD_PAGE+P); Write_Byte_To_LCD(LCD_COL); for(i=64-L;i<W;i++)
Write_Data_To_LCD(r[i]); } } else {
CS1=0; CS2=1;
用DS1302与12864LCD设计的可调式中文电子日历
Write_Byte_To_LCD(LCD_PAGE+P); Write_Byte_To_LCD(LCD_COL+L-64); for(i=0;i<W;i++)
Write_Data_To_LCD(r[i]); } }
//--------------------------------------------------------------- // 显示一个8×16点阵字符
//-------------------------------------------------------------- void Display_char(uchar P1,uchar L1,uchar *M) reentrant {
LCD_Show(P1,L1,8,M);
LCD_Show(P1+1,L1,8,M+8); }
//-------------------------------------------------------------------- // 显示一个16×16点阵字符 (汉字上半部分与下半部分分别处在相邻两页中) //---------------------------------------------------------------------- void Display_Word(uchar P2,uchar L2,uchar *M) reentrant { LCD_Show(P2,L2,16,M);
LCD_Show(P2+1,L2,16,M+16); }
2、 DS1302时钟程序 #include <reg51.h> #include <string.h> #include <intrins.h>
#define uchar unsigned char #define uint unsigned int
sbit SDA=P1^0; //DS1302数据线 sbit CLK=P1^1; //DS1302时钟线 sbit RST=P1^2; // DS1302 复位线
char Adjust_Index=-1; //当前调节的时间对象:秒,分,时,日,月,年(0,1,2,3,4,6) uchar MonthsDays[]={0,31,0,31,30,31,30,31,31,30,31,30,31}; // 一年中每个月的天数,二月的天数由年份决定
uchar DateTime[7];//所读取的日期时间 //函数声明
void Write_Byte_TO_DS1302(uchar X); // 向DS1302写入一个字节 uchar Read_Byte_FROM_DS1302(); //从DS1302中读取一个字节
uchar Read_Data_FROM_DS1302(uchar addr); //从DS1302指定位置读取数据 , 读数据
void Write_Data_TO_DS1302(uchar addr,uchar dat); // 向DS1302指定位置写入数据, 写数据 void SET_DS1302(); // 设置时间 void GetTime(); // 读取当前时间
uchar Is_Leapyear(uint year);// 判断是否为闰年
//*--------写字节函数,向DS1302写入一个字节--------*//
用DS1302与12864LCD设计的可调式中文电子日历
void Write_Byte_TO_DS1302(uchar X) // 向DS1302写入一个字节 {
uchar i;
for(i=0;i<8;i++) {
SDA=X&1; CLK=1; CLK=0; X>>=1; } }
//*--------读字节函数,从DS1302读取一个字节--------*//
uchar Read_Byte_FROM_DS1302() //从DS1302中读取一个字节 {
uchar i,byte,t; for(i=0;i<8;i++) {
byte>>=1; t=SDA;
byte|=t<<7; CLK=1; CLK=0; }
//BCD码转换
return byte/16*10+byte%16; }
//------------------------------------------------------------- //从DS1302指定位置读取数据 , 读数据
//---------------------------------------------------------------
uchar Read_Data_FROM_DS1302(uchar addr) //从DS1302指定位置读取数据 {
uchar dat; RST=0; CLK=0; RST=1;
Write_Byte_TO_DS1302(addr); //向DS1302写入一个地址
dat=Read_Byte_FROM_DS1302(); //在上面写入的地址中读取数据 CLK=1; RST=0;
return dat; }
//------------------------------------------------------------- //向DS1302指定位置写入数据, 写数据
//---------------------------------------------------------------
, 读数据
用DS1302与12864LCD设计的可调式中文电子日历
void Write_Data_TO_DS1302(uchar addr,uchar dat) // 向DS1302指定位置写入数据, 写数据 {
CLK=0; RST=1;
Write_Byte_TO_DS1302(addr); Write_Byte_TO_DS1302(dat); CLK=1; RST=0; }
//----------------------------------------------------------- // 设置时间
//--------------------------------------------------------- void SET_DS1302() // 设置时间 {
uchar i;
Write_Data_TO_DS1302(0x8E,0x00); //写控制字,取消写保护 // 分,时,日,月,年依次写入 for(i=1;i<7;i++) {
// 分的起始地址是10000010(0x82),后面依次是时,日,月,周,年,写入地址每次递增2 Write_Data_TO_DS1302(0x80+2*i,(DateTime[i]/10<<4)|(DateTime[i]%10)); }
相关推荐:
- [求职职场]加法运算定律的运用练习题
- [求职职场]大型石油化工工业过程节能新技术
- [求职职场]2015-2020年中国箱纸板行业分析与投资
- [求职职场]NADEX-IWC5A点焊机故障代码
- [求职职场]英语阅读 非常有用
- [求职职场]鲁卫疾控发〔2012〕2号(联合,印发山东
- [求职职场]2014年莆田公务员行测技巧:数字推理的
- [求职职场]基于最近发展区理论的高中数学课堂有效
- [求职职场]与贸易有关的知识产权协议
- [求职职场]【王风范】微演说·职场演说三
- [求职职场]新时代国珍健康大课堂
- [求职职场]群论期末考试复习题
- [求职职场]施工现场消防安全专项施工方案(范本)-
- [求职职场]初中物理光学知识点归纳完美版
- [求职职场]毕业设计总结与体会范文
- [求职职场]江南大学2018年上半年展示设计第1阶段
- [求职职场]景尚乡民兵参战支前保障方案
- [求职职场]【优质】2019年工会职工之家建设工作总
- [求职职场]数据库技术与应用—SQL Server 2008(第
- [求职职场]汽车变速箱构造与工作原理
- 首钢工业区工业遗产资源保护与再利用研
- 第4课 《大学》节选
- 2016程序文件——检验检测结果发布程序
- 2011年高考试题文言文阅读全解释__2011
- 化学是一门基础的自然科学
- 海外做市商制度的借鉴意义
- 外国建筑史复习资料(
- 七年级下思想品德期末综合测试(二)
- 思政课部2013年上学期教学工作总结
- 电大国际公法任务3 0004
- 《圆的认识》教学设计
- 中国轨道交通牵引变流器行业市场发展调
- 中泰证券#定期报告:坚守时代硬科技和
- 浅论企业财务管理与企业经营投资风险的
- 大功率半导体激光器光纤耦合技术调研报
- 中国传统家具的现状与发展探讨
- Broadcom数字电视芯片助海尔扩展高清电
- 新HSK4词汇练习 超全(五)
- 2013届高考数学单元考点复习12
- 雨霖铃精品课件




