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

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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);

}

}

}

相关文档
最新文档