基于51单片机的电子计算器(DOC) - 图文(3)

2019-09-02 17:32

12

**首届电子创意设计竞赛

/******************************************************************** * 名称 : delay()

* 功能 : 延时,延时时间大概为5US。

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

void delay() { }

void Delay(uint i) {

uint x,j; for(j=0;j

}

void delay1(uchar z) {

uchar x,y; for(x=z;x>0;x--) for(y=110;y>0;y--); }

/******************************************************************** * 名称 : bit Busy(void)

* 功能 : 这个是一个读状态函数,读出函数是否处在忙状态

*********************************************************************

//用于普通延时

13

**首届电子创意设计竞赛

**/

bit Busy(void) { }

/******************************************************************** * 名称 : wcmd(uchar del) * 功能 : 1602命令函数

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

void wcmd(uchar del) {

while(Busy()); lcdrs = 0; lcdrw = 0; lcden = 0; delay(); P0 = del; delay(); lcden = 1; delay(); lcden = 0;

bit busy_flag = 0; lcdrs = 0; lcdrw = 1; lcden = 1; delay();

busy_flag = (bit)(P0 & 0x80); lcden = 0; return busy_flag;

14

**首届电子创意设计竞赛

}

/******************************************************************** * 名称 : wdata(uchar del) * 功能 : 1602写数据函数

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

void wdata(uchar del) {

while(Busy()); lcdrs = 1; lcdrw = 0; lcden = 0; delay(); P0 = del;

delay(); }

/******************************************************************** * 名称 : L1602_init()

* 功能 : 1602初始化,请参考1602的资料

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

void L1602_init(void) {

wcmd(0x38); Delay(5); wcmd(0x38); lcden = 1; delay(); lcden = 0;

15

**首届电子创意设计竞赛

}

Delay(5); wcmd(0x38); Delay(5); wcmd(0x38); wcmd(0x0d);

/*蜂鸣器发声函数*/ void voice() { sound=1; delay1(2000); sound=0; }

/* LCD写命令函数 */ void write_com(uchar com) {

lcdrs=0; P0=com; delay1(5); lcden=1; delay1(4); lcden=0; }

/*写数据函数*/

void write_data(uchar date) {

lcdrs=1; P0=date; delay1(5);

//写数据控制端高电平

//给个高脉冲结束

//写指令控制端为低

16

**首届电子创意设计竞赛

lcden=1; delay1(5); lcden=0; }

//给个高脉冲结束

/*键盘扫描函数 */ void keyscan() {

uchar temp,xy=0xf7; //xy变量存储第几行 uint i;

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

xy=_crol_(xy,1); P1=xy; temp=P1; temp=temp&0x0f; if(temp!=0x0f) { delay1(10); temp=P1;

temp=temp&0x0f; if(temp!=0x0f) { temp=P1; voice(); switch(temp) {

case 0xee: key=7; break; case 0xde: key=8; break; case 0xbe: key=9; break; case 0x7e: key=10; break; case 0xed: key=4; break;

//按键定位

//去抖

//_crol_为左移函数

//行移动


基于51单片机的电子计算器(DOC) - 图文(3).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:2017会计继续教育试题及答案(一)

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

马上注册会员

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