单片机程序源代码.docx

上传人:b****5 文档编号:6104937 上传时间:2023-01-03 格式:DOCX 页数:52 大小:42.68KB
下载 相关 举报
单片机程序源代码.docx_第1页
第1页 / 共52页
单片机程序源代码.docx_第2页
第2页 / 共52页
单片机程序源代码.docx_第3页
第3页 / 共52页
单片机程序源代码.docx_第4页
第4页 / 共52页
单片机程序源代码.docx_第5页
第5页 / 共52页
点击查看更多>>
下载资源
资源描述

单片机程序源代码.docx

《单片机程序源代码.docx》由会员分享,可在线阅读,更多相关《单片机程序源代码.docx(52页珍藏版)》请在冰豆网上搜索。

单片机程序源代码.docx

单片机程序源代码

第二章

任务一:

闪烁广告灯的设计利用89c51单片机的端口控制两个LED(D0和D1),编写程序,实现两个LED互闪。

#include

#defineuintunsignedint

#defineucharunsignedchar

sbitLED1=P0^0;

sbitLED2=P0^1;

voiddelayms(uintms)

{

uinti;

while(ms--)

{

for(i=0;i<120;i++);

}

}

voidmain()

{

while

(1)

{

LED1=0;

LED2=1;

delayms(500);

LED1=1;

LED2=0;

delayms(500);

}

}

任务二:

流水广告灯的设计

利用89c51单片机的端口控制8个LED(D0~D7)循环点亮,刚开始时D0点亮,延时片刻后,接着D1点亮,然后依次点亮D2->D3->D4->D5->D6->D7,然后再点亮D7->D6->D5->D4->D3->D2->D1->D0,重复循环。

#include

#include

#defineuintunsignedint

#defineucharunsignedchar

uinti;

uchartemp;

uinta[8]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};

voiddelayms(uintms)

{

while(ms--)

{uintj;

for(j=0;j<120;j++);

}

}

voidmain()

{

while

(1)

{

P0=0xfe;

while(P0!

=0x7f)

{

//P1=temp;

//delayms(500);P0=_crol_(P0,1);

delayms(250);

}

temp=0x7f;

while(P0!

=0xfe)

{

P0=temp;

delayms(500);

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灭。

#include

#defineuintunsignedint

#defineucharunsignedchar

ucharcodetable[]={0xe7,0xc3,0x81,0x00};

voiddelay(uintx)

{

uinti,j;

for(i=x;i>0;i--)for(j=120;j>0;j--);

}

voidmain()

uinti;

while

(1)

{

P1=0xff;

delay(500);

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

{

P1=table[i];delay(500);

}

for(i=3;i>0;i--)

{

P1=table[i-1];delay(500);

}

}

}

任务四:

复杂广告灯的设计

利用89c51单片机的端口实现8个LED(D0~D7)复杂广告灯的控制,要求显示规律为:

正向流水->反向流水->隔灯闪烁3次->高四盏、低四盏闪烁2次->隔两盏闪烁3次,再重复循环。

#include

#defineuintunsignedint

#include

voiddelayms(uintms)

{

uinti;

while(ms--)

{

for(i=0;i<110;i++);

}

}

voidmain()

{

uinti,j,xx[2]={0xaa,0xff},yy[2]={0xf0,0x0f},zz[2]={0xb6,0xff};

unsignedcharaa;

while

(1)

{

aa=0xfe;

for(i=0;i<7;i++)

{

P0=aa;

aa=_crol_(aa,1);

delayms(500);

}

for(i=0;i<8;i++)

{

P0=aa;

aa=_cror_(aa,1);

delayms(500);

}

for(i=0;i<3;i++)

for(j=0;j<2;j++)

{

P0=xx[j];delayms(500);

}

for(i=0;i<2;i++)

for(j=0;j<2;j++)

{

P0=yy[j];delayms(500);

}

for(i=0;i<3;i++)

for(j=0;j<2;j++)

{

P0=zz[j];

delayms(500);

}

}

}

任务五:

单个LED数码管显示设计

使用89c51的P0口作为输出口,外接LED数码管,编写程序,使数码管循环显示从0~9的加1计数。

#include

#defineuintunsignedint

#defineucharunsignedchar

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

}

voidmain()

{

int_int();

while

(1)

{

P0=table[key];

}

}

任务六:

多个LED数码管显示设计

使用单片机P0和P2口作为输出口,外接一个8位LED数码管,编写程序,使数码管显示“872AF635”。

#include

#include

#defineuintunsignedint

#defineucharunsignedchar

delay(ms)

{

while(ms--)

{inti;

for(i=0;i<110;i++);

}

}

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;

uinti;

while

(1)

{j=0x01;

for(i=0;i<8;i++)

{

P2=j;

P0=a[b[i]];

j=_crol_(j,1);

delay(3);

}

}

任务七:

查询式按键设计

将8个按键从1~8进行编号,如果其中一个键被按下,则在LED数码管上显示相应的键值。

#include

#defineuintunsignedint

#defineucharunsignedchar

main()

{

uchar

a[16]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e};

P0=0xff;

while(P0!

=0xff)

{switch(P0)

{case0xfe:

P2=a[1];break;

case0xfd:

P2=a[2];break;

case0xfb:

P2=a[3];break;

case0xf7:

P2=a[4];break;

case0xef:

P2=a[5];break;

case0xdf:

P2=a[6];break;

case0xbf:

P2=a[7];break;

case0x7f:

P2=a[8];

}

}

}

任务八:

LED数码管显示矩阵键盘按键的设计

设计一个4*4的矩阵键盘,以P1.0~P1.3作为行线,以P1.4~P1.7作为列线。

要求:

未按下按键时,LED数码管显示“-”,按下按键时,在数码管上显示相应的键值。

#include

#defineucharunsignedchar

#defineuintunsignedint

uchar

table[17]={0xbf,0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e};

uintnum=0;

voiddelay(uintx)

{

uchari,j;

for(i=x;i>0;i--)for(j=120;j>0;j--);

}

keyscan()

{uinttemp;

temp=P2;

temp&=0x0f;

if(temp==0x0e)

{

P2=0xf0;

temp=P2;

temp&=0xf0;

switch(temp)

{

case0xe0:

num=1;break;

case0xd0:

num=2;break;

case0xb0:

num=3;break;

case0x70:

num=4;

}

}

if(temp==0x0d)

{

P2=0xf0;

temp=P2;

temp&=0xf0;

switch(temp)

{

case0xe0:

num=5;break;

case0xd0:

num=6;break;

case0xb0:

num=7;break;

case0x70:

num=8;

}

}

if(temp==0x0b)

{

P2=0xf0;

temp=P2;

temp&=0xf0;

switch(temp)

{

case0xe0:

num=9;break;

case0xd0:

num=10;break;

case0xb0:

num=11;break;case0x70:

num=12;

}

}

if(temp==0x07)

{

P2=0xf0;

temp=P2;

temp&=0xf0;switch(temp){

case0xe0:

num=13;break;case0xd0:

num=14;break;case0xb0:

num=15;break;case0x70:

num=16;

}

}

returnnum;

}

voiddisplay(uintnum)

{if(num==0)

P0=0xbf;

P0=table[num];

}

main()

{

uinttemp;

while

(1)

{

P2=0x0f;

temp=P2;if(temp!

=0x0f)keyscan();

display(num);

}

}

(2)

#include

#defineucharunsignedchar

#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){

uchari,j;

for(i=x;i>0;i--)

for(j=120;j>0;j--);

}//延时函数

voiddisplay(ucharnum)

{

P0=LED_code[num];

}//数码管显示函数

voidkeyscan()//键盘扫描函数

{

uchartemp;

P1=0xfe;//key1-key4第一行按下

temp=P1;

temp&=0xf0;

if(temp!

=0xf0)

{

delay(10);//消除抖动

temp=P1;

temp&=0xf0;

if(temp!

=0xf0)

{

temp=P1;

switch(temp)

{

case0xee:

num=1;

break;

case0xde:

num=2;

break;

case0xbe:

num=3;

break;

case0x7e:

num=4;break;

}

}while(temp!

=0xf0)//等待按键释放{

temp=P1;temp&=0xf0;

}

}

P1=0xfd;//key5-key8第二行按下temp=P1;

temp&=0xf0;if(temp!

=0xf0)

{delay(10);//消除抖动temp=P1;

temp&=0xf0;if(temp!

=0xf0)

{temp=P1;switch(temp){case0xed:

num=5;break;

case0xdd:

num=6;break;

case0xbd:

num=7;break;

case0x7d:

num=8;break;

}

}while(temp!

=0xf0)//等待按键释放{

temp=P1;temp&=0xf0;

}

}

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

沏EaIq

i.∖∖=vaxm

:

qqxθOSnO

沏EaIq

!

qj=uιnu

:

qpxθOSnO

沏EaIqM=TOUi

:

qoxQOSnO

}(duio;)qo;TMS

£∖(J=duιs;

}(OJXO=id啊尹:

0JXO=茅duι^f[d=duιq

Q⅛⅛^W∕∙(oi)xbi9p}(OJXO=id∞s⅛:

0JXo=茅dura]f∖d=duιq

{

case0xe7:

num=13;

break;

case0xd7:

num=14;

break;

case0xb7:

num=15;

break;

case0x77:

num=16;

break;

}

}

while(temp!

=0xf0)//等待按键释放

{

temp=P1;temp&=0xf0;

}

}

}

voidmain()

{

while

(1)

{

keyscan();

if(num==0)

P0=0xbf;

else

display(num-1);

}

}任务九:

简单拨号键盘的设计

使用4*4的矩阵式键盘及8位共阳极LED数码管设计一个简单拨号键盘,要求在初始状态时,8位数码管均显示“-”,每按下一个号码后,原8位LED数码管显示的内容向左移动1位。

#include

#include

#defineuintunsignedint

#defineucharunsignedchar

ucharkeycount=0,num;

ucharcodeLED1_code[]=

{

0xc0,0xf9,0xa4,0xb0,

0x99,0x92,0x82,0xf8,

0x80,0x90,0x88,0x83,

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

voiddelay(uintx)

{

uchari,j;

for(i=x;i>0;i--)

for(j=120;j>0;j--);

}

voiddisplay()

{

uchari;

//P2=0x80;

for(i=0;i<8;i++)

{

P2=LED2_wei[i];

P0=LED2_duan[7-i];

delay

(1);

}

}

voidkeyscan()

{

uchartemp;

P3=0xfe;

temp=P3;

temp&=0xf0;

if(temp!

=0xf0)

{

delay(10);

temp=P3;

temp&=0xf0;

if(temp!

=0xf0)

{

temp=P3;

switch(temp)

{

case0xee:

keycount++;num=0;break;

case0xde:

keycount++;num=1;break;

case0xbe:

keycount++;num=2;break;

case0x7e:

keycount++;num=3;break;

}while(temp!

=0xf0)

{

temp=P3;temp&=0xf0;

}

}

P3=0xfd;

temp=P3;temp&=0xf0;

if(temp!

=0xf0)

{

delay(10);

temp=P3;temp&=0xf0;

if(temp!

=0xf0)

{

temp=P3;

switch(temp)

{

case0xed:

keycount++;num=4;break;

case0xdd:

keycount++;num=5;break;

case0xbd:

keycount++;num=6;break;

case0x7d:

keycount++;num=7;break;}

}while(temp!

=0xf0)

{

temp=P3;temp&=0xf0;

}

}

P3=0xfb;

temp=P3;temp&=0xf0;

if(temp!

=0xf0)

{

delay(10);

temp=P3;temp&=0xf0;

if(temp!

=0xf0)

{

temp=P3;

switch(temp)

{

case0xeb:

keycount++;num=8;break;

case0xdb:

keycount++;num=9;break;

case0xbb:

keycount++;num=10;break;

case0x7b:

keycount++;num=11;break;}

}

while(temp!

=0xf0)

{

temp=P3;temp&=0xf0;

}

}

P3=0xf7;

temp=P3;temp&=0xf0;

if(temp!

=0xf0)

{

delay(10);

temp=P3;temp&=0xf0;

if(temp!

=0xf0)

{

temp=P3;

switch(temp)

{

case0xe7:

keycount++;num=12;break;

case0xd7:

keycount++;num=13;break;

case0xb7:

keycount++;num=14;break;

case0x77:

keycount++;num=15;break;}

}

while(temp!

=0xf0)

{

temp=P3;temp&=0xf0;

}

}

}

voidmain()

{

uchari;

while

(1)

display();

keyscan();

if(keycount!

=0)

{

for(i=0;i<7;i++)

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次后,继续按默认规律显示。

#include

#defineuintunsignedint

#defineucharunsignedchar

uintLED_table[14]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd};voiddelayms(uintms)

{

uinti;

while(ms--)

for(i=0;i<120;i++);

}

voidint_int()

{

EA=1;

EX0=1;

IT0=1;

}

voidLED_shan()interrupt0

{

uintk;

for(k=0;k<5;k++)

{

P0=0xaa;

delayms(500);

P0=0xff;

delayms(500);

}

voidmain()

{

int_int();

while

(1)

{uinti;

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

P0=LED_table[i];delayms(500);

}for(i=0;i<3;i++)

{

P0=0xaa;delayms(500);

P0=0xff;delayms(500);

}

}

}任务二:

采用外中断控制的条形LED彩灯设计

P0端口作为输出口,外接条形LED。

编写程序,当按键K未按下时,LED进行循环左移显示。

如果第1次按下按键K后,LED进行循环右移显示。

如果第2次按下按键K后,LED进行拉幕式与闭幕式花样显示。

如果第3次按下按键K后,又恢复循环左移显示。

#include

unsignedcharflag=0;//状态标志位

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

当前位置:首页 > PPT模板 > 国外设计风格

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

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