C51单片机实现液晶秒表以及简单计算器C51单片机制作.docx

上传人:b****6 文档编号:6668193 上传时间:2023-01-08 格式:DOCX 页数:13 大小:17KB
下载 相关 举报
C51单片机实现液晶秒表以及简单计算器C51单片机制作.docx_第1页
第1页 / 共13页
C51单片机实现液晶秒表以及简单计算器C51单片机制作.docx_第2页
第2页 / 共13页
C51单片机实现液晶秒表以及简单计算器C51单片机制作.docx_第3页
第3页 / 共13页
C51单片机实现液晶秒表以及简单计算器C51单片机制作.docx_第4页
第4页 / 共13页
C51单片机实现液晶秒表以及简单计算器C51单片机制作.docx_第5页
第5页 / 共13页
点击查看更多>>
下载资源
资源描述

C51单片机实现液晶秒表以及简单计算器C51单片机制作.docx

《C51单片机实现液晶秒表以及简单计算器C51单片机制作.docx》由会员分享,可在线阅读,更多相关《C51单片机实现液晶秒表以及简单计算器C51单片机制作.docx(13页珍藏版)》请在冰豆网上搜索。

C51单片机实现液晶秒表以及简单计算器C51单片机制作.docx

C51单片机实现液晶秒表以及简单计算器C51单片机制作

[转]C51单片机实现液晶秒表以及简单计算器-----C51单片机制作2011.3.15阅读(0)下一篇:

51单片机C语言编...|返回日志列表赞赞赞赞转载(22)分享评论复制地址编辑

电路图比较简单,是一个51最小系统,没有采用总线方式,而简单的连线方式,上有4*4矩阵键盘,一数码管,89S51单片机,串口下载线,数码管显示锁存芯片\蜂鸣器\1602液晶.

因为最近考试太多,刚刚考试完又课程设计,桌子上太混乱,原理图没有找到.所以就先贴上代码.

此代码已经调试成功过,可以实现时间的调整.4*4矩阵键盘,第一排前三列是实现小时\分钟\秒的加.第二排前三列是实现小时\分钟\秒的减.当然还可以通过设置矩阵键盘的键值,来实现加\减\乘\除四则运算,由数码管显示参与运算的数字以及最终的运算结果.其他的不多说了,等下次我把图贴上,大家勉强可以拿去研究下.其实硬件很简单,不详细说问题也不大的.

#include

#include

#include

#include

#include

#defineucharunsignedchar

#defineuintunsignedint

uchartemp1;

voiddisplayListChar(unsignedcharX,unsignedcharY,ucharDData);

uchardispbuf[]={'0','1','2','3','4','5','6','7','8','9',':

'};

ucharsecond;

ucharminute;

ucharhour;

uinttcnt,g;

ucharflag;

voiddlms(void);

ucharkbscan(void);

voidShow_Time(void);

voiddelay5ms(void);

voiddlms(void);

voidSettime(ucharverify);//verify在这里为调整的意思

voiddelay400ms(void);

///#definebusy0x80file:

//用/于检测LCD状态字中的Busy标识

///#defineRSaddr0x1000

///#defineRWaddr0x2000

///#defineCSaddr0x0400

#definewc0x8fff

#definewd0xdfff

#definerc0xbfff

voidwaitLcd()//justwaituntil液晶不忙为止

{

chartemp;

bitflag=1;

while(flag==1)

{

temp=XBYTE[rc];

if(temp>>7==0)flag=0;

P1=temp;

}

P1=0xff;

}

//justwaituntil液晶不忙为止

voidWriteCommand_Lcd(bitisCheck,charc)

{

if(isCheck==1)waitLcd();

XBYTE[wc]=c;

}

voidwritedata(charc)

{

waitLcd();

XBYTE[wd]=c;

}

voidLcdInit()

{

delay5ms();

delay5ms();

delay5ms();

WriteCommand_Lcd(0,0x38);//三次显示模式设置,不检测忙信号

delay5ms();

WriteCommand_Lcd(0,0x38);

delay5ms();

WriteCommand_Lcd(0,0x38);

delay5ms();

WriteCommand_Lcd(1,0x38);//显示模式设置,开始要求每次检测忙信号,8位2行5*7

WriteCommand_Lcd(1,0x08);//关闭显示

WriteCommand_Lcd(1,0x01);//清显示

WriteCommand_Lcd(1,0x06);//文字不动,光标右移

WriteCommand_Lcd(1,0x0C);//显示开及光标设置

}

voiddisplayListChar(unsignedcharX,unsignedcharY,ucharDData)

{

Y&=0x1;

X&=0xF;

if(X<=0xF)

{

Y&=0x1;

X&=0xF;

if(Y)X|=0x40;

X|=0x80;

WriteCommand_Lcd(0,X);

writedata(dispbuf[DData]);

}

}

voidShow_Time(unitk)

{

displayListChar(0,0,hour/10);

displayListChar(1,0,hour%10);

displayListChar(2,0,10);

displayListChar(3,0,minute/10);

displayListChar(4,0,minute%10);

displayListChar(5,0,10);

displayListChar(6,0,second/10);

displayListChar(7,0,second%10);

switch(k)

{

case1:

displayListChar(0,1,1);

case2:

displayListChar(0,1,2);

case3:

displayListChar(0,1,3);

case4:

displayListChar(0,1,4);

case5:

displayListChar(0,1,5);

case6:

displayListChar(0,1,6);

case7:

displayListChar(0,1,7);

case8:

displayListChar(0,1,8);

case9:

displayListChar(0,1,9);

case10:

displayListChar(0,1,10);

case11:

displayListChar(0,1,11);

case12:

displayListChar(0,1,12);

case13:

displayListChar(0,1,13);

case14:

displayListChar(0,1,14);

case15:

displayListChar(0,1,15);

case16:

displayListChar(0,1,16);

}

voidSettime(ucharverify)

{

//键盘设置

//1/hour+(0xee)2/minute+0xde3/second+0xbe+

//4/hour-0xed5/minute-0xdd6/second-0xbd-

//789*

//0CLR=/

////hour+的代码

if(flag)

{

if(verify==0xee)

{

dlms();

if(verify==0xee)

{

hour++;

if(hour==24)

{

hour=0;

}

//while(verify==0xee);

verify=0x00;

}

//1/hour+(0xee)2/minute+0xde3/second+0xbe

}

///minute+的代码

elseif(verify==0xde)

{

dlms();

if(verify==0xde)

{

minute++;

if(minute==60)

{

minute=0;

}

//while(verify==0xde);

verify=0x00;

}

//1/hour+(0xee)2/minute+0xde3/second+0xbe

}

//////second++的代码

elseif(verify==0xbe)

{

dlms();

if(verify==0xbe)

{

second++;

if(second==60)

{

sec;

}

//while(verify==0xbe);

verify=0x00;

}

//1/hour+(0xee)2/minute+0xde3/second+0xbe

}

//////hour-(0xed)的代码

elseif(verify==0xed)

{

dlms();

if(verify==0xed)

{

if(hour==0)

{hour=24;

}

hour--;

//if(hour==0)

//{

//hour=23;

//}

//while(verify==0xed);

verify=0x00;

}

}

//4/hour-0xed5/minute-0xdd6/second-0xbd

///下面为minute-的代码

elseif(verify==0xdd)

{

dlms();

if(verify==0xdd)

{if(minute==0)

{minute=60;}

minute--;

//if(minute==0)

//{

//minute=59;

//}

//while(verify==0xdd);

verify=0x00;

}

}

//4/hour-0xed5/minute-0xdd6/second-0xbd

///下面为second-的代码

elseif(verify==0xbd)

{

dlms();

if(verify==0xbd)

{if(second==0)

{sec;}

second--;

//if(second==0)

//{

//sec;

//}

//while(verify==0xbd);

verify=0x00;

}

//4/hour-0xed5/minute-0xdd6/second-0xbd

}

}

}

voidmain(void)

{

TMOD=0x02;//置自动重装载模式

TH0=0x06;//设初值

TL0=0x06;//设初值

TR0=1;//开始计数

ET0=1;//开定时器/计数器

EA=1;//中断开

delay400ms();//启动等待,等LCM讲入工作状态

LcdInit();//LCM初始化

while

(1)

{

ucharkey;

key=kbscan();

dlms();

Show_Time();

//if((key==0xee)||(key==0xbe)||(key==0xde)||(key==0xed)||(key==0xdd)||(key==0xbd))

if(key!

=0)

{

if(key==0x7e)

{

dlms();

if(key==0x7e)

{

EA=0;

flag=1;

}

//while(verify==0xee);

key=0x00;

}

if(key==0x7d)

{

dlms();

if(key==0x7d)

{

EA=1;

flag=0;

}

//while(verify==0xee);

key=0x00;

}

Settime(key);

delay400ms();

}

}

}

voiddelay5ms(void)

{

unsignedintTempCya=277;

while(--TempCya);

}

//延时400ms

voiddelay400ms(void)

{

unsignedintTempCya=22160;

while(--TempCya);

}

//延时400ms

voidtimer0(void)interrupt1using1

{

tcnt++;

if(tcnt==2000)

{

tcnt=0;

second++;

if(second==60)

{

sec;

minute++;

if(minute==60)

{

minute=0;

hour++;

if(hour==24)

{

hour=0;

}

}

}

}

}

//键盘扫描

ucharkbscan(void)

{

ucharsccode;

P1=0xf0;

if((P1&0xf0)!

=0xf0)

{

dlms();

if((P1&0xf0)!

=0xf0)

{

sccode=0xfe;

while((sccode&0x10)!

=0)

{

P1=sccode;

if((P1&0xf0)!

=0xf0)

{

temp1=P1;

returntemp1;

}

else

{

sccode=(sccode<<1)|0x01;

}

}

}

}

return(0);

}

voiddlms(void)

{

g=554;

while(g--);//延时10mS钟

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 解决方案 > 学习计划

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1