每按一次独立键盘的S2键,与P1口相连的一个发光二极管往下移动一位。
#include <reg52.h>
sbit BY1=P3^4 //定义按键的输入端S2键
unsigned char count//按键计数,每按一下,count加1
unsigned char temp
unsigned char a,b
void delay10ms(void) //延时程序
{
unsigned char i,j
for(i=20i>0i--)
for(j=248j>0j--)
}
key() //按键判断程序
{
if(BY1==0) //判断是否按下键盘,当单片机上电时所有IO口为//高电平,S2键一端接地另一端接P3.4,所以当键被按下时P3.4口//直接接地,此时检测P3.4肯定为低电平。
{
delay10ms()//延时,软件去干扰
if(BY1==0) //确认按键按下
{
count++ //按键计数加1
if(count==8) //计8次重新计数
{
count=0 //将count清零
}
}
while(BY1==0)//等待按键释放,如果键未释放则一直在此等待。
}
}
move()//广告灯向下移动移动函数
{
a=temp<<count //这三句为一个循环移位,相当于前面提到的
b=temp>>(8-count)// _crol_()函数
P1=a|b
}
main()
{
count=0 //初始化参数设置
temp=0xfe
P1=0xff
P1=temp
while(1) //永远循环,扫描判断按键是否按下
{
key() //调用按键识别函数
move() //调用广告灯移动函数
}
}
#include<reg52.h>sbit D1=P1^0
sbit D2=P1^1
sbit D3=P1^2
sbit D4=P1^3
sbit D5=P1^4
sbit D6=P1^5
sbit D7=P1^6
sbit D8=P1^7
void delay(unsigned int z)
void main()
{ while(1)
{ D1=0
delay(100)
D1=1
delay(100)
D2=0
delay(100)
D2=1
delay(100)
D3=0
delay(100)
D3=1
delay(100)
D4=0
delay(100)
D4=1
delay(100)
D5=0
delay(100)
D5=1
delay(100)
D6=0
delay(100)
D6=1
delay(100)
D7=0
delay(100)
D7=1
delay(100)
D8=0
delay(100)
D8=1
delay(1000)
D8=0
delay(500)
D8=1
delay(500)
D7=0
delay(500)
D7=1
delay(500)
D6=0
delay(500)
D6=1
delay(500)
D5=0
delay(500)
D5=1
delay(500)
D4=0
delay(500)
D4=1
delay(500)
D3=0
delay(500)
D3=1
delay(500)
D2=0
delay(500)
D2=1
delay(500)
D1=0
delay(500)
D1=1
delay(500)
}
}
void delay(unsigned int z)
{ unsigned int x,y
for(x=zx>0x--)
for(y=124y>0y--)
}
这个是PI口延时点亮的程序 虽然繁琐但是便于直观
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)