教学文库网 - 权威文档分享云平台
您的当前位置:首页 > 范文大全 > 公文资料 >

12864串行程序,时钟,后续反白

来源:网络收集 时间:2026-09-05
导读: 液晶12864+DS1302+反白代码 12864串行程序,时钟,后续反白 #include reg52.h #include intrins.h #define uchar unsigned char #define uint unsigned int //宏定义 #define CLEAR_SCREEN 0x01 //清屏指令:清屏且AC值为00H #define AC_INIT 0x02 //将AC设

液晶12864+DS1302+反白代码

12864串行程序,时钟,后续反白

#include <reg52.h>

#include <intrins.h>

#define uchar unsigned char

#define uint unsigned int //宏定义

#define CLEAR_SCREEN 0x01 //清屏指令:清屏且AC值为00H

#define AC_INIT 0x02 //将AC设置为00H。且游标移到原点位置

#define CURSE_ADD 0x06 //设定游标移到方向及图像整体移动方向(默认游标右移,图像整体不动)

#define FUN_MODE 0x30 //工作模式:8位基本指令集

#define DISPLAY_ON 0x0c //显示开,显示游标,且游标位置反白

#define DISPLAY_OFF 0x08 //显示关

#define CURSE_DIR 0x14 //游标向右移动:AC=AC+1

#define SET_CG_AC 0x40 //设置AC,范围为:00H~3FH

#define SET_DD_AC 0x80

#define WRITE_SECOND 0x80

#define WRITE_MINUTE 0x82

#define WRITE_HOUR 0x84

#define READ_second 0x81

#define READ_minute 0x83

#define READ_hour 0x85

#define WRITE_PROTECT 0x8E

sbit CLK=P3^5;

sbit DI =P3^4;

sbit CS1=P3^3;

sbit CS = P2^0; //片选信号

sbit SID = P2^1; //串行数据

sbit SCLK = P2^2; //串行同步时钟

sbit ACC_7 = ACC^7; //位寻址寄存器定义

sbit SCLK_1302 = P2^7; // DS1302时钟信号

sbit DIO = P2^6; // DS1302数据信号

sbit CE = P2^5; // DS1302片选

sbit led0=P0^4;

sbit led1=P0^5;

sbit switch0=P2^4;

sbit switch1=P0^6;

液晶12864+DS1302+反白代码

sbit LCD_led =P2^3;

sbit key =P0^7;

uint second, minute,hour; //全局变量定义

uchar dat_ad0,kk,jj;

float dat_ad;

uchar code addr_tab[]={

0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,//第一行汉字位置

0x90,0x91,0x92,0x93,0x94,0x95,0x96,0x97,//第二行汉字位置

0x88,0x89,0x8a,0x8b,0x8c,0x8d,0x8e,0x8f,//第三行汉字位置

0x98,0x99,0x9a,0x9b,0x9c,0x9d,0x9e,0x9f,//第四行汉字位置

};

uchar code numtab[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F}; uchar code numtab1[]={0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09, 0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19, 0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29, 0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39, 0x40,0x41,0x42,0x43,0x44,0x45,0x46,0x47,0x48,0x49, 0x50,0x51,0x52,0x53,0x54,0x55,0x56,0x57,0x58,0x59 }; //1-60数据

void delayms(uint t) //约延时n(ms)

{

uint i;

while(t--)

{

for(i=0;i<125;i++);

}

}

void Write1302 (uchar addr,dat )

{

unsigned char i,temp;

CE=0; //CE引脚为低,数据传送中止

SCLK_1302=0; //清零时钟总线

CE = 1; //CE引脚为高,逻辑控制有效

//发送地址

for ( i=8;i>0; i--) //循环8次移位

{

SCLK_1302 = 0;

temp = addr;

DIO = (bit)(temp&0x01); //每次传输低字节

addr >>= 1; //右移一位

SCLK_1302 = 1;

液晶12864+DS1302+反白代码

}

//发送数据

for (i=8; i>0;i--)

{

SCLK_1302 = 0;

temp = dat;

DIO = (bit)(temp&0x01);

dat >>= 1;

SCLK_1302 = 1;

}

CE = 0;

}

/******************************************************************* * 函数名称: Read1302

* 函数功能: 读时钟数据

* 调用函数:

* 使用说明:

*******************************************************************/ uchar Read1302 (unsigned char addr )

{

unsigned char i,temp,dat2,dat1;

CE=0;

SCLK_1302=0;

CE = 1;

//发送地址

for ( i=8; i>0; i-- ) //循环8次移位

{

SCLK_1302 = 0;

temp = addr;

DIO = (bit)(temp&0x01); //每次传输低字节

addr >>= 1; //右移一位

SCLK_1302 = 1;

}

//读取数据

for ( i=8; i>0; i-- )

{

ACC_7=DIO;

SCLK_1302 = 1;

ACC>>=1;

SCLK_1302= 0;

}

CE=0;

dat1=ACC;

dat2=dat1/16; //数据进制转换

液晶12864+DS1302+反白代码

dat1=dat1%16; //十六进制转十进制

dat1=dat1+dat2*10;

return dat1;

}

void SendByte(uchar Dbyte)

{

uchar i;

for(i=0;i<8;i++)

{

SCLK = 0;

Dbyte=Dbyte<<1; //左移一位

SID = CY; //移出的位给SID

SCLK = 1;

SCLK = 0;

}

}

uchar ReceiveByte(void)

{

uchar i,temp1,temp2;

temp1 = 0;

temp2 = 0;

for(i=0;i<8;i++)

{

temp1=temp1<<1;

SCLK = 0;

SCLK = 1;

SCLK = 0;

if(SID) temp1++;

}

for(i=0;i<8;i++)

{

temp2=temp2<<1;

SCLK = 0;

SCLK = 1;

SCLK = 0;

if(SID) temp2++;

}

return ((0xf0&temp1)+(0x0f&temp2));

}

液晶12864+DS1302+反白代码

void CheckBusy( void )

{

do SendByte(0xfc); //11111,RW(1),RS(0),0

while(0x80&ReceiveByte()); //BF(.7)=1 Busy

}

void Lcd_WriteCmd(uchar Cbyte )

{

CS = 1;

CheckBusy();

SendByte(0xf8); //11111,RW(0),RS(0),0

SendByte(0xf0&Cbyte); //高四位

SendByte(0xf0&Cbyte<<4); //低四位(先执行<<)

CS = 0;

}

void Lcd_WriteData(uchar Dbyte )

{

CS = 1;

CheckBusy();

SendByte(0xfa); //11111,RW(0),RS(1),0

SendByte(0xf0&Dbyte); //高四位

SendByte(0xf0&Dbyte<<4); //低四位(先执行<<)

CS = 0;

}

void Lcd_Init(void)

{

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

12864串行程序,时钟,后续反白.doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印
本文链接:https://www.jiaowen.net/fanwen/710489.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)