单片机最小系统扩展部分
4.2.1 LED电路
图4.2.1 LED电路图
图4.2.1中主要元件有1K的排阻、LED、。1K的排阻为每个LED的限流电阻。此最小系统提供了8个独立LED,由P1口控制,采用共阳级接法所以只有当P1口输出低电平时LED才会点亮。
时间间隔为1000ms的循环左移流水灯参考程序。
#include
#include
unsigned char a,b,k,j,x;
void delayms(uint x)
{
for(a=x;a>0;a--)
for(b=110;b>0;b--);
}
void main()
{
k=0xfe;
while(1)
{
P1=k;
delayms(1000);
j=_crol_(k,1);
k=j;
P1=j;
}
}
4.2.2 蜂鸣器电路
图4.2.2 蜂鸣器电路图
图4.2.2中蜂鸣器使用的是PNP三极管进行驱动控制的,此蜂鸣器为电磁式有源蜂鸣器。三极管的集电极通过蜂鸣器接5V电源,基极是控制端,发射极接地,当单片机的P2.3输出低电平时,三极管导通,蜂鸣器发声。蜂鸣器为感性原件,也可以在两端并接一个二极管来起到泄放作用。
控制蜂鸣器发出滴滴声的参考程序。
#include
unsigned char a,b;
sbit beep=P2^3;
void delayms(uint x)
{
for(a=x;a>0;a--)
for(b=110;b>0;b--);
}
void main()
{
while(1)
{
delayms(100);
beep=0;
delayms(100);
beep=1;
}
}
4.2.3 系统的数码管电路
图4.2.3 数码管电路图
如图4.2.3所示,多位数码管的“位选”是可以独立控制的,而“段选”是连接在一起的,可以用作数码管的动态显示和静态显示。图4.2.3中所示的数码管全部为共阴极的数码管。74HC573为所存器,利用单片机可以控制所存器的所存端,进而控制锁存器的数据输出,利用分时控制的方法可以方便地控制任意数码管显示任意数字。
使用软件延时实现0~59秒的计数器。
#include
#define uchar unsigned char
uchar j,k,i,a,A1,A2,second;
sbit dula=P2^6;
sbit wela=P2^7;
uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
void delay(uchar i)
{
for(j=i;j>0;j--)
for(k=125;k>0;k--);
}
void display(uchar sh_c,uchar g_c)
{
dula=0;
P0=table[sh_c];
dula=1;
dula=0;
wela=0;
P0=0xfe;
wela=1;
wela=0;
delay(5);
P0=table[g_c];
dula=1;
dula=0;
P0=0xfd;
wela=1;
wela=0;
delay(5);
}
void main()
{
while(1)
{
second++;
if(second==60)
second=0;
A1=second/10;
A2=second%10;
for(a=50;a>0;a--)
{
display(A1,A2);};
}
}
4.2.4 系统的键盘电路
图4.2.4 独立和矩阵键盘电路图
图4.2.4中S2-S3为4个独立按键,与单片机的P3.4-P3.7分别相连。
独立键盘与单片机相连时,每个按键都需要单片机的一个I/O口,若按键较多时,占用的I/O口资源就会过多,为此就引入了矩阵键盘。图4.2.4中是将16个按键排成4行4列,这样一共有8根线,节省了8个I/O口。S6-S21即为16个矩阵键盘,8条线分别与单片机飞P3口相连。
(1)单键识别参考程序
每按一次S2,P1口的LED下移一位。
#include
sbit BY1=P3^4;
unsigned char count;
unsigned char temp;
unsigned char a,b;
void delay10ms(void)
{
unsigned char i,j;
for(i=20;i>0;i--)
for(j=248;j>0;j--);
}
key()
{
if(BY1==0)
{
delay10ms();
if(BY1==0)
{
count++;
if(count==8)
{
count=0;
}
}
while(BY1==0);
}
}
move()
{
a=temp<>(8-count);
P1=a|b;
}
main()
{
count=0;
temp=0xfe;
P1=0xff;
P1=temp;
while(1)
{
key();
move();
}
}
(2)矩阵键盘识别
依次按下键盘上的S6~S21,同时在数码管上显示0~F。
#include
sbit beep=P2^3;
sbit dula=P2^6;
sbit wela=P2^7;
unsigned char i=100;
unsigned char j,k,temp,key;
void delay(unsigned char i)
{
for(j=i;j>0;j--)
for(k=125;k>0;k--);
}
unsigned char code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
display(unsigned char num)
{
P0=table[num];
dula=1;
dula=0;
P0=0xc0;
wela=1;
wela=0;
}
void main()
{
dula=0;
wela=0;
while(1)
{
P3=0xfe;
temp=P3;
temp=temp&0xf0;
if(temp!=0xf0)
{
delay(10);
if(temp!=0xf0)
{
temp=P3;
switch(temp)
{
case 0xee:
key=0;
break;
case 0xde:
key=1;
break;
case 0xbe:
key=2;
break;
case 0x7e:
key=3;
break;
}
while(temp!=0xf0)
{
temp=P3;
temp=temp&0xf0;
beep=0;
}
beep=1;
display(key);
P1=0xfe;
}
}
P3=0xfd;
temp=P3;
temp=temp&0xf0;
if(temp!=0xf0)
{
delay(10);
if(temp!=0xf0)
{
temp=P3;
switch(temp)
{
case 0xed:
key=4;
break;
case 0xdd:
key=5;
break;
case 0xbd:
key=6;
break;
case 0x7d:
key=7;
break;
}
while(temp!=0xf0)
{
本文档为【单片机最小系统】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑,
图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。