51单片机实例分享Word文档格式.docx
《51单片机实例分享Word文档格式.docx》由会员分享,可在线阅读,更多相关《51单片机实例分享Word文档格式.docx(23页珍藏版)》请在冰豆网上搜索。
花样表格
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亮
P0>
>
P0|=0x01;
P0|=0x80;
//下面通过查表方法获得花样参数
16;
i++)//查表可以简单的显示各种花样实用性更强
P0=seg[i];
}
延时函数,含有输入参数unsignedintt,无返回值
unsignedint是定义无符号整形变量,其值的范围是
0~65535
voidDelay(unsignedintt)
while(--t);
4、数码管滚动显示HELLO
#include<
//51芯片管脚定义头文件
intrins.h>
//内部包含延时函数_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、蜂鸣器发声
sbitSPK=P3^5;
//定义喇叭端口
函数声明
voidDelayUs2x(unsignedchart);
//函数声明
voidDelayMs(unsignedchart);
DelayMs
(1);
//发出大约500Hz的方波频率越大声音越尖,如果只需它发声,则只需SPK=0;
即可
SPK=!
SPK;
uS延时函数,含有输入参数unsignedchart,无返回值
unsignedchar是定义无符号字符变量,其值的范围是
0~255这里使用晶振12M,精确延时请使用汇编,大致延时
长度如下T=tx2+5uS
voidDelayUs2x(unsignedchart)
while(--t);
mS延时函数,含有输入参数unsignedchart,无返回值
0~255这里使用晶振12M,精确延时请使用汇编
voidDelayMs(unsignedchart)
while(t--)
//大致延时1mS
DelayUs2x(245);
6、矩阵键盘
#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数码管亮按相应的按键,会显示按键上的字符
key=keyscan();
//调用键盘扫描,
switch(key)
case0xee:
P0=display[0];
break;
//0按下相应的键显示相对应的码值
case0xde:
P0=display[1];
//1
case0xbe:
P0=display[2];
//2
case0x7e:
P0=display[3];
//3
case0xed:
P0=display[4];
//4
case0xdd:
P0=display[5];
//5
case0xbd:
P0=display[6];
//6
case0x7d:
P0=display[7];
//7
case0xeb:
P0=display[8];
//8
case0xdb:
P0=display[9];
//9
case0xbb:
P0=display[10];
//a
case0x7b:
P0=display[11];
//b
case0xe7:
P0=display[12];
//c
case0xd7:
P0=display[13];
//d
case0xb7:
P0=display[14];
//e
case0x77:
P0=display[15];
//f
键盘扫描程序
ucharkeyscan(void)//键盘扫描函数,使用行列反转扫描法
ucharcord_h,cord_l;
//行列值中间变量
P2=0x0f;
//行线输出全为0
cord_h=P2&
0x0f;
//读入列线值
if(cord_h!
=0x0f)//先检测有无按键按下
delay(100);
//去抖
=0x0f)
P2=cord_h|0xf0;
//输出当前列线值
cord_l=P2&
0xf0;
//读入行线值
return(cord_h+cord_l);
//键盘最后组合码值
Speak();
return(0xff);
//返回该值
延时程序
voiddelay(uinti)//延时函数
while(i--);
7、串口通信
AT89X51.h>
ucharidatatrdata[]={'
1'
'
2'
3'
4'
5'
6'
7'
8'
0x0d,0x0a,0x00};
ucharidatatrdata1[]={'
Y'
Z'
0'
/*主程序*/
/******************************************/
uchari;
uintj;
SCON=0x40;
//串口方式1
PCON=0;
//SMOD=0
REN=1;
//允许接收
TMOD=0x20;
//定时器1定时方式2
TH1=0xf3;
//12MHz2400波特率
TL1=0xf3;
TR1=1;
//启动定时器
i=0;
while(trdata[i]!
=0x00)
SBUF=trdata[i];
while(TI==0);
TI=0;
i++;
for(j=0;
50000;
j++);
while(trdata1[i]!
SBUF=trdata1[i];
8、LCD1602液晶显示
reg51.h>
sbitRS=P2^0;
sbitRW=P2^1;
sbitE=P2^2;
voidinit();
voidwrite_com(uint);
voidwrite_dat(uint);
voiddelay(uintz);
uintnum;
chartable[]="
yanyanzhong"
;
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;
E=0;
voidwrite_dat(uintb)//写数据
RS=1;
P0=b;
voiddelay(uintz)
uintx,y;
for(x=z;
x>
x--)
for(y=115;
y>
y--);
9、LCD12864显示汉字
sbitPSB=P2^3;
ucharcodetable[]={"
^_^温度湿度加速度^_^"
};
voidread();
voidwrite(uchar,bit);
voidwritestring(uchar,uchar,uchar*p);
writestring(0,0,table);
writestring(3,3,"
小豆豆儿"
);
while
(1);
voidread()//读忙函数
uchari=255;
P0=0xff;
RW=1;
while((i--)&
&
(P0&
0x80));
//检测数据口高位,0为空闲
voidwrite(uchardat,bitcommand)//写函数
read();
P0=dat;
RS=command;
_nop_();
voidinit()//初始化
PSB=1;
//串并口选择,选并口
write(0x38,0);
//8位点阵显示
write(0x01,0);
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测温度
sbitDS=P3^4;
sbitledlk=P1^0;
sbitsmglk=P1^1;
sbitsmgbitlk=P1^2;
uinttemp;
voiddelay(uintms)
uinti,j;
ms;
j++)
for(i=0;
120;
i++);
voiddelayus(uintus)
us;
12;
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;
bittmpreadbit(void)
uinti;
bitdat;
dat=DS;
delayus
(1);
return(dat);
uchartmpread(void)
uchari,j,dat;
dat=0;
for(i=1;
=8;
j=tmpreadbit();
dat=(j<
7)|(dat>
return(dat);
voidtmpwritebyte(uchardat)
ucharj;