單片機AT89S51的P2口接8個發光二極管led,P1口低兩位P1.0,P1.1接兩個按鈕開S1,S2。
要求:
1)S1鍵閉合,S2鍵斷開,8只led低四位點亮,高四位熄滅(依次低位到高位循環點亮);
2)S1鍵斷開,S2鍵閉合,8只led低四位熄滅,高四位點亮。(低四位和高四位交替閃爍)(注意畫上時鐘電路和復位電路。)
電路仿真原理圖如下圖所示
1)
4455.jpg (214.45 KB, 下載次數: 49)
下載附件
2017-11-8 15:59 上傳
源程序如下
#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 );
}
|