单片机 秒表Word格式文档下载.docx

上传人:b****1 文档编号:428694 上传时间:2023-04-28 格式:DOCX 页数:19 大小:17.84KB
下载 相关 举报
单片机 秒表Word格式文档下载.docx_第1页
第1页 / 共19页
单片机 秒表Word格式文档下载.docx_第2页
第2页 / 共19页
单片机 秒表Word格式文档下载.docx_第3页
第3页 / 共19页
单片机 秒表Word格式文档下载.docx_第4页
第4页 / 共19页
单片机 秒表Word格式文档下载.docx_第5页
第5页 / 共19页
单片机 秒表Word格式文档下载.docx_第6页
第6页 / 共19页
单片机 秒表Word格式文档下载.docx_第7页
第7页 / 共19页
单片机 秒表Word格式文档下载.docx_第8页
第8页 / 共19页
单片机 秒表Word格式文档下载.docx_第9页
第9页 / 共19页
单片机 秒表Word格式文档下载.docx_第10页
第10页 / 共19页
单片机 秒表Word格式文档下载.docx_第11页
第11页 / 共19页
单片机 秒表Word格式文档下载.docx_第12页
第12页 / 共19页
单片机 秒表Word格式文档下载.docx_第13页
第13页 / 共19页
单片机 秒表Word格式文档下载.docx_第14页
第14页 / 共19页
单片机 秒表Word格式文档下载.docx_第15页
第15页 / 共19页
单片机 秒表Word格式文档下载.docx_第16页
第16页 / 共19页
单片机 秒表Word格式文档下载.docx_第17页
第17页 / 共19页
单片机 秒表Word格式文档下载.docx_第18页
第18页 / 共19页
单片机 秒表Word格式文档下载.docx_第19页
第19页 / 共19页
亲,该文档总共19页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

单片机 秒表Word格式文档下载.docx

《单片机 秒表Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《单片机 秒表Word格式文档下载.docx(19页珍藏版)》请在冰点文库上搜索。

单片机 秒表Word格式文档下载.docx

ucharhour;

uinttcnt,g;

ucharsuanfa;

bitflag2;

bitflag1=1;

//////控制计算器还是液晶调整的状态灯

uinti=0,f,m,g,s,t;

// 

for里的计数值,用于循环

//用来标记按了什么,如+,-.*,或是/

sbitP2_0=P2^0;

//定义P2.0口用来,当计算值超过15时,P2.0所对应的灯闪几下

sbitP2_1=P2^1;

//定义P2.1口用来,当除数为0时,P2.1所对应的灯闪几下

sbitP2_2=P2^2;

sbitP2_3=P2^3;

uintnum[4]={0};

//用于记录外面输入的数字

uintTablenum;

sbitP3_4=P3^4;

sbitP3_5=P3^5;

voidjieguo(void);

voidSettime(ucharverify);

ucharkbscan(void);

///键盘扫描

voidShow_Time(void);

////显示时间

//verify在这里为调整的意思

uinttransfor(ucharkey1);

voiddelay400ms(void);

voiddelay200ms(void);

voiddelay5ms(void);

voiddelay_1s(void);

voiddlms(void);

voiddlms1(void)

uintg=20000;

while(--g);

//延时100mS钟

}

voidclr(void)

{

i=0;

suanfa=0;

Tablenum=0;

for(f=0;

f<

4;

f++)

{

num[f]=0;

}

P2_0=1;

P2_1=1;

P2_2=1;

P2_3=0;

P3_4=0;

P3_5=1;

P0=0xc0;

P3_5=0;

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

//***************************************以下液晶驱动****************************************************

voidwaitLcd() 

//justwaituntil液晶不忙为止

chartemp;

bitflag=1;

while(flag==1)

temp=XBYTE[rc];

if(temp>

>

7==0)flag=0;

P1=temp;

P1=0xff;

voidWriteCommand_Lcd(bitisCheck,charc) 

if(isCheck==1)waitLcd();

XBYTE[wc]=c;

voidwritedata(charc)

waitLcd();

XBYTE[wd]=c;

voidLcdInit()

delay5ms();

delay5ms();

WriteCommand_Lcd(0,0x38);

//三次显示模式设置,不检测忙信号

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&

if(Y)X|=0x40;

X|=0x80;

WriteCommand_Lcd(0,X);

writedata(dispbuf[DData]);

//****************************************以上液晶驱动*****************************************************

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

//**********************************以下显示时间*****************************************************

voidShow_Time(void)

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);

//**********************************以上显示时间*****************************************************

voidmain(void)

TMOD=0x02;

//置自动重装载模式

TH0=0x06;

//设初值

TL0=0x06;

TR0=1;

//开始计数

ET0=1;

//开定时器/计数器

EA=1;

//中断开

delay400ms();

//启动等待,等LCM讲入工作状态

LcdInit();

//LCM初始化

P3_4=0;

P2_0=1;

P2_1=1;

P2_2=0;

P2_3=1;

P3_5=1;

P0=0xc0;

P3_5=0;

while

(1)

ucharkey;

key=kbscan();

dlms();

//0(111001110xe7)

///*****************************以下是两种状态的切换********************

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

if(key==0xe7)

flag1=~flag1;

key=0x00;

if(flag1==1)

///液晶状态灯

if(flag1==0)

P2_2=1;

P2_3=0;

///计算器状态灯

dlms1();

///*****************************以上是两种状态的切换********************

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

///*******************************用于调整时间********************************************

{LcdInit();

Show_Time();

if(key!

=0)

if(key==0x7e)

EA=0;

flag2=1;

if(key==0x7d)

flag2=0;

Settime(key);

delay200ms();

//**************************************下面是计算器*************************

if(flag1==0)

if((key!

=0x7e)&

&

(key!

=0x7d)&

=0x7b)&

=0x77)&

=0xd7)&

=0xb7)&

=0x00))

{//0x7e为"

+"

0x7d为"

-"

0x7b为"

*"

0x77为"

/"

.0xd7为"

CLR"

0xb7为"

="

Tablenum=transfor(key);

if(Tablenum!

=0)

num[i]=Tablenum;

P0=(table[Tablenum]);

//这里的key只能进来0至9

if((key==0x77)||(key==0x7d)||(key==0x7b)||(key==0x7e))

i++;

if(i>

1){i=1;

if(key==0x7e){suanfa=1;

if(key==0x7d){suanfa=2;

if(key==0x7b){suanfa=3;

if(key==0x77){suanfa=4;

if(key==0xb7)//按等号(0xb7)给P2赋值

jieguo();

//按等号给P2赋值

if(key==0xd7)//如果按清零,则清零

clr();

//如果按清零,则清零

//**************************************上面是计算器************************************************

}//此括号为while的括号

voiddelay5ms(void)

unsignedintTempCya=277;

while(--TempCya);

//延时400ms

voiddelay400ms(void)

unsignedintTempCya=22160;

voiddelay200ms(void)

unsignedintTempCyaaa=11080;

while(--TempCyaaa);

//*****************************定时器********************************************

voidtimer0(void)interrupt1using1

tcnt++;

if(tcnt==2000)

tcnt=0;

second++;

if(second==60)

second=0;

minute++;

if(minute==60)

minute=0;

hour++;

if(hour==24)

hour=0;

//*****************************显示结果*********************************************

voidjieguo(void)

if(suanfa==1)

num[2]=(num[1]+num[0]);

if((num[2]<

=15)&

(num[2]>

=0))

P0=table[num[2]];

else

{clr();

for(m=0;

m<

8;

m++)

P2_0=~P2_0;

delay_1s();

if(suanfa==2)//减法显示

num[2]=(num[0]-num[1]);

}//减法显示

if(suanfa==3)//乘法显示

num[2]=(num[0]*num[1]);

}//乘法显示

if(suanfa==4)//除法显示

if(num[1]!

num[2]=(num[0]/num[1]);

P2_1=~P2_1;

}//除法显示

uinttransfor(ucharkey1)

uinttemp;

switch(key1)

case0xee:

temp=1;

break;

case0xde:

temp=2;

case0xbe:

temp=3;

case0xed:

temp=4;

case0xdd:

temp=5;

case0xbd:

temp=6;

case0xeb:

temp=7;

case0xdb:

temp=8;

case0xbb:

temp=9;

default:

temp=0;

returntemp;

//*******************************以下时间调节******************************************************

voidSettime(ucharverify)

//键盘设置

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

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

//789*

//0CLR=/

////hour+的代码

if(flag2)

if(verify==0xee)

//while(verify==0xee);

verify=0x00;

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

///minute+的代码

elseif(verify==0xde)

if(verify==0xde)

//while(verify==0xde);

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

elseif(verify==0xbe)

if(verify==0xbe)

//while(verify==0xbe);

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

elseif(verify==0xed)

if(verify==0xed)

if(hour==0)

{hour=24;

hour--;

//if(hour==0)

//{

//hour=23;

//}

//while(verify==0xed);

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

///下面为minute-的代码

elseif(verify==0xdd)

if(verify==0xdd)

{if(minute==0)

{minute=60;

minute--;

//if(minute==0)

//{

//minute=59;

//while(verify==0xdd);

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

///下面为second-的代码

elseif(verify==0xbd)

if(verify==0xbd)

{if(second==0)

{second=60;

second--;

//if(second==0)

//second=59;

//while(verify==0xbd);

//4/hour-0xed5/

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

当前位置:首页 > 自然科学 > 物理

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2