单片机程序源代码Word下载.docx
《单片机程序源代码Word下载.docx》由会员分享,可在线阅读,更多相关《单片机程序源代码Word下载.docx(52页珍藏版)》请在冰豆网上搜索。
D2->
D1->
D0,重复循环。
#include<
intrins.h>
uchartemp;
uinta[8]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};
{uintj;
for(j=0;
j<
j++);
P0=0xfe;
while(P0!
=0x7f)
//P1=temp;
//delayms(500);
P0=_crol_(P0,1);
delayms(250);
temp=0x7f;
=0xfe)
P0=temp;
temp=_cror_(temp,1);
}任务三:
拉幕式与闭幕式广告灯的设计利用89c51单片机的P0端口实现8个LEDD0~D7的拉幕式与闭幕式广告灯设计。
拉幕式:
开始D0~D7全灭,延时片刻后首先D3和D4亮,其次是D2和D5亮,再是D1和D6亮,最后是D0和D7亮。
闭幕式:
开始D0~D7全亮,延时片刻后首先D0和D7灭,其次是D1和D6灭,再是D2和D5灭,最后是D3和D4灭。
ucharcodetable[]={0xe7,0xc3,0x81,0x00};
voiddelay(uintx)
uinti,j;
for(i=x;
i>
0;
i--)for(j=120;
j>
j--);
P1=0xff;
delay(500);
4;
i++)
P1=table[i];
delay(500);
for(i=3;
i--)
P1=table[i-1];
任务四:
复杂广告灯的设计
利用89c51单片机的端口实现8个LED(D0~D7)复杂广告灯的控制,要求显示规律为:
正向流水->
反向流水->
隔灯闪烁3次->
高四盏、低四盏闪烁2次->
隔两盏闪烁3次,再重复循环。
110;
uinti,j,xx[2]={0xaa,0xff},yy[2]={0xf0,0x0f},zz[2]={0xb6,0xff};
unsignedcharaa;
aa=0xfe;
7;
P0=aa;
aa=_crol_(aa,1);
8;
aa=_cror_(aa,1);
3;
2;
j++)
P0=xx[j];
delayms(500);
P0=yy[j];
P0=zz[j];
任务五:
单个LED数码管显示设计
使用89c51的P0口作为输出口,外接LED数码管,编写程序,使数码管循环显示从0~9的加1计数。
uchartable[10]={0XC0,0XF9,0XA4,0XB0,
0X99,0X92,0X82,0XF8,
0X80,0X90};
uintkey=0;
voidint_int()
EA=1;
IT0=1;
EX0=1;
voidcount_num()interrupt0
if(key==9)key=0;
elsekey++;
int_int();
P0=table[key];
任务六:
多个LED数码管显示设计
使用单片机P0和P2口作为输出口,外接一个8位LED数码管,编写程序,使数码管显示“872AF635”。
delay(ms)
{inti;
main()
uchar
a[16]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e};
ucharb[8]={0x08,0x07,0x02,0x0a,0x0f,0x06,0x03,0x05},j;
{j=0x01;
P2=j;
P0=a[b[i]];
j=_crol_(j,1);
delay(3);
任务七:
查询式按键设计
将8个按键从1~8进行编号,如果其中一个键被按下,则在LED数码管上显示相应的键值。
#include<
P0=0xff;
=0xff)
{switch(P0)
{case0xfe:
P2=a[1];
break;
case0xfd:
P2=a[2];
case0xfb:
P2=a[3];
case0xf7:
P2=a[4];
case0xef:
P2=a[5];
case0xdf:
P2=a[6];
case0xbf:
P2=a[7];
case0x7f:
P2=a[8];
任务八:
LED数码管显示矩阵键盘按键的设计
设计一个4*4的矩阵键盘,以P1.0~P1.3作为行线,以P1.4~P1.7作为列线。
要求:
未按下按键时,LED数码管显示“-”,按下按键时,在数码管上显示相应的键值。
table[17]={0xbf,0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e};
uintnum=0;
uchari,j;
keyscan()
{uinttemp;
temp=P2;
temp&
=0x0f;
if(temp==0x0e)
P2=0xf0;
=0xf0;
switch(temp)
case0xe0:
num=1;
break;
case0xd0:
num=2;
case0xb0:
num=3;
case0x70:
num=4;
if(temp==0x0d)
num=5;
num=6;
num=7;
num=8;
if(temp==0x0b)
num=9;
num=10;
num=11;
case0x70:
num=12;
if(temp==0x07)
switch(temp){
num=13;
case0xd0:
num=14;
case0xb0:
num=15;
num=16;
returnnum;
voiddisplay(uintnum)
{if(num==0)
P0=0xbf;
P0=table[num];
uinttemp;
P2=0x0f;
if(temp!
=0x0f)keyscan();
display(num);
(2)
#defineuintunsignedintsbitLED1=P2^0;
sbitLED2=P2^1;
ucharnum;
ucharcodeLED_code[]=
0xc0,0xf9,0xa4,0xb0,
0x99,0x92,0x82,0xf8,
0x80,0x90,0x88,0x83,
0xc6,0xa1,0x86,0x8e};
//数码管字形码编码voiddelay(uintx){
for(j=120;
}//延时函数
voiddisplay(ucharnum)
P0=LED_code[num];
}//数码管显示函数
voidkeyscan()//键盘扫描函数
P1=0xfe;
//key1-key4第一行按下
temp=P1;
if(temp!
=0xf0)
delay(10);
//消除抖动
case0xee:
case0xde:
case0xbe:
case0x7e:
num=4;
}while(temp!
=0xf0)//等待按键释放{
temp&
P1=0xfd;
//key5-key8第二行按下temp=P1;
{delay(10);
//消除抖动temp=P1;
{temp=P1;
switch(temp){case0xed:
num=5;
case0xdd:
num=6;
case0xbd:
num=7;
case0x7d:
num=8;
P1=0xfb;
//key9-key12第三行按下
(duio;
)qo;
TMSf∖d=duιq
(OJXO=id啊尹:
0JXO=茅duι^f[d=duιq
Q⅛⅛^W∕∙(oi)xbi9p}(OJXO=id∞s⅛:
0JXo=茅dura]f∖d=duιq
91心平£
I心*/:
ZJXO=Id{{
:
0JXo=茅dura]£
∖(J=duιs;
}¾
⅛⅛≡^⅜⅜∕/(OJXO=idui9j)9∏qM
{{
沏EaIq
P=UHUI
:
q/(XQOSnO
i.∖∖=vaxm
qqxθOSnO
!
qj=uιnu
qpxθOSnO
沏EaIqM=TOUi
qoxQOSnO
}(duio;
TMS
£
}(OJXO=id啊尹:
case0xe7:
case0xd7:
case0xb7:
case0x77:
while(temp!
=0xf0)//等待按键释放
keyscan();
if(num==0)
else
display(num-1);
}任务九:
简单拨号键盘的设计
使用4*4的矩阵式键盘及8位共阳极LED数码管设计一个简单拨号键盘,要求在初始状态时,8位数码管均显示“-”,每按下一个号码后,原8位LED数码管显示的内容向左移动1位。
ucharkeycount=0,num;
ucharcodeLED1_code[]=
0xc6,0xa1,0x86,0x8e
};
//数码管字形码编码
ucharLED2_duan[8]={0xbf,0xbf,0xbf,0xbf,0xbf,0xbf,0xbf,0xbf};
//8段共阳数码管编码
ucharLED2_wei[8]={0x80,0x40,0x20,0x10,0x08,0x04,0x02,0x01};
voiddisplay()
uchari;
//P2=0x80;
P2=LED2_wei[i];
P0=LED2_duan[7-i];
delay
(1);
voidkeyscan()
P3=0xfe;
temp=P3;
keycount++;
num=0;
P3=0xfd;
case0xed:
}
P3=0xfb;
case0xeb:
case0xdb:
case0xbb:
case0x7b:
P3=0xf7;
display();
if(keycount!
=0)
LED2_duan[i]=LED2_duan[i+1];
LED2_duan[7]=LED1_code[num];
keycount=0;
第五章
带中断控制的LED花样灯
P0端口作为输出口,外接8只LED,P3.2外接按键K。
编写程序,当K未按下时,8只LED进行默认显示,其显示规律为左移流水->
右移流水->
隔灯闪烁3次花样显示;
如果按下K键后,8只LED暂停默认显示,而进行闪烁显示,当显示达到5次后,继续按默认规律显示。
uintLED_table[14]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd};
voiddelayms(uintms)
voidLED_shan()interrupt0
uintk;
for(k=0;
k<
5;
k++)
P0=0xaa;
{uinti;
14;
i++){
P0=LED_table[i];
}for(i=0;
}任务二:
采用外中断控制的条形LED彩灯设计
P0端口作为输出口,外接条形LED。
编写程序,当按键K未按下时,LED进行循环左移显示。
如果第1次按下按键K后,LED进行循环右移显示。
如果第2次按下按键K后,LED进行拉幕式与闭幕式花样显示。
如果第3次按下按键K后,又恢复循环左移显示。
#include<
unsignedcharflag=0;
//状态标志位