3个led是共阳三色灯,我的原理是利用P1口的P1.0,P1.1,P1.2输出000-111以到达一个灯显示八种状态,用按键来控制
第一宗方案我用中断,(其实我不会用中断,改别人的程序的)
#include<reg52.h>
//库文件
#define uchar unsigned char//宏定义无符号字符型
uchar dispcount=0; //计数初值
/********************************************************************
显示函数
*********************************************************************/
void Led() //显示函数
{
P1=dispcount;
}
/********************************************************************
中断服务函数
*********************************************************************/
void ExtInt0() interrupt 0 //中断服务程序
{
dispcount++; //每按一次中断按键,计数加一
if (dispcount==8) //计数范围0-8
{
dispcount=0;
}
}
/********************************************************************
主函数
*********************************************************************/
void main()
{
TCON=0x01; //中断设置
IE=0x81;
while(1)
{
Led();
}
}
这里用的是中断0,,按键要加P3.2我想问要接P3.3改真名改程序,我还不会用中断
第二种方案我用了按键判断,之前的没加入延时去抖动,这次加了延时去抖动
#include<reg52.h>
//库文件
#define uchar unsigned char//宏定义无符号字符型
uchar dispcount=0; //计数初值
sbit BY1=P3^2; //定义按键的输入端(为单片机P3口的P3.2按键)
/********************************************************************
显示函数
*********************************************************************/
void Led() //显示函数
{
P1=dispcount;
}
/********************************************************************
延时函数
*********************************************************************/
void delay10ms(void) //延时程序
{
uchar i,j;
for(i=20;i>0;i--)
for(j=248;j>0;j--);
}
/********************************************************************
按键判断函数
*********************************************************************/
void key() //按键判断程序
{
if(BY1==0) //判断是否按下键盘
{
delay10ms(); //延时,软件去干扰
if(BY1==0) //确认按键按下
{
dispcount++; //按键计数加1
if(dispcount==8) //计8次重新计数
{
dispcount=0;//将dispcoun 清零
}
}
while(BY1==0);//按键锁定,每按一次dispcoun 只加1.
}
}
/********************************************************************
主函数
*********************************************************************/
void main()
{
while(1)
{
key();
Led();
}
}
|