单片机AT89S51的P2口接8个发光二极管led,P1口低两位P1.0,P1.1接两个按钮开S1,S2。
要求:
1)S1键闭合,S2键断开,8只led低四位点亮,高四位熄灭(依次低位到高位循环点亮);
2)S1键断开,S2键闭合,8只led低四位熄灭,高四位点亮。(低四位和高四位交替闪烁)(注意画上时钟电路和复位电路。)
电路仿真原理图如下图所示
1)
源程序如下
#include <reg51.h> // 包含头文件reg51.h
#include <intrins.h>
#define uchar unsigned char
uchar i,temp,shift ;
void delay() //延时程序 //
{
uchar i,j;
for(i=0;i<250;i++)
for(j=0;j<250;j++);
}
void liushuiyi() //第一个流水灯程序//
{
P2=0x0f;
delay();
P2=~P2 ;
delay ();
}
void liushuier() //第二个流水灯程序//
{
temp=0xfe;
for(i=0;i<8;i++)
{
P2=temp;
delay();
temp=_crol_(temp,1); }
}
void main( ) //主函数main( )
{
char state;
do
{
P1=0xff; // P1口为输入
state=P1; // 读入P1口的状态,送入state
state=state&0x03; // 屏蔽P1口的高6位
switch (state) // 判P1口低2位开关状态
{
case 0: P2=0xf1; break;// P1.1、P1.0=00,点亮P2.0脚LED
case 1: liushuiyi();break;// P1.1、P1.0=01,点亮P2.1脚LED
case 2: liushuier();break;// P1.1、P1.0=10,点亮P2.2脚LED
case 3: P2=0xf8;break;// P1.1、P1.0=11,点亮P2.3脚LED 1111 0011
}
}while ( 1 );
}
|