51c程序集51单片机基本应用全集Word文档格式.docx

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

51c程序集51单片机基本应用全集Word文档格式.docx

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

51c程序集51单片机基本应用全集Word文档格式.docx

//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灯,造成循环流水点亮的效果

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

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

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

延时子程序

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

//重新赋值

}

2:

P1=0xff;

P1=0xaa;

P1=0x55;

3

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

#include<

#defineuintunsignedint

#defineucharunsignedchar

uchartemp,num,num1;

voiddelay(uintz)

for(x=z;

x>

0;

x--)

for(y=110;

y>

y--);

temp=0xfe;

P1=temp;

delay(100);

temp=_crol_(temp,1);

//重要的51库函数调用

4:

喇叭

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

sbitSPK=P1^5;

//定义喇叭端口

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

/*延时函数声明*/

voiddelay(unsignedintcnt)

/*主函数*/

unsignedinti;

for(i=0;

i<

200;

i++)//喇叭发声的时间循环,改变大小可以改变发声时间长短

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

SPK=!

SPK;

SPK=1;

//喇叭停止工作,间歇的时间,可更改

delay(20000);

5:

音乐播放

修改:

内容:

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<

t;

t1++)

for(t2=0;

t2<

8000;

t2++)

;

TR0=0;

/*定时器中断函数*/

voidt0int()interrupt1

speaker=!

speaker;

TH0=timer0h;

TL0=timer0l;

TR0=1;

/*音乐处理函数*/

voidsong()

delay(time);

voidmain(void)

unsignedchark,i;

TMOD=1;

//置CT0定时工作方式1

EA=1;

ET0=1;

//IE=0x82//CPU开中断,CT0开中断

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:

步进电机的简单应用

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

voiddelayus(uintus)

uinti,j;

for(j=0;

j<

us;

j++)

12;

i++);

{

uchari;

8;

i++)

{P1=ffw[i];

delayus(10);

}

7:

独立按键控制继电器

sbitjdq=P1^0;

sbitkey1=P3^0;

sbitkey2=P3^1;

voiddelay(unsignedinta)

while(a--);

jdq=0;

if(key1==0)

{jdq=1;

//delay(5000);

if(key2==0)

{jdq=0;

8:

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

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

//显示段码值01234567

unsignedcharcodeseg[]={0,1,2,3,4,5,6,7};

//分别对应相应的数码管点亮,即位码

sbitkey3=P3^2;

sbitkey4=P3^3;

unsignedchari;

P3=0XFF;

P0=0X06;

P2=0;

P0=0X5b;

P2=1;

P0=0X4f;

P2=2;

P0=0X66;

P2=3;

P0=0X6d;

P2=4;

P0=0X7d;

P2=5;

P0=0X07;

P2=6;

P0=0X7f;

P2=7;

break;

P0=EL[0];

P0=EL[1];

if(key3==0)

P0=EL[2];

if(key4==0)

P0=EL[3];

9:

矩阵键盘实验程序

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

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

0x77,0x7c,0x39,0x5e,0x79,0x71};

//0-F

函数声明

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

ucharkeyscan(void);

//键盘扫描

voiddelay(uinti);

//演示程序

ucharkey;

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

P0=0X00;

key=keyscan();

//调用键盘扫描,

switch(key)

case0xee:

P0=EL[0];

break;

//0按下相应的键显示相对应的码值

case0xde:

P0=EL[1];

//1按下相应的键显示相对应的码值

case0xbe:

P0=EL[2];

//2

case0x7e:

P0=EL[3];

//3

case0xed:

P0=EL[4];

//4

case0xdd:

P0=EL[5];

//5

case0xbd:

P0=EL[6];

//6

case0x7d:

P0=EL[7];

//7

case0xeb:

P0=EL[8];

//8

case0xdb:

P0=EL[9];

//9

case0xbb:

P0=EL[10];

//a

case0x7b:

P0=EL[11];

//b

case0xe7:

P0=EL[12];

//c

case0xd7:

P0=EL[13];

//d

case0xb7:

P0=EL[14];

//e

case0x77:

P0=EL[15];

//f

键盘扫描程序

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

ucharcord_h,cord_l;

//行列值中间变量

P3=0x0f;

//行线输出全为0

cord_h=P3&

0x0f;

//读入列线值

if(cord_h!

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

//去抖

=0x0f)

cord_h=P3&

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的简单应用*/

sbitspeaker=P0^0;

//开总中断

//EX0=1;

//开外部中断0

//IT0=1;

EX0=1;

TCON=0x01;

//跳变出发设置

//EX1=1;

TCON=0x05;

voidexter1()interrupt1

uinti;

2000;

speaker=0;

speaker=1;

}

(2)

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

#inc

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

当前位置:首页 > 自然科学 > 天文地理

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

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