教学文库网 - 权威文档分享云平台
您的当前位置:首页 > 文库大全 > 求职职场 >

4.用DS1302与12864LCD设计的可调式中文电子日历(2)

来源:网络收集 时间:2026-09-30
导读: 用DS1302与12864LCD设计的可调式中文电子日历 LCD_DB_PORT=0xFF; RW=1; _nop_(); DI=0; E=1; _nop_(); E=0; return (bit)(P00x80); } //--------------------------------------------------------------- // 向LCD

用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)); }

Write_ …… 此处隐藏:4510字,全部文档内容请下载后查看。喜欢就下载吧 ……

4.用DS1302与12864LCD设计的可调式中文电子日历(2).doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印
本文链接:https://www.jiaowen.net/wenku/122591.html(转载请注明文章来源)
Copyright © 2020-2025 教文网 版权所有
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ:78024566 邮箱:78024566@qq.com
苏ICP备19068818号-2
Top
× 游客快捷下载通道(下载后可以自由复制和排版)
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150份
全站内容免费自由复制
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150份
全站内容免费自由复制
注:下载文档有可能出现无法下载或内容有问题,请联系客服协助您处理。
× 常见问题(客服时间:周一到周五 9:30-18:00)