8051单片机Proteus仿真实例2原理图+C程序.docx

上传人:b****6 文档编号:6984542 上传时间:2023-01-14 格式:DOCX 页数:17 大小:223.75KB
下载 相关 举报
8051单片机Proteus仿真实例2原理图+C程序.docx_第1页
第1页 / 共17页
8051单片机Proteus仿真实例2原理图+C程序.docx_第2页
第2页 / 共17页
8051单片机Proteus仿真实例2原理图+C程序.docx_第3页
第3页 / 共17页
8051单片机Proteus仿真实例2原理图+C程序.docx_第4页
第4页 / 共17页
8051单片机Proteus仿真实例2原理图+C程序.docx_第5页
第5页 / 共17页
点击查看更多>>
下载资源
资源描述

8051单片机Proteus仿真实例2原理图+C程序.docx

《8051单片机Proteus仿真实例2原理图+C程序.docx》由会员分享,可在线阅读,更多相关《8051单片机Proteus仿真实例2原理图+C程序.docx(17页珍藏版)》请在冰豆网上搜索。

8051单片机Proteus仿真实例2原理图+C程序.docx

8051单片机Proteus仿真实例2原理图+C程序

1.INT0,INT1中断计数

原理图:

程序:

#include

sbitk3=P3^4;

sbitk4=P3^5;

unsignedcharcodeled_code[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff};

unsignedcharcodeseg_code[]={0x20,0x10,0x08,0x04,0x02,0x01};

unsignedcharled_buffer[]={0,0,0,0,0,0};

unsignedintcount_a=0,count_b=0;

voiddelay(unsignedintx)

{

unsignedchart;

while(x--)

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

}

voiddisplay()

{

unsignedchari;

led_buffer[2]=count_a/100;

led_buffer[1]=count_a%100/10;

led_buffer[0]=count_a%10;

if(led_buffer[2]==0)

{

led_buffer[2]=10;

if(led_buffer[1]==0)

led_buffer[1]=10;

}

led_buffer[5]=count_b/100;

led_buffer[4]=count_b%100/10;

led_buffer[3]=count_b%10;

if(led_buffer[5]==0)

{

led_buffer[5]=10;

if(led_buffer[4]==0)

led_buffer[4]=10;

}

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

{

P2=seg_code[i];

P1=led_code[led_buffer[i]];

delay

(1);

}

}

voidmain()

{

IT0=1;

IT1=1;

PX0=1;

IE=0x85;

while

(1)

{

k3=1;

k4=1;

if(k3==0)count_a=0;

if(k4==0)count_b=0;

display();

}

}

voidint0()interrupt0

{

count_a++;

}

voidint1()interrupt2

{

count_b++;

}

2.INT0中断计数

原理图:

程序:

#include

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

unsignedcharled_buffer[]={0,0,0};

unsignedcount=0;

sbitkey=P3^6;

voiddisplay()

{

led_buffer[2]=count/100;

led_buffer[1]=count%100/10;

led_buffer[0]=count%10;

if(led_buffer[2]==0)

{

led_buffer[2]=10;

if(led_buffer[1]==0)

led_buffer[1]=10;

}

P0=led_code[led_buffer[0]];

P1=led_code[led_buffer[1]];

P2=led_code[led_buffer[2]];

}

voidmain()

{

IE=0x81;

IT0=1;

while

(1)

{

key=1;

if(key==0)

count=0;

display();

}

}

voidint0()interrupt0

{

count++;

}

3.LED点阵

原理图:

程序:

#include

sbitled1=P0^0;

sbitled2=P0^1;

voiddelay(longdly)

{

while(dly--);

}

voidmain()

{

SCON=0x50;

TMOD=0x20;

TH1=0xfd;

TL1=0xfd;

PCON=0x00;

TR1=1;

RI=0;

while

(1)

{

if(RI==1)

{

RI=0;

switch(SBUF)

{

case'A':

led1=~led1;led2=1;break;

case'B':

led1=1;led2=~led2;break;

case'C':

led1=~led1;led2=~led2;break;

}

}

elseled1=led2=1;

delay(1000);

}

}

4.串行通信(MAX232芯片)

原理图:

程序:

#include

sbitled1=P0^0;

sbitled2=P0^1;

voiddelay(longdly)

{

while(dly--);

}

voidmain()

{

SCON=0x50;

TMOD=0x20;

TH1=0xfd;

TL1=0xfd;

PCON=0x00;

TR1=1;

RI=0;

while

(1)

{

if(RI==1)

{

RI=0;

switch(SBUF)

{

case'A':

led1=~led1;led2=1;break;

case'B':

led1=1;led2=~led2;break;

case'C':

led1=~led1;led2=~led2;break;

}

}

elseled1=led2=1;

delay(1000);

}

}

5.MAX7221芯片

原理图:

程序:

#include

#include

sbitDIN=P2^0;

sbitCSB=P2^1;

sbitCLK=P2^2;

unsignedcharcodebuffer[]={2,0,1,5,10,5,10,9};

voiddelay(longdly)

{

while(dly--);

}

voidwrite(unsignedcharaddr,unsignedchardat)

{

unsignedchari;

CSB=0;

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

{

CLK=0;

addr<<=1;

DIN=CY;

CLK=1;

_nop_();

_nop_();

CLK=0;

}

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

{

CLK=0;

dat<<=1;

DIN=CY;

CLK=1;

_nop_();

_nop_();

CLK=0;

}

CSB=1;

}

voidinitialise()

{

write(0x09,0xff);

write(0x0a,0x07);

write(0x0b,0x07);

write(0x0c,0x01);

}

voidmain()

{

unsignedchari;

initialise();

delay(10);

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

write(i+1,buffer[i]);

while

(1);

}

6.T0控制LED实现二进制计数

原理图:

程序:

#include

voidmain()

{

TMOD=0x05;

TR0=1;

TH0=0x00;

TL0=0x00;

while

(1)

{

P1=TH0;

P2=TL0;

}

}

8.按键控制LED循环

原理图:

程序:

#include

#include

voiddelay(unsignedintx)

{

while(x--);

}

voidmove_led()

{

if((P1&0x10)==0)P0=_cror_(P0,1);

elseif((P1&0x20)==0)P0=_crol_(P0,1);

elseif((P1&0x40)==0)P2=_cror_(P2,1);

elseif((P1&0x80)==0)P2=_crol_(P2,1);

}

voidmain()

{

unsignedcharkey;

P0=0xfe;

P2=0xfe;

P1=0xff;

key=0xff;

while

(1)

{

if(key!

=P1)

{

key=P1;

move_led();

delay(15000);

}

}

}

9.按键控制数码管显示

原理图:

程序:

#include

unsignedcharcodeled_code[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff};

unsignedcharcodeled_seg[]={0x80,0x40,0x20,0x10,0x08,0x04,0x02,0x01};

unsignedcharled_buffer[]={0,10,10,10,10,10,10,10};

voiddelay(unsignedintx)

{

unsignedchart;

while(x--)for(t=0;t<120;t++);

}

voidled_display()

{

unsignedchari;

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

{

P2=led_seg[i];

P0=led_code[led_buffer[i]];

delay

(2);

}

}

voidmain()

{

unsignedchari,key_val,key_count=0;

P0=0xff;

P1=0xff;

P2=0x00;

while

(1)

{

led_display();

key_val=P1;

switch(key_val)

{

case0xfe:

key_count++;

if(key_count>8)key_count=8;

led_buffer[key_count-1]=key_count;

break;

case0xfd:

if(key_count>0)led_buffer[--key_count]=10;

if(key_count==0)led_buffer[0]=0;

break;

case0xfb:

led_buffer[0]=0;

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

led_buffer[i]=10;

key_count=0;

}

while(P1!

=0xff)

led_display();

}

}

10.报警器

原理图:

程序:

#include

sbitSOUNDER=P1^0;

sbitBUTTON=P1^7;

voiddelay(unsignedintx)

{

while(x--);

}

voidalarm(unsignedchart)

{

unsignedchari,j;

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

{

SOUNDER=!

SOUNDER;

for(j=0;j

delay(15);

}

}

voidmain()

{

SOUNDER=0;

while

(1)

{

BUTTON=1;

if(BUTTON==1)

{

alarm(90);

alarm(120);

}

}

}

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

当前位置:首页 > 工作范文 > 行政公文

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

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