复习单片机

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

四、设计题

1、设计矩阵键盘的接口电路,并在数码管上显示键盘的值

#include

#define uchar unsigned char //数据类型的宏定义

#define uint unsigned int

//sbit shu1=P3^6;

//sbit shu2=P3^7;

uchar code xs[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,

0x07,0x7f,0x6f};

uchar code weik[]={0x7f,0xbf};

void delay1ms(uint );

uchar scan();

void display(uchar);

uchar num,tt,second;

void main()

{

while(1)

{

display(scan());

}

}

uchar scan()

{

uchar temp;

P1=0xff; //先向P1口写1;端口读状态

P1=0xf0;

temp=P1;

if(temp!=0xf0)

{

delay1ms(15);

if(temp!=0xf0)

{

P1=0xfe;

temp=P1;

switch(temp)

{

case(0xee):num=0;break;

case(0xde):num=1;break;

case(0xbe):num=2;break;

case(0x7e):num=3;break;

}

P1=0xfd;

temp=P1;

switch(temp)

{

case(0xed):num=4;break;

case(0xdd):num=5;break;

case(0xbd):num=6;break;

case(0x7d):num=7;break;

}

P1=0xfb;

temp=P1;

switch(temp)

{

case(0xeb):num=8;break;

case(0xdb):num=9;break;

case(0xbb):num=10;break;

case(0x7b):num=11;break;

}

P1=0xf7;

temp=P1;

switch(temp)

{

case(0xe7):num=12;break;

case(0xd7):num=13;break;

case(0xb7):num=14;break;

case(0x77):num=15;break;

}

}

}

return num;

}

void delay1ms(uint i)

{

uchar j;

while(i--)

{

for(j=0;j<115;j++) //1ms基准延时程序

{;}

}

}

void display(uchar tim)

{

P2=0;

P3=weik[0];

P2=xs[tim%10];

delay1ms(15);

P3=weik[1];

P2=xs[tim/10];

delay1ms(15);

}

2、用单片机控制8只发光二极管,使D1-D8依次点亮,每次只亮一只LED,重复往返。

#include

#define uint unsigned int

#define uchar unsigned char

uchar led ;

uint i,j,x;

void delay()

{

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

for(j=0;j<600;j++);

}

void main()

{

while(1)

{

led=0xfe;

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

{

P3=led;

led=led<<1;

delay();

led=led|0x01;

}

}

}

3、制作简易秒表

#include

#define led P2

#define uchar unsigned char #define uint unsigned int uchar tim , second;

void display(uchar) ;

void main()

{

second=0;

tim=0;

TMOD=0x00;//t0方式0

TL0=(8192-4608)%32;

TH0=(8192-4608)/32;

ET0=1;

EA=1;

TR0=1;

while(1)

{

PCON|=0x01;

}

}

void tim0 () interrupt 1 using 1 {

TL0=(8192-4608)%32;

TH0=(8192-4608)/32;

tim++;

if(tim>=200)

{

tim=0;

second++;

if(second>=60)

{

second=0;

}

}

display(second) ;

}

void display(uchar tt)

{

led=~(((tt/10)<<4)| (tt%10) );

}

4、测量频率

相关文档
最新文档