8051单片机Proteus仿真实例2原理图+C程序.docx
- 文档编号:13069083
- 上传时间:2023-06-10
- 格式:DOCX
- 页数:18
- 大小:223.70KB
8051单片机Proteus仿真实例2原理图+C程序.docx
《8051单片机Proteus仿真实例2原理图+C程序.docx》由会员分享,可在线阅读,更多相关《8051单片机Proteus仿真实例2原理图+C程序.docx(18页珍藏版)》请在冰点文库上搜索。
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); } } }
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 8051 单片机 Proteus 仿真 实例 原理图 程序