51c程序集51单片机基本应用全集.docx

上传人:b****6 文档编号:4684973 上传时间:2022-12-07 格式:DOCX 页数:55 大小:24.62KB
下载 相关 举报
51c程序集51单片机基本应用全集.docx_第1页
第1页 / 共55页
51c程序集51单片机基本应用全集.docx_第2页
第2页 / 共55页
51c程序集51单片机基本应用全集.docx_第3页
第3页 / 共55页
51c程序集51单片机基本应用全集.docx_第4页
第4页 / 共55页
51c程序集51单片机基本应用全集.docx_第5页
第5页 / 共55页
点击查看更多>>
下载资源
资源描述

51c程序集51单片机基本应用全集.docx

《51c程序集51单片机基本应用全集.docx》由会员分享,可在线阅读,更多相关《51c程序集51单片机基本应用全集.docx(55页珍藏版)》请在冰豆网上搜索。

51c程序集51单片机基本应用全集.docx

51c程序集51单片机基本应用全集

51——单片机程序

延时函数

晶振频率12MHZ

#include

#include

#defineuintunsignedint

#defineucharunsignedchar

Voiddelay()

{;;}//15us

voiddelay(uintn)

{

while(n--);

}

voiddelay_nms(uintn)

{

uintx,y;

for(x=0;x

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

}

voidmain()

{

_nop_();//1us

delay

(1);//25us

delay

(2);//34us

delay(3);//43us

delay(5);//61us

delay(10);//106us

delay(50);//466us

delay(100);//916us

Delay(1000);//9019us

delay_nms

(1);//,991us

delay_nms(10);//9,675us

delay_nms(100);//97,515us

while

(1);

}

1:

/*-----------------------------------------------

名称:

流水灯

内容:

循环点亮P1口对应的8个LED灯,造成循环流水点亮的效果

------------------------------------------------*/

#include//包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义

#defineucharunsignedchar

#defineuintunsignedint

/*------------------------------------------------

延时子程序

------------------------------------------------*/

voiddelay(uintcnt)

{

while(--cnt);

}

/*------------------------------------------------

主函数

------------------------------------------------*/

main()

{

P1=0xfe;//给初始化值换算成二进制是11111110

while

(1)

{

delay(58000);//延时程序

P1<<=1;//左移一位该语句等效于P1=P1<<1

P1|=0x01;//最后一位补1,该语句等效于P1=P1|0x01符号"|"表示"或"

if(P1==0x7f)//检测是否移到最左端?

"=="表示检测符号2端的值是否相等

{

delay(58000);

P1=0xfe;//重新赋值

}

}

}

2:

#include//包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义

#defineucharunsignedchar

#defineuintunsignedint

/*------------------------------------------------

延时子程序

------------------------------------------------*/

voiddelay(uintcnt)

{

while(--cnt);

}

/*------------------------------------------------

主函数

------------------------------------------------*/

main()

{

P1=0xff;//给初始化值换算成二进制是11111110

while

(1)

{

delay(58000);

P1=0xaa;

delay(58000);

P1=0x55;

}

}

3

/*调用位移函数的流水灯程序*/

#include

#include

#defineuintunsignedint

#defineucharunsignedchar

uchartemp,num,num1;

voiddelay(uintz)

{

uintx,y;

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

for(y=110;y>0;y--);

}

voidmain()

{

temp=0xfe;

while

(1)

{

P1=temp;

delay(100);

temp=_crol_(temp,1);//重要的51库函数调用

delay(100);

}

}

4:

/*-----------------------------------------------

名称:

喇叭

内容:

一般现象可以看到P1口LED闪烁,需要将该口通过杜邦线连接到喇叭信号输入端子,可以参考电路图或者说明书

------------------------------------------------*/

#include//包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义

sbitSPK=P1^5;//定义喇叭端口

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

/*延时函数声明*/

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

voiddelay(unsignedintcnt)

{

while(--cnt);

}

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

/*主函数*/

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

main()

{

unsignedinti;

while

(1)

{

for(i=0;i<200;i++)//喇叭发声的时间循环,改变大小可以改变发声时间长短

{

delay(50);//参数决定发声的频率,估算值,可以自行更改参数并

SPK=!

SPK;

}

SPK=1;//喇叭停止工作,间歇的时间,可更改

delay(20000);

}

}

5:

/*-----------------------------------------------

名称:

音乐播放

修改:

内容:

------------------------------------------------*/

#include//包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义

sbitspeaker=P1^5;//定义音乐输出端口,需要连接到对应的喇叭,请参考电路图

unsignedchartimer0h,timer0l,time;

//世上只有妈妈好数据表

codeunsignedcharsszymmh[]={6,2,3,5,2,1,3,2,2,5,2,2,1,3,2,6,2,1,5,2,1,

6,2,4,3,2,2,5,2,1,6,2,1,5,2,2,3,2,2,1,2,1,

6,1,1,5,2,1,3,2,1,2,2,4,2,2,3,3,2,1,5,2,2,

5,2,1,6,2,1,3,2,2,2,2,2,1,2,4,5,2,3,3,2,1,

2,2,1,1,2,1,6,1,1,1,2,1,5,1,6,0,0,0

};

//音阶频率表高八位

codeunsignedcharFREQH[]={

0xF2,0xF3,0xF5,0xF5,0xF6,0xF7,0xF8,

0xF9,0xF9,0xFA,0xFA,0xFB,0xFB,0xFC,0xFC,//1,2,3,4,5,6,7,8,i

0xFC,0xFD,0xFD,0xFD,0xFD,0xFE,

0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFF,

};

//音阶频率表低八位

codeunsignedcharFREQL[]={

0x42,0xC1,0x17,0xB6,0xD0,0xD1,0xB6,

0x21,0xE1,0x8C,0xD8,0x68,0xE9,0x5B,0x8F,//1,2,3,4,5,6,7,8,i

0xEE,0x44,0x6B,0xB4,0xF4,0x2D,

0x47,0x77,0xA2,0xB6,0xDA,0xFA,0x16,

};

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

/*延时函数*/

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

voiddelay(unsignedchart)

{

unsignedchart1;

unsignedlongt2;

for(t1=0;t1

{

for(t2=0;t2<8000;t2++)

{

;

}

}

TR0=0;

}

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

/*定时器中断函数*/

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

voidt0int()interrupt1

{

TR0=0;

speaker=!

speaker;

TH0=timer0h;

TL0=timer0l;

TR0=1;

}

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

/*音乐处理函数*/

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

voidsong()

{

TH0=timer0h;

TL0=timer0l;

TR0=1;

delay(time);

}

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

/*主函数*/

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

voidmain(void)

{

unsignedchark,i;

TMOD=1;//置CT0定时工作方式1

EA=1;

ET0=1;//IE=0x82//CPU开中断,CT0开中断

while

(1)

{

i=0;

while(i<100){//音乐数组长度,唱完从头再来

k=sszymmh[i]+7*sszymmh[i+1]-1;

timer0h=FREQH[k];

timer0l=FREQL[k];

time=sszymmh[i+2];

i=i+3;

song();

}

}

}

6:

步进电机的简单应用

#include

#defineuintunsignedint

#defineucharunsignedchar

ucharcodeffw[]={0xf1,0xf3,0xf2,0xf6,0xf4,0xfc,0xf8,0xf9};

voiddelayus(uintus)

{

uinti,j;

for(j=0;j

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

}

voidmain()

{

uchari;

while

(1)

{

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

{P1=ffw[i];

delayus(10);

}

}

}

7:

独立按键控制继电器

#include

sbitjdq=P1^0;

sbitkey1=P3^0;

sbitkey2=P3^1;

voiddelay(unsignedinta)

{

while(a--);

}

voidmain()

{

jdq=0;

while

(1)

{

if(key1==0)

{jdq=1;

//delay(5000);

}

if(key2==0)

{jdq=0;

//delay(5000);

}

}

}

8:

数码管的静动显示及简单独立按键的使用

#include//包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义

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

//显示段码值01234567

unsignedcharcodeseg[]={0,1,2,3,4,5,6,7};//分别对应相应的数码管点亮,即位码

sbitkey1=P3^0;

sbitkey2=P3^1;

sbitkey3=P3^2;

sbitkey4=P3^3;

/*------------------------------------------------

延时子程序

------------------------------------------------*/

voiddelay(unsignedintcnt)

{

while(--cnt);

}

voidmain()

{

unsignedchari;

i=0;

P3=0XFF;

while

(1)

{

P0=0X06;

P2=0;

delay(100);

P0=0X5b;

P2=1;

delay(100);

P0=0X4f;

P2=2;

delay(100);

P0=0X66;

P2=3;

delay(100);

P0=0X6d;

P2=4;

delay(100);

P0=0X7d;

P2=5;

delay(100);

P0=0X07;

P2=6;

delay(100);

P0=0X7f;

P2=7;

delay(100);

if(key1==0)

break;

}

while

(1)

{

if(key1==0)

delay(100);

if(key1==0)

{

P0=EL[0];

P2=0;

}

if(key2==0)

delay(100);

if(key2==0)

{

P0=EL[1];

P2=0;

}

if(key3==0)

delay(100);

if(key3==0)

{

P0=EL[2];

P2=0;

}

if(key4==0)

delay(100);

if(key4==0)

{

P0=EL[3];

P2=0;

}

}

}

9:

/*-----------------------------------------------

矩阵键盘实验程序

通过反转法循环扫描矩阵键盘,并通过数码管显示数据

------------------------------------------------*/

#include//包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义

#defineucharunsignedchar

#defineuintunsignedint

unsignedcharconstEL[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,

0x77,0x7c,0x39,0x5e,0x79,0x71};//0-F

/*------------------------------------------------

函数声明

------------------------------------------------*/

ucharkeyscan(void);//键盘扫描

voiddelay(uinti);//演示程序

/*------------------------------------------------

主函数

------------------------------------------------*/

voidmain()

{

ucharkey;

P2=0;//1数码管亮按相应的按键,会显示按键上的字符

P0=0X00;

while

(1)

{

key=keyscan();//调用键盘扫描,

switch(key)

{

case0xee:

P0=EL[0];break;//0按下相应的键显示相对应的码值

case0xde:

P0=EL[1];break;//1按下相应的键显示相对应的码值

case0xbe:

P0=EL[2];break;//2

case0x7e:

P0=EL[3];break;//3

case0xed:

P0=EL[4];break;//4

case0xdd:

P0=EL[5];break;//5

case0xbd:

P0=EL[6];break;//6

case0x7d:

P0=EL[7];break;//7

case0xeb:

P0=EL[8];break;//8

case0xdb:

P0=EL[9];break;//9

case0xbb:

P0=EL[10];break;//a

case0x7b:

P0=EL[11];break;//b

case0xe7:

P0=EL[12];break;//c

case0xd7:

P0=EL[13];break;//d

case0xb7:

P0=EL[14];break;//e

case0x77:

P0=EL[15];break;//f

}

}

}

/*------------------------------------------------

键盘扫描程序

------------------------------------------------*/

ucharkeyscan(void)//键盘扫描函数,使用行列反转扫描法

{

ucharcord_h,cord_l;//行列值中间变量

P3=0x0f;//行线输出全为0

cord_h=P3&0x0f;//读入列线值

if(cord_h!

=0x0f)//先检测有无按键按下

{

delay(100);//去抖

if(cord_h!

=0x0f)

{

cord_h=P3&0x0f;//读入列线值

P3=cord_h|0xf0;//输出当前列线值//当时还是按住的实际P3=11101110。

结合实际按键

cord_l=P3&0xf0;//读入行线值

return(cord_h+cord_l);//键盘最后组合码值

}

}return(0xff);//返回该值

}

/*------------------------------------------------

延时程序

------------------------------------------------*/

voiddelay(uinti)//延时函数

{

while(i--);

}

10:

(1)/*外部中断0/1的简单应用*/

#include//包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义

sbitspeaker=P0^0;

#defineucharunsignedchar

#defineuintunsignedint

/*------------------------------------------------

延时子程序

------------------------------------------------*/

voiddelay(uintcnt)

{

while(--cnt);

}

/*------------------------------------------------

主函数

------------------------------------------------*/

main()

{

EA=1;//开总中断

//EX0=1;//开外部中断0

//IT0=1;

EX0=1;

TCON=0x01;//跳变出发设置

//EX1=1;TCON=0x05;

P1=0xfe;//给初始化值换算成二进制是11111110

while

(1)

{

delay(58000);//延时程序

P1<<=1;//左移一位该语句等效于P1=P1<<1

P1|=0x01;//最后一位补1,该语句等效于P1=P1|0x01符号"|"表示"或"

if(P1==0x7f)//检测是否移到最左端?

"=="表示检测符号2端的值是否相等

{

delay(58000);

P1=0xfe;//重新赋值

}

}

}

voidexter1()interrupt1

{

uinti;

while

(1)

{

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

{

speaker=0;

delay(20000);

speaker=1;

delay(20000);

}

}

}

(2)

外部中断0的简单配置应用

#inc

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

当前位置:首页 > 工程科技 > 纺织轻工业

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

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