基于PCF8563的单片机数字时钟(2)

2019-03-15 12:15

EN=1; /*EN下降沿*/ _nop_(); _nop_(); EN=0; }

/*设置页 0xb8是页的首地址*/ void SetLine(uchar page) {

page=0xb8|page; /*1011 1xxx 0<=page<=7 设定页地址--X 0-7,8行为一页64/8=8,共8页*/ SendCommandToLCD(page); }

/*设定显示开始行,0xc0是行的首地址*/ void SetStartLine(uchar startline) { startline=0xc0|startline; /*1100 0000*/

SendCommandToLCD(startline); /*设置从哪行开始:0--63,一般从0 行开始显示*/ }

/*设定列地址--Y 0-63 ,0x40是列的首地址*/ void SetColumn(uchar column) {

column=column &0x3f; /*column最大值为64,越出 0=

/*开关显示,0x3f是开显示,0x3e是关显示*/ void SetOnOff(uchar onoff) {

onoff=0x3e|onoff; /*0011 111x,onoff只能为0或者1*/ SendCommandToLCD(onoff); }

/*写显示数据 */

void WriteByte(uchar dat) {

CheckState();/*状态检查,LCD是否忙*/

RS=1; /*RS=0写指令,RS=1写数据*/

RW=0; /*R/W=“L” ,E=“H→L”数据被写到 IR 或 DR */ if(!Reverse_Display) /*根据Reverse_Display决定是否反相显示*/ Databus=dat; /*dat:显示数据*/ else

Databus=~dat;

EN=1; /*EN下降沿*/ _nop_(); _nop_(); EN=0; }

/*选择屏幕screen: 0-全屏,1-左屏,2-右屏*/ void SelectScreen(uchar screen) { switch(screen) {

case 0: cs1=0;/*全屏*/

_nop_(); _nop_(); _nop_(); cs2=0;

_nop_(); _nop_(); _nop_(); break;

case 1: cs1=0;/*左屏*/

_nop_(); _nop_(); _nop_(); cs2=1;

_nop_(); _nop_(); _nop_(); break;

case 2: cs1=1;/*右屏*/

_nop_(); _nop_(); _nop_(); cs2=0;

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

/*清屏screen: 0-全屏,1-左屏,2-右*/ void ClearScreen(uchar screen) { uchar i,j; SelectScreen(screen); for(i=0;i<8;i++) /*控制页数0-7,共8页*/ { SetLine(i); SetColumn(0); for(j=0;j<64;j++) /*控制列数0-63,共64列*/ { WriteByte(0x00); /*写点内容,列地址自动加1*/ } } }

/*初始化LCD*/ void InitLCD() {

CheckState(); SelectScreen(0);

SetOnOff(0); /*关显示*/ SelectScreen(0);

SetOnOff(1); /*开显示*/ SelectScreen(0);

ClearScreen(0); /*清屏*/ SetStartLine(0);/*开始行:0*/ }

/*--------------------------显示全角汉字-----------------------*/

/*ss选屏参数,pagr选页参数,column选列参数,number选第几汉字输出*/

/*ss=1右屏2左屏,pagr=0,2,4,6第0~3行,column=0~3汉子出现的列,number选第几汉字输出*/

void Display(uchar ss,uchar page,uchar column,uchar number) {

uchar i;

SelectScreen(ss);

column=column&0x3f;

SetLine(page); /*写上半页*/ SetColumn(column); /*控制列*/

for(i=0;i<16;i++) /*控制16列的数据输出*/ {

WriteByte(Hzk[i+32*number]);/*i+32*number汉字的前16个数据输出*/ }

SetLine(page+1); /*写下半页*/ SetColumn(column); /*控制列*/

for(i=0;i<16;i++) /*控制16列的数据输出*/ {

WriteByte(Hzk[i+32*number+16]);/*i+32*number+16汉字的后16个数据输出*/ } }

/*---------------------显示半角汉字和数字和字母----------------------*/

/*选屏参数,pagr选页参数,column选列参数,number选第几汉字输出*/ void Displayen(uchar ss,uchar page,uchar column,uchar number) {

uchar i;

SelectScreen(ss);

column=column&0x3f;

SetLine(page); /*写上半页*/ SetColumn(column);

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

WriteByte(Ezk[i+16*number]); }

SetLine(page+1); /*写下半页*/ SetColumn(column); for(i=0;i<8;i++) {

WriteByte(Ezk[i+16*number+8]); } }

/******************************************** 内部函数,延时1

********************************************/ void Delay() {

// {P10=1;_nop_();P10=0;} _nop_();

_nop_(); /*根据晶振频率制定延时时间*/ }

/******************************************** 内部函数,I2C开始

********************************************/ void P8563_Start() { EA=0; SDA=1; SCL=1; Delay(); SDA=0; Delay(); SCL=0; }

/******************************************** 内部函数,I2C结束

********************************************/ void P8563_Stop() {

SDA=0; SCL=0; Delay(); SCL=1; Delay(); SDA=1; Delay();

EA=1; }

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

内部函数,输出ACK ,每个字节传输完成,输出ack=0,结束读书据,ack=1; ********************************************/ void P8563_WriteACK(uchar ack) {

SDA=ack; Delay(); SCL=1; Delay(); SCL=0; }

/******************************************** 内部函数,等待ACK

********************************************/ void P8563_WaitACK() { uchar errtime=20; SDA=1;

Delay(); /*读ACK*/ SCL=1; Delay(); while(SDA) { errtime--;

if(!errtime) P8563_Stop(); }

SCL=0; Delay(); }

/******************************************** 内部函数.输出数据字节 入口:B=数据

********************************************/ void P8563_writebyte(uchar wdata) {

uchar i;

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

if(wdata&0x80) SDA=1; else SDA=0; wdata<<=1; SCL=1; Delay(); SCL=0;


基于PCF8563的单片机数字时钟(2).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:中国古代34位美女 - 图文

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

马上注册会员

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