LCD1602简单时钟程序.doc

  1. 1、本文档共7页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多

//按4X4键盘的F键进入设定状态

//ED键是前后移动键

//C按键是调整数值按键

#includereg52.h

#defineucharunsignedchar

sbitRS=P1^0;

sbitRW=P1^1;

sbitE=P1^2;

bitat=0;

ucharcodeshen[]={CLOCK!};

ucharcodeword[]={0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3a,0x20};

uchardispbuf[8],h,m,s,counter;

voiddelay()

{

uchari;

for(i=0;i255;i++);

}

/*******写命令**********/

voidlcd_wmc(uchari)

{

P0=i;

RS=0;

RW=0;

E=0;

delay();

E=1;

}

/*******写数据***********/

voidlcd_wmd(uchari)

{

P0=i;

RS=1;

RW=0;

E=0;

delay();

E=1;

}

/*******初始化液晶*******/

voidlcd_init()

{

uchari;

lcd_wmc(0x01);

lcd_wmc(0x38);

lcd_wmc(0x0c);

lcd_wmc(0x06);

lcd_wmc(0xc9);

for(i=0;i6;i++)

lcd_wmd(shen[i]);

lcd_wmc(0xc0);

}

/*******更新缓冲区子程序*******/

voidnewbuf()

{

dispbuf[0]=s%10;

dispbuf[1]=s/10;

dispbuf[3]=m%10;

dispbuf[4]=m/10;

dispbuf[6]=h%10;

dispbuf[7]=h/10;

}

/*******显示子程序**********/

voiddisp(uchardispadd)

{

uchartmp;

lcd_wmc(dispadd);

tmp=dispbuf[7];

tmp=word[tmp];

lcd_wmd(tmp);

tmp=dispbuf[6];

tmp=word[tmp];

lcd_wmd(tmp);

tmp=dispbuf[5];

tmp=word[tmp];

lcd_wmd(tmp);

tmp=dispbuf[4];

tmp=word[tmp];

lcd_wmd(tmp);

tmp=dispbuf[3];

tmp=word[tmp];

lcd_wmd(tmp);

tmp=dispbuf[2];

tmp=word[tmp];

lcd_wmd(tmp);

tmp=dispbuf[1];

tmp=word[tmp];

lcd_wmd(tmp);

tmp=dispbuf[0];

tmp=word[tmp];

lcd_wmd(tmp);

}

/*********************键盘子程序***********************/

ucharkeypro(void)

{

ucharscanl,scanh;

P2=0x0f;//先将所有行线拉低

if((P20x0f)!=0x0f)//如果列线有变化

{

delay();//延迟一段时间。

if((P20x0f)!=0x0f)//如果此时此刻列线还有变化,说明确实有按键按下

{

scanl=0xfe;

while((scanl0x10)!=0)

{

P2=scanl;//给P1口赋扫描码,每次只拉低一行

if((P20xf0)!=0xf0)//如果判断为真,则说明找到了按键按下的行

{

scanh=(P20xf0)|0x0f;//计算识别码

return(~scanh)+(~scanl);

}

elsescanl=(scanl1)|0x01;//否则依次将第二,第三,第四行拉低

}

}

}

return0;//没有按键按下返回0

}

/********************时间调整子程

文档评论(0)

183****9213 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档