51单片机入门程序.docx

上传人:b****7 文档编号:25688867 上传时间:2023-06-11 格式:DOCX 页数:39 大小:21.40KB
下载 相关 举报
51单片机入门程序.docx_第1页
第1页 / 共39页
51单片机入门程序.docx_第2页
第2页 / 共39页
51单片机入门程序.docx_第3页
第3页 / 共39页
51单片机入门程序.docx_第4页
第4页 / 共39页
51单片机入门程序.docx_第5页
第5页 / 共39页
点击查看更多>>
下载资源
资源描述

51单片机入门程序.docx

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

51单片机入门程序.docx

51单片机入门程序

1点亮LED灯

#include"reg52.h"

sbitled1=P1^0;

voidmain(void)

{

while

(1)

{

led1=0;

}

}

2延时函数

#include"reg52.h"

sbitled1=P1^0;

voiddelay_ms(intz)

{

inta;

for(;z>0;z--)

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

}

voidmain(void)

{

while

(1)

{

led1=0;

delay_ms(500);

led1=1;

delay_ms(500);

}

}

3按键控制LED灯

#include"reg52.h"

sbitled1=P1^0;

voiddelay_ms(intz)

{

inta;

for(;z>0;z--)

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

}

voidmain(void)

{

while

(1)

{

led1=0;

delay_ms(500);

led1=1;

delay_ms(500);

}

}

4PWM控制LED灯

#include"reg52.h"

sbitled1=P1^0;

sbitled2=P1^7;

voiddelay_us(inta)

{

for(;a>0;a--);

}

voidmain()

{intp=0,l=300;

led2=0;

while

(1)

{

led1=0;

delay_us(p);

led1=1;

delay_us(l);

p++;

if(p==300)

{

p=300;

}

l--;

if(l<0)

{

l=0;

}

//delay_us(300);

}

}

5库函数流水灯

#include"reg52.h"

#include"intrins.h"

voiddelay_ms(intz)

{

inta;

for(;z>0;z--)

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

}

voidmain(void)

{

unsignedchara,s;

while

(1)

{

a=0x7f;

for(s=0;s<8;s++)//循环8次

{P1=a;

delay_ms(100);//延时一下每个灯亮300ms

a=_cror_(a,1);

}

a=0xfe;

for(s=0;s<8;s++)//循环8次

{P1=a;

delay_ms(100);//延时一下每个灯亮300ms

a=_crol_(a,1);

}

}

}

6流水灯左右移动

#include"reg52.h"

voiddelay_ms(intd)//延时函数原理就是让单片机不停地作加减法运算

{

intv;

for(;d>0;d--)

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

}

voidmain()

{

inta;

while

(1)

{

for(a=0;a<8;a++)//循环8次

{

P1=~(0x01<

delay_ms(300);//延时一下每个灯亮300ms

}

for(a=0;a<8;a++)//循环8次

{

P1=~(0x80>>a);//依次点亮led

delay_ms(300);//延时一下每个灯亮300ms

}

}

}

7外部中断

#include"reg52.h"

sbitled1=P1^0;

voiddelay_ms(intz)

{

inta;

for(;z>0;z--)

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

}

voidmain(void)

{EA=1;//打开总中断

EX0=1;//打开中断0

IT0=0;//触发方式=1高电平触发=0低电平触发

EX1=1;//打开中断1

IT1=0;//

while

(1)

{

led1=0;

delay_ms(200);

led1=1;

delay_ms(200);

}

}

voidint0()interrupt0

{

led1=0;

}

voidint1()interrupt2

{

led1=0;

delay_ms(500);

led1=1;

delay_ms(500);

}

8单个数码管

#include"reg52.h"

sbitw1=P2^4;

sbitw2=P2^5;

sbitw3=P2^6;

sbitw4=P2^7;

unsignedcharsmg[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};//0-9数组

voiddelay_ms(intz)//延时函数

{

inta;

for(;z>0;z--)

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

}

/*

主函数

*/

voidmain(void)

{

w1=0;//打开第一位数码管控制正极的三极管

while

(1)

{

P0=smg[];//显示下标为k的数

scankey();//扫描按键状态

}

}

9两位数码管

#include"reg52.h"

sbitw1=P2^4;

sbitw2=P2^5;

unsignedcharsmg[]={

0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90

};//0-9数组291625334

voiddelay_ms(intz)//延时函数

{

inta;

for(;z>0;z--)

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

}

/*

主函数

*/

voidmain(void)

{ints=39;

while

(1)

{

w1=0;//打开第一位数码管的正极

P0=smg[s/10];//送入要显示的数据到数码管

delay_ms

(2);//延时一会

P0=0xff;//

w1=1;//第一位数码管的正极也就失去了正极

w2=0;//打开第二位数码管的正极

P0=smg[s%10];//送入要显示的数据到数码管

delay_ms

(2);//延时一会

P0=0xff;

w2=1;

}

}

10按键控制四位数码管

#include"reg52.h"

sbitw1=P2^4;

sbitw2=P2^5;

sbitw3=P2^6;

sbitw4=P2^7;

sbitk1=P3^2;

sbitk2=P3^3;

unsignedcharsmg[]={

0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90

};//0-9数组291625334

intk=0;

voiddelay_ms(intz)//延时函数

{

inta;

for(;z>0;z--)

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

}

voiddisplay(unsignedints)

{

w1=0;//打开第一位数码管的正极

P0=smg[s/1000];//送入要显示的数据到数码管

delay_ms

(2);//延时一会

P0=0xff;//

w1=1;//第一位数码管的正极也就失去了正极

w2=0;//打开第二位数码管的正极

P0=smg[s%1000/100];//送入要显示的数据到数码管

delay_ms

(2);//延时一会

P0=0xff;

w2=1;

w3=0;//打开第一位数码管的正极

P0=smg[s%1000%100/10];//送入要显示的数据到数码管

delay_ms

(2);//延时一会

P0=0xff;//

w3=1;//第一位数码管的正极也就失去了正极

w4=0;//打开第二位数码管的正极

P0=smg[s%1000%100%10];//送入要显示的数据到数码管

delay_ms

(2);//延时一会

P0=0xff;

w4=1;

}

/*

主函数

*/

voidmain(void)

{

while

(1)

{if(k1==0)

{

delay_ms(5);

if(k1==0)

{

k=k+50;

if(k>2000)k=0;

while(k1==0)display(k);

}

}

if(k2==0)

{

delay_ms(5);

if(k2==0)

{

k=k-50;

if(k<0)k=2000;

while(k2==0)display(k);

}

}

display(k);

}

}

11定时器

#include"reg52.h"

sbitw1=P2^4;

sbitw2=P2^5;

sbitw3=P2^6;

sbitw4=P2^7;

unsignedcharsmg[]={

0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90

};//0-9数组291625334

intm,c,f;

voiddelay_ms(intz)//延时函数

{

inta;

for(;z>0;z--)

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

}

voiddisplay(unsignedints,l)

{

w1=0;//打开第一位数码管的正极

P0=smg[s/10];//送入要显示的数据到数码管

delay_ms

(2);//延时一会

P0=0xff;//

w1=1;//第一位数码管的正极也就失去了正极

w2=0;//打开第二位数码管的正极

P0=smg[s%10];//送入要显示的数据到数码管

delay_ms

(2);//延时一会

P0=0xff;

w2=1;

w3=0;//打开第一位数码管的正极

P0=smg[l/10];//送入要显示的数据到数码管

delay_ms

(2);//延时一会

P0=0xff;//

w3=1;//第一位数码管的正极也就失去了正极

w4=0;//打开第二位数码管的正极

P0=smg[l%10];//送入要显示的数据到数码管

delay_ms

(2);//延时一会

P0=0xff;

w4=1;

}

/*

主函数

*/

voidmain(void)

{

TMOD=0x01;//设置定时器模式

TH0=(65536-50000)/256;

TL0=(65536-50000)%256;

EA=1;

ET0=1;

TR0=1;

while

(1)

{

display(f,m);

}

}

voidmiaodata()interrupt1

{

TH0=(65536-50000)/256;

TL0=(65536-50000)%256;

c++;

if(c==20)

{

c=0;

m++;

if(m==60)

{

m=0;

f++;

if(f==60)

{

f=0;

}

}

}

}

12串口通信

#include

#defineucharunsignedchar

#definebaud96009600UL

#definebaud1920019200UL

#definefosc11059200UL//其中,UL代表unsignedlong

#definebaud_96001

sbitdj=P1^0;

sbitm0=P1^1;

sbitm1=P1^2;

intfx;//初始化舵机在中间

voiddelay(inta)

{

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

}

voidstop()

{

m0=0;

m1=0;

}

voidup()

{

m0=0;

m1=1;

}

voiddn()

{

m0=1;

m1=0;

}

 

voidserial_init(void)

{

TMOD=0x21;//T1工作在方式2

SCON=0x50;//SM1=1串口通信在模式1,REN=1并启动串口。

#ifbaud_9600

PCON=0;//波特率不加倍

TH1=256-(fosc*1)/(baud9600*12*32);

TL1=256-(fosc*1)/(baud9600*12*32);

#else

PCON=0x80;//波特率加倍

TH1=256-(fosc*2)/(baud19200*12*32);

TL1=256-(fosc*2)/(baud19200*12*32);

#endif

//如果PCON=0x80则fosc*2即波特率加倍

TR1=1;//定时器1开始计时

ES=1;//串口开启

EA=1;//总总断开启

TH0=(65536-100)/256;//高8位装值

TL0=(65536-100)%256;//低8位装值

EA=1;//总中断开启

ET0=1;//定时器0开启

TR0=1;//定时器0开始计数

}

voidDelay1000ms()//@12.000MHz

{

unsignedchari,j,k;

i=46;

j=153;

k=245;

do

{

do

{

while(--k);

}while(--j);

}while(--i);

}

inti=2;

ucharBuffer[5];

voidmain()

{

serial_init();

stop();

while

(1)

{

//if(p32==0)

//delay(5);

//if(p32==0)

//{

//fx++;

//if(fx==3)fx=0;

//while(p32==0);

//}

//fx=1;

//delay(10);

//fx=0;

//delay(20);

//dj=1;

//delay(20);

//dj=0;

Delay1000ms();

}

}

//SBUF=Buffer[4];

//while(!

TI);

//TI=0;

voidUSART()interrupt4

{

if(RI)

{

Buffer[i]=SBUF;

P1=SBUF;

SBUF=P1;

while(!

TI);

TI=0;

RI=0;

}

i--;

if(i<0)

{

i=2;//Buffer[2]Buffer[1]Buffer[1]

if(Buffer[0]==0xf1)up();//前//数据自行定义上位机发送0xffffff范围内的数据对应0xffffff

if(Buffer[0]==0xf2)stop();//前停止

if(Buffer[0]==0xf3)dn();//后

if(Buffer[0]==0xf4)stop();//后停止

if(Buffer[0]==0xf5)fx=1;

if(Buffer[0]==0xf6)fx=0;

if(Buffer[0]==0xf7)fx=2;

if(Buffer[0]==0xf6)fx=0;

//

//if(Buffer[1]==0xf1)P1&=0xEF;

//if(Buffer[1]==0xf2)P1|=0x10;

//if(Buffer[1]==0xf3)P1&=0xdF;

//if(Buffer[1]==0xf4)P1|=0x20;

//if(Buffer[1]==0xf5)P1&=0xbF;

//if(Buffer[1]==0xf6)P1|=0x40;

}

}

intcont;

voidtime0()interrupt1

{

TH0=(65536-100)/256;//高8位装值

TL0=(65536-100)%256;//低8位装值50000

cont++;

if(fx==0)

if(cont<=185)dj=0;elsedj=1;//0

//

if(fx==1)

if(cont<=190)dj=0;elsedj=1;//右45

//

if(fx==2)

if(cont<=180)dj=0;elsedj=1;//右45

 

if(cont==200)cont=0;

}

13直流电机正反转

#include"reg52.h"

sbitdianjizuo=P3^0;

sbitdianjiyou=P3^1;

sbitzhengzhuan=P3^2;

sbitfanzhuan=P3^3;

sbittingzhi=P3^4;

voidmain()

{

while

(1)

{

if(zhengzhuan==0)

{

dianjizuo=1;

dianjiyou=0;

}

if(fanzhuan==0)

{

dianjizuo=0;

dianjiyou=1;

}

if(tingzhi==0)

{

dianjizuo=1;

dianjiyou=1;

}

}

}

14交通灯

#include

#include

#defineucharunsignedchar

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

uchara,b,num,numt=60;

sbitnblv=P1^0;

sbitnbhuang=P1^1;

sbitnbhong=P1^2;//南北

sbitdxhong=P1^3;

sbitdxlv=P1^4;

sbitdxhuang=P1^5;//东西

voiddelay(intz)

{

inta;

for(;z>0;z--)

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

}

voiddisplay(ints)

{

P2=0x01;//打开位选

P0=~SMG[s/10];

delay(5);

P0=0xff;

P2=0x02;//打开位选

P0=~SMG[s%10];

delay(5);

P0=0xff;

}

voidinit()

{

TMOD=0x01;

TH0=(65536-50000)/256;

TL0=(65536-50000)%256;

EA=1;

ET0=1;

TR0=1;

}

voidmain()

{

init();

while

(1)

{

display(numt);

}

}

voidtime0()interrupt1

{

TH0=(65536-50000)/256;

TL0=(65536-50000)%256;

a++;

b++;

if(b==20)

{

b=0;

numt--;//数码管倒计时

if(numt==0)numt=60;

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

当前位置:首页 > 党团工作 > 党团建设

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

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