广东工业大学单片机课程设计何教授文档格式.docx
《广东工业大学单片机课程设计何教授文档格式.docx》由会员分享,可在线阅读,更多相关《广东工业大学单片机课程设计何教授文档格式.docx(14页珍藏版)》请在冰豆网上搜索。
JMPDISPLAY2
DISPLAY1:
MOVR2,#00H
JMPA1
DISPLAY2:
MOVR2,#04H
A1:
MOVA,R3
MOVDPTR,#7F01H
MOVDPTR,#1000H
MOVA,R2
MOVCA,@A+DPTR
MOVDPTR,#7F02H
CALLDLIMS
INCR2
RLA
MOVR3,A
JNBACC.4,BEGIN
DLIMS:
MOVR7,#05H
DL0:
MOVR6,#0FFH
DL1:
DJNZR6,DL1
DJNZR7,DL0
RET
END
5
4
7
9
E
B
A
(2)编程实现键盘并能左移显示:
ACALLDIS
ACALLCLEAR
ACALLCCSCAN
JNZINK1
AJMPBEGIN
INK1:
ACALLDLIMS
JNZINK2
AJMPBEGIN
INK2:
MOVR2,#0FEH
MOVR4,#00H
COLUM:
MOVDPTR,#7F01H
INCDPTR
MOVXA,@DPTR
JBACC.3,LONE
MOVA,#00H
AJMPKCODE
LONE:
JB.ACC.2,NEXT
MOVA,#04H
KCODE:
ADDA,R4
ACALLPUTBUF
PUSHACC
KON:
ACALLCCSCAN
JNZKON
POPACC
NEXT:
INCR4
JNBACC.4,KEER
MOVR2,A
AJMPCOLUM
KERR:
CCSCAN:
MOV@DPTR,A
MOVXA,@DPTR
CPLA
ANLA,#0CH
RET
CLEAR:
DIS:
PUSHACC
PUSH00H
PUSH03H
MOVR0,#05H
MOVR3,#0F7H
AGAIN:
MOVA,@R0
MOVDPTR,#DDEG
INCR0
JNBACC.0,OUT
RRA
AJMPAGAIN
OUT:
POP03H
POP00H
POPACC
DDEG:
DB0EE,3EH,9EH,7AH
DB0E6H,0E0H,66H,0B6H
MOVR7,#01H
PUTBUF:
PUSH00H
MOVR7,A
MOVA,51H
MOV50H,A
MOVA,52H
MOV51H,A
MOVA,53H
MOV52H,A
MOVA,R7
(3)程序实现单片机售票机,以下要求:
a)当k0=1时,键入地址、价钱、SET,设置某个地址的票价,该机至少可连续设置三个不同地址的价钱:
上海864元、北京756元、广州819元。
b)当k0=0时,键入一个地址,购买的张数,按SET得到总价,再键入另一个地址、购买的张数,按SET即得总价,可计得至少三个地址的合总价。
#include<
reg51.h>
absacc.h>
#defineucharunsignedchar
#definepconXBYTE[0X7F00]
#definepaXBYTE[0X7F01]
#definepbXBYTE[0X7F02]
#definepcXBYTE[0X7F03]
#defineled0DBYTE[0x50]
#defineled1DBYTE[0x51]
#defineled2DBYTE[0x52]
#defineled3DBYTE[0x53]
#definekeynumDBYTE[0x54]
ucharbdatada;
sbitpc2=da^2;
sbitpc3=da^3;
sbitk0=da^1;
sbitp26=P2^6;
ucharcodetable[]={0XFC,0X60,0XBA,0XF2,0X66,0XB6,0XBE,0XE0,0XFE,0XE6};
ucharcodectrl[4]={0XFE,0XFD,0XFB,0XF7};
voidInit()
{
p26=1;
pa=0x00;
pcon=0x03;
}
VoidDelay(intsec)
inti,j;
for(i=0;
i<
sec;
i++)
{
for(j=0;
j<
10;
j++){;
}
voidDisplay()
pa=ctrl[0];
pb=led0;
Delay(10);
pa=ctrl[1];
pb=led1;
pa=ctrl[2];
pb=led2;
pa=ctrl[3];
pb=led3;
voidmain()
inttemp;
intstatus=0;
intsadd=0;
intcount[3]={0,0,0};
intprice[3]{0,0,0};
intnumbuff[4]={0,0,0,0};
unsignedinttotalprice=0;
Init();
led0=table[0];
led1=table[0];
led2=table[0];
led3=table[0];
while
(1)
{//1
pa=0x00;
da=pc;
if(pc2==0||pc3==0)
{//2
Delay(30);
///////////键盘扫描//////////
pa=ctrl[0];
da=pc;
if(pc2==0)keynum=7;
elseif(pc3==0)keynum=8;
else
{//3
pa=ctrl[1];
da=pc;
if(pc2==0)keynum=6;
elseif(pc3==0)keynum=1;
else
{//4
pa=ctrl[2];
da=pc;
if(pc2==0)keynum=5;
elseif(pc3==0)keynum=2;
else
{//5
pa=ctrl[3];
da=pc;
if(pc2==0)keynum=4;
elseif(pc3==0)keynum=3;
}//5
}//4
}//3
///////////以上键盘扫描////////////
while
(1)
pa=0x00;
if(pc3==0||pc2==0)
{//4
led0=table[numbuff[0]];
led1=table[numbuff[1]];
led2=table[numbuff[2]];
led3=table[numbuff[3]];
Display();
elsebreak;
///////////////数据处理///////////////////
if(k0==1)
/////////////address///////////////
if(status==0)
if(keynum>
=3&
&
keynum<
=5)
sadd=keynum;
status=1;
numbuff[3]=numbuff[2]=numbuff[1]=numbuff[0]=0;
////////////////address///////////////
///////////////price///////////////////
elseif(status==1)
switch(keynum)
case7:
{//6
if(numbuff[3]==9)numbuff[3]=0;
elsenumbuff[3]++;
break;
}//6
case8:
{
if(numbuff[2]==9)numbuff[2]=0;
elsenumbuff[2]++;
break;
}
case1:
if(numbuff[1]==9)numbuff[1]=0;
elsenumbuff[1]++;
case2:
if(numbuff[0]==9)numbuff[0]=0;
elsenumbuff[0]++;
case6:
//set
if(sadd>
sadd<
{//7
price[sadd-3]=numbuff[0]*1000+numbuff[1]*100+numbuff[2]*10+numbuff[3];
sadd=0;
numbuff[3]=numbuff[2]=numbuff[1]=numbuff[0]=0;
status=0;
}//7
////////////////////以上price////////////////////
}//3
elseif(k0==0)
{//3
/////////////address///////////////
if(status==0)
{//4
if(keynum>
{//5
sadd=keynum;
status=2;
numbuff[3]=numbuff[2]=numbuff[1]=numbuff[0]=0;
}//5
}//4
////////////////address///////////////
elseif(status==2)//count
switch(keynum)
case7:
{//6
if(numbuff[3]==9)numbuff[3]=0;
elsenumbuff[3]++;
break;
}//6
case8:
{
if(numbuff[2]==9)numbuff[2]=0;
elsenumbuff[2]++;
}
case1:
if(numbuff[1]==9)numbuff[1]=0;
elsenumbuff[1]++;
case2:
if(numbuff[0]==9)numbuff[0]=0;
elsenumbuff[0]++;
case6:
if(sadd>
{//7
count[sadd-3]=numbuff[0]*1000+numbuff[1]*100+numbuff[2]*10+numbuff[3];
totalprice+=count[sadd-3]*price[sadd-3];
numbuff[0]=totalprice/1000;
temp=totalprice-numbuff[0]*1000;
numbuff[1]=temp/100;
temp=temp-numbuff[1]*100;
numbuff[2]=temp/10;
temp=temp-numbuff[2]*10;
numbuff[3]=temp;
sadd=0;
status=0;
}//7
/////////////////////switch///////
/////elseifstatus=2//////
}//3
/////k0==0////////
///////////////数据处理/////////////////
}//2
led0=table[numbuff[0]];
led1=table[numbuff[1]];
led2=table[numbuff[2]];
led3=table[numbuff[3]];
Display();
Delay(10);
}//1
}//0