8051单片机Proteus仿真实例1(原理图+C程序)
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
1.4x4扫描键盘
原理图:
程序:
#include
#include
unsigned char code LED_CODE[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,
0x88,0x83,0xc6,0xa1,0x86,0x8e,0xff};
unsigned char code KEY_CODE[]={0x11,0x12,0x14,0x18,0x21,0x22,0x24,0x28,
0x41,0x42,0x44,0x48,0x81,0x82,0x84,0x88};
void delay(unsigned int x)
{
while(x--);
}
unsigned char key_scan()
{
unsigned char scode,kcode,i,k;
P1=0xf0;
if((P1&0xf0)!=0xf0)
{
delay(50);
if((P1&0xf0)!=0xf0)
{
scode=0xfe;
for(k=0;k<4;k++)
{
P1=scode;
if((P1&scode)!=scode)
{
kcode=~P1;
for(i=0;i<16;i++)
if(kcode==KEY_CODE[i])
return i;
}
else scode=_crol_(scode,1);
}
}
}
return -1;
}
void main()
{
unsigned char i;
while(1)
{
P2=0xff;
i=key_scan();
if(i==-1) P0=LED_CODE[16];
else P0=LED_CODE[i];
}
}
2.10s秒表
原理图:
程序:
#include
sbit key=P3^7;
unsigned char i,num,key_state;
unsigned char led_code[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; void delay(long dly)
{
while(dly--);
}
void key_event()
{
key_state=(key_state+1)%3;
switch(key_state)
{
case 1:EA=1;ET0=1;TR0=1;break;
case 2:EA=0;ET0=0;TR0=0;break;
case 0:P0=0x3f;P2=0x3f;i=0;num=0;break; }
}
void main()
{
P0=0x3f;
P2=0x3f;
i=0;
num=0;
key_state=0;
TMOD=0x01;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
while(1)
{
key=1;
if(key==0)
{
delay(10);
while(key==0);
key_event();
}
}
}
void timer_0() interrupt 1
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
if(++i==2)
{
i=0;
++num;
P0=led_code[num/10];
P2=led_code[num%10];
if(num==100)
num=0;
}
}
3.74HC595芯片
原理图:
程序:
#include
#include
sbit SH_CP=P0^0;
sbit DS=P0^1;
sbit ST_CP=P0^2;
unsigned char temp;
unsigned char code led_code[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; void delay(long dly)
{
while(dly--);
}
void in_595()
{
unsigned char i;
for(i=0;i<8;i++)
{
temp<<=1;
DS=CY;
SH_CP=0;
_nop_();
_nop_();
SH_CP=1;
_nop_();
_nop_();
SH_CP=0;
}
}
void out_595()
{
ST_CP=0;
_nop_();
ST_CP=1;
_nop_();
ST_CP=0;
}
void main()
{
unsigned char i;
while(1)
{
for(i=0;i<10;i++)
{
temp=led_code[i];
in_595();
out_595();
delay(15000);
}
}
}