51单片机实例.docx

上传人:b****6 文档编号:8938208 上传时间:2023-02-02 格式:DOCX 页数:23 大小:18.84KB
下载 相关 举报
51单片机实例.docx_第1页
第1页 / 共23页
51单片机实例.docx_第2页
第2页 / 共23页
51单片机实例.docx_第3页
第3页 / 共23页
51单片机实例.docx_第4页
第4页 / 共23页
51单片机实例.docx_第5页
第5页 / 共23页
点击查看更多>>
下载资源
资源描述

51单片机实例.docx

《51单片机实例.docx》由会员分享,可在线阅读,更多相关《51单片机实例.docx(23页珍藏版)》请在冰豆网上搜索。

51单片机实例.docx

51单片机实例

1、点亮一个LED

#include//包含头文件,一般情况不需要改动,

//头文件包含特殊功能寄存器的定义

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

主函数

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

voidmain(void)

{

//此方法使用1个字节对单个端口赋值

P0=0xfe;//P0口的最低位点亮,可以更改数值是其他的灯点亮

//0xAA是16进制,0x开头表示16进制数,

//AA换算成二进制是10101010

while

(1);//主循环

}

2、点亮多个LED

#include//包含头文件,一般情况不需要改动,

//头文件包含特殊功能寄存器的定义

sbitLED0=P0^0;//用sbit关键字定义LED到P0.0端口,

sbitLED1=P0^1;//LED是自己任意定义且容易记忆的符号

sbitLED2=P0^2;

sbitLED3=P0^3;

sbitLED4=P0^4;

sbitLED5=P0^5;

sbitLED6=P0^6;

sbitLED7=P0^7;

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

主函数

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

voidmain(void)

{

//此方法使用bit位对单个端口赋值

LED0=0;//将P0.0口赋值0,对外输出低电平

LED1=1;

LED2=0;

LED3=1;

LED4=0;

LED5=1;

LED6=0;

LED7=1;

while

(1);//主循环

}

3、花样灯

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

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

花样表格

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

unsignedcharcodeseg[]={0x7f,0xbf,0xdf,0xef,

0xf7,0xfb,0xfd,0xfe,

0xff,0xff,0x00,0x00,

0x55,0x55,0xaa,0xaa

};//rom允许情况可以无限添加

voidDelay(unsignedintt);//函数声明

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

主函数

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

main()

{

unsignedchari;//定义一个无符号字符型

//局部变量i取值范围0~255

while

(1)

{

P0=0xFE;//第1个LED亮

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

{

Delay(20000);

P0<<=1;

}

P0=0x7F;//第8个LED亮

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

{

Delay(20000);

P0>>=1;

}

P0=0xFE;//第1个LED亮

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

{

Delay(20000);

P0<<=1;

P0|=0x01;

}

P0=0x7F;//第8个LED亮

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

{

Delay(20000);

P0>>=1;

P0|=0x80;

}

//下面通过查表方法获得花样参数

for(i=0;i<16;i++)//查表可以简单的显示各种花样实用性更强

{

Delay(20000);

P0=seg[i];

}

}

}

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

延时函数,含有输入参数unsignedintt,无返回值

unsignedint是定义无符号整形变量,其值的范围是

0~65535

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

voidDelay(unsignedintt)

{

while(--t);

}

4、数码管滚动显示HELLO

#include//51芯片管脚定义头文件

#include//内部包含延时函数_nop_();

#defineucharunsignedchar

#defineuintunsignedint

uchardisplay[]={0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,

0xBF,0xBF,0x89,0x86,0xC7,0xC7,0xC0,0xBF,0xBF,

//--HELLO-

0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff};

ucharshift,j=0;

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

/*延时子程序*/

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

voiddelayms(uintms)

{

uchart;

while(ms--)

{

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

}

}

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

/*显示函数*/

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

voiddisp(void)

{

uchari;

shift=0x01;

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

{

P0=display[i+j];

P1=shift;

shift=(shift<<1);

delayms

(1);

}

P1=0x00;

}

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

/*函数*/

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

voidmain()

{

uchark;

P0=0xff;

P1=0xff;

while

(1)

{

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

{

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

disp();

}

}

}

5、蜂鸣器发声

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

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

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

函数声明

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

voidDelayUs2x(unsignedchart);//函数声明

voidDelayMs(unsignedchart);

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

主函数

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

main()

{

while

(1)

{

DelayMs

(1);//发出大约500Hz的方波频率越大声音越尖,如果只需它发声,则只需SPK=0;即可

SPK=!

SPK;

}

}

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

uS延时函数,含有输入参数unsignedchart,无返回值

unsignedchar是定义无符号字符变量,其值的范围是

0~255这里使用晶振12M,精确延时请使用汇编,大致延时

长度如下T=tx2+5uS

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

voidDelayUs2x(unsignedchart)

{

while(--t);

}

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

mS延时函数,含有输入参数unsignedchart,无返回值

unsignedchar是定义无符号字符变量,其值的范围是

0~255这里使用晶振12M,精确延时请使用汇编

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

voidDelayMs(unsignedchart)

{

while(t--)

{

//大致延时1mS

DelayUs2x(245);

DelayUs2x(245);

}

}

6、矩阵键盘

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

#defineucharunsignedchar

#defineuintunsignedint

sbitbeep=P3^5;

unsignedcharconstdisplay[]={0xc0,0xf9,0xa4,0xb0,

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

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

0xa7,0xa1,0x86,0x8e};//0-F

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

函数声明

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

ucharkeyscan(void);//键盘扫描

voiddelay(uinti);//延时

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

/*蜂鸣器发音子程序*/

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

voidSpeak(void)

{

beep=!

beep;

delay(1000);

beep=1;

}

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

主函数

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

voidmain()

{

ucharkey;

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

beep=1;

while

(1)

{

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

switch(key)

{

case0xee:

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

case0xde:

P0=display[1];break;//1

case0xbe:

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

case0x7e:

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

case0xed:

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

case0xdd:

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

case0xbd:

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

case0x7d:

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

case0xeb:

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

case0xdb:

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

case0xbb:

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

case0x7b:

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

case0xe7:

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

case0xd7:

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

case0xb7:

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

case0x77:

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

}

}

}

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

键盘扫描程序

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

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

{

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

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

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

if(cord_h!

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

{

delay(100);//去抖

if(cord_h!

=0x0f)

{

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

P2=cord_h|0xf0;//输出当前列线值

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

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

Speak();

}

}

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

}

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

延时程序

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

voiddelay(uinti)//延时函数

{

while(i--);

}

7、串口通信

#include

#defineucharunsignedchar

#defineuintunsignedint

ucharidatatrdata[]={'1','2','3','4','5','6','7','8',0x0d,0x0a,0x00};

ucharidatatrdata1[]={'Y','Z','2','0','0',0x0d,0x0a,0x00};

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

/*主程序*/

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

main()

{

uchari;

uintj;

SCON=0x40;//串口方式1

PCON=0;//SMOD=0

REN=1;//允许接收

TMOD=0x20;//定时器1定时方式2

TH1=0xf3;//12MHz2400波特率

TL1=0xf3;

TR1=1;//启动定时器

while

(1)

{

i=0;

while(trdata[i]!

=0x00)

{

SBUF=trdata[i];

while(TI==0);

TI=0;

i++;

}

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

i=0;

while(trdata1[i]!

=0x00)

{

SBUF=trdata1[i];

while(TI==0);

TI=0;

i++;

}

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

}

}

8、LCD1602液晶显示

#include

#defineuintunsignedint

sbitRS=P2^0;

sbitRW=P2^1;

sbitE=P2^2;

voidinit();

voidwrite_com(uint);

voidwrite_dat(uint);

voiddelay(uintz);

uintnum;

chartable[]="yanyanzhong";

voidmain()

{

init();

for(num=0;num<13;num++)

{

write_dat(table[num]);

//delay(500);

}

while

(1);

}

voidinit()//初始化

{

write_com(0x38);//显示设置

write_com(0x0c);//光标不闪烁

write_com(0x06);//写入字符光标右移

write_com(0x01);//清屏

write_com(0x80);//设置数据指针

}

voidwrite_com(uinta)//写指令

{

RS=0;

RW=0;

P0=a;

delay(5);

E=1;

delay(5);

E=0;

}

voidwrite_dat(uintb)//写数据

{

RS=1;

RW=0;

P0=b;

delay(5);

E=1;

delay(5);

E=0;

}

voiddelay(uintz)

{

uintx,y;

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

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

}

9、LCD12864显示汉字

#include

#include

#defineuintunsignedint

#defineucharunsignedchar

sbitRS=P2^0;

sbitRW=P2^1;

sbitE=P2^2;

sbitPSB=P2^3;

ucharcodetable[]={"^_^温度湿度加速度^_^"};

voidread();

voidwrite(uchar,bit);

voidwritestring(uchar,uchar,uchar*p);

voidinit();

voidmain()

{

init();

writestring(0,0,table);

writestring(3,3,"小豆豆儿");

while

(1);

}

voidread()//读忙函数

{

uchari=255;

P0=0xff;

RS=0;

RW=1;

E=1;

while((i--)&&(P0&0x80));//检测数据口高位,0为空闲

E=0;

}

voidwrite(uchardat,bitcommand)//写函数

{

read();

P0=dat;

RS=command;

RW=0;

E=1;

_nop_();

E=0;

}

voidinit()//初始化

{

PSB=1;//串并口选择,选并口

write(0x38,0);//8位点阵显示

_nop_();

_nop_();

write(0x01,0);

_nop_();

write(0x0c,0);//开显示关光标

}

voidwritestring(ucharx,uchary,uchar*p)//写字符串

{

if(x==1)

x=2;

elseif(x==2)

x=1;

write(0x80+8*x+y,0);

while(*p)

{

write(*p,1);

p++;

}

}

10、DS18B20测温度

#include

#defineucharunsignedchar

#defineuintunsignedint

sbitDS=P3^4;

sbitledlk=P1^0;

sbitsmglk=P1^1;

sbitsmgbitlk=P1^2;

uinttemp;

voiddelay(uintms)

{

uinti,j;

for(j=0;j

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

}

voiddelayus(uintus)

{

uinti,j;

for(j=0;j

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

}

voidshowsmg(ucharsmg,ucharvalue)

{

ucharcodetablesmg[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf};

ucharcodetable[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0x00,0x80};

smglk=1;

P2=tablesmg[smg];

smglk=0;

smgbitlk=1;

P2=table[value];

smgbitlk=0;

delay(3);

}

voiddsreset(void)

{

DS=0;

delayus(10);

DS=1;

delayus(10);

}

bittmpreadbit(void)

{

uinti;

bitdat;

DS=0;

DS=1;

dat=DS;

delayus

(1);

return(dat);

}

uchartmpread(void)

{

uchari,j,dat;

dat=0;

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

{

j=tmpreadbit();

dat=(j<<7)|(dat>>1);

}

return(dat);

}

voidtmpwritebyte(uchardat)

{

uinti;

ucharj;

bittestb;

for(j=1;j<=8;j++)

{

te

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

当前位置:首页 > 高等教育 > 农学

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

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