51单片机基本程序.docx

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

51单片机基本程序.docx

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

51单片机基本程序.docx

51单片机基本程序

1第一位隔一秒闪烁一次

#include

#defineuintunsignedintsbitledl=PlAO;

uinti;

uintj;

voidniain()

{

while(l)

{

led1=0;for(i=1000;i>0;i-)for(j=l10;j>0;j-);ledl=l;for(i=1000;i>0;i-)for(j=l10;j>0;j--);}

1

2复杂广告灯

#include

#defineuintunsignedint

#defineucharunsignedchar

uchardiscode[]={0xFE,0xFD,0xFB,0xF7,0xEF,0xDE0xBF,0x7E〃正向流水

0xBE0xDE0xEE0xF7,0xFB,0xFD0xFE,0xFE〃反向流水灯_

0xAA,0x55QxAA,0x55QxAA,0x55,0xFF〃隔灯闪烁3次0xF0,0x0F,0xF0,0x0F,0xFFy/高四盏。

低四盏闪烁2次0x33,0xCC,0x33,0xCC,0x33,0xCC,0xFF〃隔两盏闪烁3次};

voiddelayms(uintms)

{

uinti;

while(ms—)

{

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

}

}

voidmain(void)

uchari;

P0二OxFF;

while(l)

{

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

{

PO=discode[i];delayms(250);

}

}

3拉幕式与闭幕式广告灯

#include

#defineuintunsignedint

#defineucharunsignedchar

uchardiscodel[4]={0x18,0x24,0x42,0x81);uchardiscode2[4]={0x7E,0x3C,0x18,0x00};voiddelayms(uintms)

{

uinti;

while(ms—)

{

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

}

}

voidniain(void)

{

ucharij;

P0=0xFF;

while(l)

{for(i=0;i<4;i++)

{

j=discodel[i];

P0=~j;delayms(500);

}

j=0xFF;

PO=~j;

delayms(500);

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

{

j=discode2[i];

PO=~j;

delayms(500);

4流水灯跑马灯左移右移#include#defineuintunsignedint#defineucharunsignedcharvoiddelay(uints)

{

uinti;

while(s—)

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

}

voidmain(void)

{

ucharij;

P0=0xFF;while(l)

{

j=OxOl;for(i=0;i<&i++)

{

PO=~j;delay(500);

j=j«l;

}

P0=0xFF;delay(lOOO);j=Ox8O;

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

{

PO二〜j;delay(5OO);

j=j»h

}

1

5千位静态显示数字

#include

(千位)

(百位)

(十位)

(个位)

sbitSMG_q〔P1AO;〃定义数码管阳级控制脚sbitSMG_b=PIT;〃定义数码管阳级控制脚sbitSMG_s=PlA2;〃定义数码管阳级控制脚sbitSMG_g=PP3;〃定义数码管阳级控制脚voidmain()

SMG_q=O;

P0=0xF8;while(l);

}

6,4位数码管同时静态显示#include

#defineuncharunsignedchar

#defineuintunsignedint

sbitSMG_q=PlA0;〃定义数码管阳级控制脚(千位)sbitSMG_b=PlAl;〃定义数码管阳级控制脚(百位)sbitSMG_s=PlA2;〃定义数码管阳级控制脚(十位)sbitSMG」二PM3;〃定义数码管阳级控制脚(个位)

uncharmun;

uchar;codetable[]={

0xc0,0xf9.0xa4,0xb0,

0x99,0x92,0x82,Oxf&

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

0xc6,0xa1,0x86,0x8e};

voiddelay(uint);

voidniain(void)

{

SMG_q=0;SMG_b=0;SMG_s=0;SMG_g=0;

//Pl=0xf0;两种都可攻实现…

while(l)

{

for(mun=0;mun<16;mun++)

{P0=table[mun];delay(500);

}

}

}

voiddelay(uints)

uinti;

while(s—)for(i=120;i>0;i—);

7•数码管动态显示

#include

#defineucharunsignedchar

#defineuintunsignedint

sbitq=PlAO;〃定义数码管阳级控制脚(千位)sbitb=pri;〃定义数码管阳级控制脚(白位)sbits=PlA2;〃定义数码管阳级控制脚(十位)sbitg=PP3;〃定义数码管阳级控制脚(个位)//uncharmun;

uchar;codetable[]={

0xc0,0xf9,0xa4,0xb0,

0x99,0x92,0x82,Oxf&

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

0xc6,0xa1,0x86,0x8e);

voiddelay(uint);

voidniain(void)

{

while(l)

{

q=0;

P0=table[l];

delay(500);

q=l;

b=0;

P0=table[2];delay(500);b=l;

s=0;

P0=table[3];delay(500);s=l;

g=0;

P0=table[4];delay(500);g=l;

voiddelay(uints)

{

uinti;

while(s—)

for(i=120;i>0;i—);

}

8.1中断定时器0工作1LEDIs闪烁

#include

#defineuintunsignedint

#defineucharunsignedchar

sbitledl=PlA0;

ucharnum;

voidmain()

{

TMOD=0x01;

TH0=(65536-45872)/256;

TL0=(65536-45872)%256;

EA=1;

ETO=1;

TRO=1;

while(l);

}

voidT0_time()internipt1

{

TH0=(65536-45872)/256;

TL0=(65536-45872)%256;

num++;

if(num==50)

{

num=O;

ledl=-ledl;

}

}

8.2中断定时器LED,前两位数码管59s循环计数

#include

#defineucharunsignedchar

#defineuintunsignedint

voiddelay(uints)

uintij;

for(i=s;i>0;i—)

for(j=l10;j>0;j-);

1

voidTO_time()interruptI

{

TH0=(65536-45872)/256;

TL0=(65536-45872)%256;

numl++;

if(numl==50)

{

num1=0;

ledl=-ledl;

}

voidTl_time()interrupt3

{

TH1=(65536-45872)/256;

TLl=(65536-45872)%256;

num2++;

if(num2=20)

{

num2=0;

num++;

if(num==60)

nuni=0;

shi=nuni/10:

ge=num%10;

〃灯的壳灭。

°。

9.1独立键盘使用

#include

#defineucharunsignedchar

#defineuintunsignedint

sbitkl=P3A4;〃独立键盘,klk2k3k4分别接,p34.p35p36p37.

sbitk2=P3A5;

sbitk3=P3A6;

sbitk4=P3A7;

sbitd=PlA2;

sbitc=PlA3;

ucharcodetable[]={

0xc0,0xf9.0xa4,0xb0,

0x99,0x92,0x82,Oxf&

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

0xc6,0xa1,0x86,0x8e);

voiddelayms(uint);

ucharnumtO.num;

voiddisplay(ucharnumdis)〃显示59s的常用方式{ucharshi.ge;

shi=numdis/10;

ge二numdis%10;

Pl=Oxff;〃控制十位数字

Pl=Oxfd;

PO=table[shi];

delayms(lO);

Pl=0x00;

Pl=Oxff;〃控制个位数字

Pl=Oxfe;

PO=table[ge];

delayms(lO);

Pl=0x00;

}

voiddelayms(uintxms)〃简单的延时程序

{

uintij;

for(i=xms;i>0;i—)

for(j=l10;j>0;j--);

)voidinit()〃初始化函数

TMOD=0x01;

TH0=(65536-45872)/256;

TL0=(65536-45872)%256;

EA=1;

ETO=1;

}

voidkeyscan()〃控制键盘的程序

{

if(kl==o)

{

delayms(10);〃去抖动延时

if(kl==O)

{

num++;

if(num==60)

nuni=0;

while(!

kl);〃等待按键释放

}

1

if(k2==0)

{

delayms(lO);

if(k2==0)

{

if(num==0)nuni=60;num—;while(!

k2);

}

}

if(k3=0)

{

delayms(lO);

if(k3==0)

nuni=0;

while(!

k3);

if(k4==0)

{

delayms(lO);

if(k4==0)

while(!

k4);

TR0=~TR0;

}

}

}

voidmain()〃主函数

{

init();〃1,先初始化数据init()

while(l)

{

keyscan();〃键盘选择?

display(num);〃显示两位数字函数

}

voidTO_time()internipt1//中断服务程序

{

TH0=(65536-45872)/256;

TL0=(65536-45872)%256;

numtO++;

if(numt0==20)//Is的判断

{

numtO=O;

num++;

if(num==60)

num=0;

}

9.2矩阵键盘使用

#include

#defineucharunsignedchar#defineuintunsignedintucharcodetable[]={

0xc0,0xf9.0xa4,0xb0,

0x99,0x92,0x82,0xf&

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

0xc6,0xa1,0x86,0x8e);

voiddelayms(uintxms)

{

uintij;

for(i=xms;i>0;i—)

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

}

voiddisplay(ucharnum)

{

P0=table[num];

Pl=0xf0;

}

voidjianpan()

{

uchartemp,key;

P3=0xfe;

temp=P3;

temp=temp&0xf0;

if(temp!

=Oxfe)//llll1高位没有零,(没有键按下){

delayms(lO);

temp=P3;〃随时可能有键按下temp=tenip&OxfO;

if(temp!

=Oxfe)

{

temp=P3;

switch(temp)

{

caseOxee:

key=O;

break;

caseOxde:

key=l;

break;

caseOxbe:

key=2;

break;

case0x7e:

key=3;

break;

}

while(temp!

=OxfO)〃等待键盘释放

{

temp二P3;tempnemp&0xfO;

)display(key);

}

P3=Oxfd;

temp二P3;

tempnemp&OxfO;

if(temp!

=Oxfe)//222222高位没有零,(没有键按下){

delayms(lO);

temp=P3;

tempnemp&OxfO;

if(temp!

=Oxfe)

{

tenip=P3;

switch(temp)

{

caseOxed:

key=4;

break;

caseOxdd:

key=5;

break;

caseOxbd:

key=6;

break;

caseOx7d:

key=7;

break;

}

while(temp!

=OxfO)

{

temp=P3;temp=temp&OxfO;

}

display(key);

P3=0xfb;

temp=P3;

temp=temp&OxfO;

if(temp!

=Oxfe)11333333高位没有零,(没有键按下){

delayms(lO);

tenip=P3;

tenip=tenip&OxfO;

if(temp!

=Oxfe)

{

temp=P3;

switch(temp)

{

caseOxeb:

key=8;

break;

caseOxdb:

key=9;

break;

caseOxbb:

key=10;

break;

caseOx7b:

key=l1;

break;

}

while(temp!

=OxfO)

{

temp二P3;

temp=temp&OxfO;

display(key);

}

P3=Oxf7;

temp二P3;

temp二temp&OxfO;

if(temp!

=Oxfe)〃44444高位没有零,(没有键按下)

delayms(lO);

temp二P3;temp=temp&OxfO;

if(temp!

=Oxfe)

{

temp=P3;

switch(temp)

{

caseOxe7:

key=12;

break;

caseOxd7:

key=13;break;

caseOxb7:

key=14;break;

case0x77:

key=15;

break;

1while(temp!

=0xf0)

{

temp=P3;temp=temp&0xf0;

)display(key);

}

}

}

voidmain(void)

 

Pl=0x0f;

〃打开数码管选通开关

while(l)

jianpan();〃扫描键盘程疗:

1

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

当前位置:首页 > IT计算机 > 互联网

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

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