51程序合集 包括流水灯按键蜂鸣器继电器译码器数码管点阵PWM步进电机.docx

上传人:b****5 文档编号:8636640 上传时间:2023-02-01 格式:DOCX 页数:21 大小:20.21KB
下载 相关 举报
51程序合集 包括流水灯按键蜂鸣器继电器译码器数码管点阵PWM步进电机.docx_第1页
第1页 / 共21页
51程序合集 包括流水灯按键蜂鸣器继电器译码器数码管点阵PWM步进电机.docx_第2页
第2页 / 共21页
51程序合集 包括流水灯按键蜂鸣器继电器译码器数码管点阵PWM步进电机.docx_第3页
第3页 / 共21页
51程序合集 包括流水灯按键蜂鸣器继电器译码器数码管点阵PWM步进电机.docx_第4页
第4页 / 共21页
51程序合集 包括流水灯按键蜂鸣器继电器译码器数码管点阵PWM步进电机.docx_第5页
第5页 / 共21页
点击查看更多>>
下载资源
资源描述

51程序合集 包括流水灯按键蜂鸣器继电器译码器数码管点阵PWM步进电机.docx

《51程序合集 包括流水灯按键蜂鸣器继电器译码器数码管点阵PWM步进电机.docx》由会员分享,可在线阅读,更多相关《51程序合集 包括流水灯按键蜂鸣器继电器译码器数码管点阵PWM步进电机.docx(21页珍藏版)》请在冰豆网上搜索。

51程序合集 包括流水灯按键蜂鸣器继电器译码器数码管点阵PWM步进电机.docx

51程序合集包括流水灯按键蜂鸣器继电器译码器数码管点阵PWM步进电机

*

/*按键则点亮LED灯,8路指示灯接p0口*

#include//51的端口和各特殊寄存器定义在此文件中此包含比不可少

sbitLED=P2^0;//定义LED在P2.0脚上

sbitK1=P0^0;//定义按钮在P0.0脚上

 

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

main()

{

if(!

K1)LED=0;//当按键按下对应单片机脚变低电平LED变低灯亮

elseLED=1;//当松开键按对应单片机脚变高电平LED变高灯灭

}

/*按键则点亮LED灯,8路指示灯接p0口#include

#include

sbitBEEP=P1^5;

sbitRELAY=P1^4;

sbitK1=P0^0;sbitK2=P0^1;

sbitK3=P0^2;sbitK4=P0^3;

sbitK5=P0^4;sbitK6=P0^5;

voidbeep();

main()

{

while

(1)

{

P2=0xff;

if(K1==0)

P2=0xfe;

if(K2==0)

P2=0xfd;

if(!

K3)

P2=0xfb;

if(!

K4)

P2=0xf7;

if(!

K5)

beep();//喇叭发声

RELAY=1;

if(!

K6)

RELAY=0;//通过了反相器

}

}

 

voidbeep()

{

unsignedchari,j;

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

{

BEEP=!

BEEP;//BEEP取反

for(j=0;j<250;j++)//需要产生方波

_nop_();

}

BEEP=1;//关闭蜂鸣器

}

*

*连续按动按钮LED会不停的左移或右移#include

#include

unsignedcharscan_key();

voidproc_key(unsignedcharkey_v);

voiddelayms(unsignedcharms);

sbitK1=P0^0;//对应按钮K1

sbitK2=P0^1;//对应按钮K2

main()

{

unsignedcharkey_s,key_v;

key_v=0x03;

P2=0xfe;

while

(1)

{

key_s=scan_key();

if(key_s!

=key_v)

{

delayms(10);

key_s=scan_key();

if(key_s!

=key_v)

{

key_v=key_s;

proc_key(key_v);

}

}

}

}

unsignedcharscan_key()

{

unsignedcharkey_s;

key_s=0x00;

key_s|=K2;

key_s<<=1;

key_s|=K1;

returnkey_s;

}

voidproc_key(unsignedcharkey_v)

{

if((key_v&0x01)==0)

{

P2=_cror_(P2,1);

}

elseif((key_v&0x02)==0)

{

P2=_crol_(P2,1);

}

}

voiddelayms(unsignedcharms)//延时子程序

{

unsignedchari;

while(ms--)

{

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

}

}

#include//51的端口和各特殊寄存器定义在此文件中此包含比不可少

main()

{

if(!

K1)BEEP=0;//当按键按下对应单片机脚变低电平BEEP发声

elseBEEP=1;//当松开键按对应单片机脚变高电平BEEP关闭

}

[文件名]C51音乐程序(八月桂花)

#include

#include

//本例采用89C52,晶振为11.0592MHZ

//关于如何编制音乐代码,其实十分简单,各位可以看以下代码.

//频率常数即音乐术语中的音调,而节拍常数即音乐术语中的多少拍;

//所以拿出谱子,试探编吧!

sbitBeep=P1^5;

unsignedcharn=0;//n为节拍常数变量

unsignedcharcodemusic_tab[]={

0x18,0x30,0x1C,0x10,//格式为:

频率常数,节拍常数,频率常数,节拍常数,

0x20,0x40,0x1C,0x10,

0x18,0x10,0x20,0x10,

0x1C,0x10,0x18,0x40,

0x1C,0x20,0x20,0x20,

0x1C,0x20,0x18,0x20,

0x20,0x80,0xFF,0x20,

0x30,0x1C,0x10,0x18,

0x20,0x15,0x20,0x1C,

0x20,0x20,0x20,0x26,

0x40,0x20,0x20,0x2B,

0x20,0x26,0x20,0x20,

0x20,0x30,0x80,0xFF,

0x20,0x20,0x1C,0x10,

0x18,0x10,0x20,0x20,

0x26,0x20,0x2B,0x20,

0x30,0x20,0x2B,0x40,

0x20,0x20,0x1C,0x10,

0x18,0x10,0x20,0x20,

0x26,0x20,0x2B,0x20,

0x30,0x20,0x2B,0x40,

0x20,0x30,0x1C,0x10,

0x18,0x20,0x15,0x20,

0x1C,0x20,0x20,0x20,

0x26,0x40,0x20,0x20,

0x2B,0x20,0x26,0x20,

0x20,0x20,0x30,0x80,

0x20,0x30,0x1C,0x10,

0x20,0x10,0x1C,0x10,

0x20,0x20,0x26,0x20,

0x2B,0x20,0x30,0x20,

0x2B,0x40,0x20,0x15,

0x1F,0x05,0x20,0x10,

0x1C,0x10,0x20,0x20,

0x26,0x20,0x2B,0x20,

0x30,0x20,0x2B,0x40,

0x20,0x30,0x1C,0x10,

0x18,0x20,0x15,0x20,

0x1C,0x20,0x20,0x20,

0x26,0x40,0x20,0x20,

0x2B,0x20,0x26,0x20,

0x20,0x20,0x30,0x30,

0x20,0x30,0x1C,0x10,

0x18,0x40,0x1C,0x20,

0x20,0x20,0x26,0x40,

0x13,0x60,0x18,0x20,

0x15,0x40,0x13,0x40,

0x18,0x80,0x00

};

voidint0()interrupt1//采用中断0控制节拍

{TH0=0xd8;

TL0=0xef;

n--;

}

voiddelay(unsignedcharm)//控制频率延时

{

unsignedi=3*m;

while(--i);

}

voiddelayms(unsignedchara)//豪秒延时子程序

{

while(--a);//采用while(--a)不要采用while(a--);各位可编译一下看看汇编结果就知道了!

}

voidmain()

{unsignedcharp,m;//m为频率常数变量

unsignedchari=0;

TMOD&=0x0f;

TMOD|=0x01;

TH0=0xd8;TL0=0xef;

IE=0x82;

play:

while

(1)

{

a:

p=music_tab[i];

if(p==0x00){i=0,delayms(1000);gotoplay;}//如果碰到结束符,延时1秒,回到开始再来一遍

elseif(p==0xff){i=i+1;delayms(100),TR0=0;gotoa;}//若碰到休止符,延时100ms,继续取下一音符

else{m=music_tab[i++],n=music_tab[i++];}//取频率常数和节拍常数

TR0=1;//开定时器1

while(n!

=0)Beep=~Beep,delay(m);//等待节拍完成,通过P1口输出音频(可多声道哦!

TR0=0;//关定时器1

}

}

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

/*继电器实验*

/**

/*连接方法:

连接JP11(P2)与JP5(按钮接口)*

/*按下P2.7继电器P1.4动作*

注意:

通过了74HC14控制ULN2003驱动芯片驱动继电器**

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

#include//51的端口和各特殊寄存器定义在此文件中

sbitRELAY=P1^4;//定义继电器对应单片机管脚

sbitK1=P2^7;//定义按钮对应单片机管脚

 

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

主函数*

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

main()

{

if(!

K1)RELAY=0;//按钮按下开启继电器

elseRELAY=1;//按钮松开关闭继电器

}

*138译码器实验*

#include

sbitHC138A=P2^2;//定义译码器输入端A在P2.2管脚上

sbitHC138B=P2^3;//定义译码器输入端B在P2.3管脚上

sbitHC138C=P2^4;//定义译码器输入端C在P2.4管脚上

voiddelay(unsignedinti)

{

unsignedcharj;

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

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

 

}

main()

{

//点亮第一个LED灯

HC138C=0;HC138B=0;HC138A=0;

delay(1500);//延时

//点亮第二个LED灯

HC138C=0;HC138B=0;HC138A=1;

delay(1500);//延时

//点亮第三个LED灯

HC138C=0;HC138B=1;HC138A=0;

delay(1500);

//点亮第四个LED灯

HC138C=0;HC138B=1;HC138A=1;

delay(2000);

//点亮第五个LED灯

HC138C=1;HC138B=0;HC138A=0;

delay(1500);

//点亮第六个LED灯

HC138C=1;HC138B=0;HC138A=1;

delay(1500);

HC138C=1;HC138B=1;HC138A=0;

delay(1500);

HC138C=1;HC138B=1;HC138A=1;

delay(1500);

}

*标题:

试验数码管上如何显示数字(共阳极)*

#include

#include

#defineNOP()_nop_()/*定义空指令*/

voiddelay(unsignedinti);//函数声名

//此表为LED的字模

unsignedcharcodeLED7Code[]={~0x3F,~0x06,~0x5B,~0x4F,~0x66,~0x6D,~0x7D,~0x07,~0x7F,~0x6F,~0x77,~0x7C,~0x39,~0x5E,~0x79,~0x71};

main()

{

unsignedintLedNumVal=1,C;//定义变量

while

(1)

{

if(++C>=300)

{LedNumVal++;//每隔300个扫描周期加一次

C=0;//每隔300个扫描清零

}

//将字模送到P0口显示

P0=LED7Code[LedNumVal%10]&0x7f;//LED70x7f为小数点共阴和共阳此处也是不一样;

delay(150);//调用延时程序

}

}

voiddelay(unsignedinti)

{

charj;

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

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

}

*标题:

试验数码管上显示数字(单片机直接实现位选共阴极)#include

#include

voiddelay(unsignedinti);//函数声名

charDelayCNT;//定义变量

//此表为LED的字模,共阴数码管0-9-

unsignedcharcodeDisp_Tab[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x40};//段码控制

//此表为8个数码管位选控制,共阴数码管1-8个-

unsignedcharcodedispbit[8]={0xfe,0xfd,0xfb,0xf7,0xef,0xdF,0xbF,0x7F};//位选控制查表的方法控制

/************主函数**********************/

main()

{

unsignedinti,LedNumVal=1;//变量定义

unsignedintLedOut[10];//变量定义

DelayCNT=0;

while

(1)

{

if(++DelayCNT>=20)//控制数字变化速度

{

DelayCNT=0;//20个扫描周期清零一次

++LedNumVal;//每隔20个扫描周期加一次

}

LedOut[0]=Disp_Tab[LedNumVal%10000/1000];

LedOut[1]=Disp_Tab[LedNumVal%1000/100]|0x80;

LedOut[2]=Disp_Tab[LedNumVal%100/10];

LedOut[3]=Disp_Tab[LedNumVal%10];

LedOut[4]=Disp_Tab[LedNumVal%10000/1000];//千位

LedOut[5]=Disp_Tab[LedNumVal%1000/100]|0x80;//百位带小数点

LedOut[6]=Disp_Tab[LedNumVal%100/10];//十位

LedOut[7]=Disp_Tab[LedNumVal%10];//个位

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

{

P0=LedOut[i];

P1=dispbit[i];//使用查表法进行位选

/*switch(i)//使用switch语句控制位选

{

case0:

P1=0x7F;break;

case1:

P1=0xbF;break;

case2:

P1=0xdF;break;

case3:

P1=0xeF;break;

case4:

P1=0xf7;break;

case5:

P1=0xfb;break;

case6:

P1=0xfd;break;

case7:

P1=0xfe;break;

}*/

delay(150);//扫描间隔时间太长会数码管会有闪烁感

}

}

}

voiddelay(unsignedinti)

{

charj;

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

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

}

*标题:

试验数码管上显示数字(译码器位选共阴极)*

#include

#include

sbitLS138A=P2^2;//定义138译码器的输入A脚由P2.2控制

sbitLS138B=P2^3;//定义138译码器的输入脚B由P2.3控制

sbitLS138C=P2^4;//定义138译码器的输入脚C由P2.4控制

voiddelay(unsignedinti);//函数声名

charDelayCNT;

//此表为LED的字模,共阴数码管0-9-

unsignedcharcodeDisp_Tab[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x40};

/************主函数**********************/

main()

{

unsignedinti,LedNumVal=1;

unsignedintLedOut[10];

DelayCNT=0;

while

(1)//进入循环状态

{

if(++DelayCNT>=50)

{

DelayCNT=0;//延时计数每扫描一次加一次

++LedNumVal;//每隔50个扫描周期加一次

}

LedOut[0]=Disp_Tab[LedNumVal%10000/1000];

LedOut[1]=Disp_Tab[LedNumVal%1000/100]|0x80;

LedOut[2]=Disp_Tab[LedNumVal%100/10];

LedOut[3]=Disp_Tab[LedNumVal%10];

LedOut[4]=Disp_Tab[LedNumVal%10000/1000];//千位

LedOut[5]=Disp_Tab[LedNumVal%1000/100]|0x80;//百位带小数点

LedOut[6]=Disp_Tab[LedNumVal%100/10];//十位

LedOut[7]=Disp_Tab[LedNumVal%10];//个位

for(i=0;i<9;i++)//实现8位动态扫描循环

{

P0=LedOut[i];//将字模送到P0口显示

switch(i)//使用switch语句控制位选也可以是用查表的方式学员可以试着自己修改

{

case0:

LS138A=0;LS138B=0;LS138C=0;break;

case1:

LS138A=1;LS138B=0;LS138C=0;break;

case2:

LS138A=0;LS138B=1;LS138C=0;break;

case3:

LS138A=1;LS138B=1;LS138C=0;break;

case4:

LS138A=0;LS138B=0;LS138C=1;break;

case5:

LS138A=1;LS138B=0;LS138C=1;break;

case6:

LS138A=0;LS138B=1;LS138C=1;break;

case7:

LS138A=1;LS138B=1;LS138C=1;break;

}

delay(150);

}

}

}

voiddelay(unsignedinti)

{

charj;

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

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

}

*标题:

试验动静LED灯——实现动态控制#include

#include

sbitLED8_1=P1^1;//j14接在P1.1上

voiddelay(unsignedinti);//函数声名

charDelayCNT;

charLED;

main()

{

LED=0x01;

DelayCNT=0;

while

(1)

{

if(++DelayCNT>=10)//点亮动静LED灯速度控制

{

DelayCNT=0;

LED=LED<<1;//左移

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

当前位置:首页 > 初中教育

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

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