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