#include<reg52.h>
#include<intrins.h>
#define uint unsigned int
#define uchar unsigned char
sbit key=P0^0;
void Delay_ms(uint xms) //延时程序,xms是形式参数
{
uint i, j;
for(i=xms;i>0;i--)
for(j=115;j>0;j--);
}
void main()
{
uchar led_data=0xfe;
while(1)
{
P1=led_data;//默认第一位亮
if(key==0)
Delay_ms(10);
if(key==0)
{
while(!key);
Delay_ms(200); //延时0.5s
led_data=_crol_(led_data,1);//移位函数,使led_date向左循环移动1位
}
}
}
我的目的要在程序里面添加1个按键,控制右移。
谢谢!通过楼上的方法成功实现。
还有一个问题,就是单片机上电P1.0是亮的,我想实现上电的状态是0xff
当按键按下开始从0xfe开始移位。
那就判断,当按键按下时,赋值为0xfe,然后一次移位一次,循环移位,当移动到0x00时,赋初值继续移位就行了。
追问怎么写(赋值为0xfe,然后一次移位一次,循环移位,当移动到0x00时,赋初值)
我不会啊,能不能像楼上的网友详细的。举一个例子?
定义一个变量a,初始值为0;
当按键按下后,a赋值为2;
主循环中判断,如果a是2,就一次左移。、
char a =0;
uchar lsv =0xfe;
while(1)
{
if(key0==0)
{
delay(20); //20ms消抖
if(key0==0)
{
a=2;
}
}
if(a==2)
{
lsv=lsv<<1; //左移一次
delay(100); //根据需要延时一段时间
if(lsv==0x00)
{
lsv=0xfe;
}
}
}
谢谢!能不能给完整的?
这个是主函数吗?
前面要不要声明,定义什么?
这个就是主程序里面的,前面只要定义变量就可以了。
追问我按照你的方法试了,还是不行。
编译错误:if(key0==0)
key0 是一个按键的检测管脚,你要定义一下
追问我按照你的方法试了,LED不亮,按键按下也没反应。
追答你还要加一条:
P1=lsv;
LED 接在哪个口就赋值给哪个口。
左移没有规律,按1下移动1位,再按3位,再按全亮............
P1=lsv;这个具体加在哪个位置?
if(a==2)
{
lsv=lsv<<1; //左移一次
delay(100); //根据需要延时一段时间
if(lsv==0x00)
{
lsv=0xfe;
}
}
放在这里........
哈哈,成了流水灯。
追答你想要的是什么呢?
你的方案,我试了不行。
谢谢你!我已经解决了此问题。
前面给出的,仅仅是主函数。
在主函数的前面,再写上楼主原来的部分:
#include<reg52.h>
#include<intrins.h>
#define uint unsigned int
#define uchar unsigned char
sbit key = P0^0;
void Delay_ms(uint xms) //延时程序
{
uint i, j;
for(i = xms; i > 0; i--) for(j = 115; j > 0; j--);
}
void main() //同上
{
……
本程序,仿真运行的截图如下:
实践证明,前面给出的程序,是完全正确的。
我要的是两个按键的,KEY1控制左移KEY2控制右移。
你给的程序只有1个按键,只能左移。
哦,看你的程序,仅仅给出一个按键接口,就以为,你是一个按键,没有调好。
再增加一个,也不难,复制一下前面的程序,简单的改改即可。
指定一个按键接口 KEY2,主函数程序修改如下:
void main()
{
uchar led_data=0xfe;//默认第一位亮
P1=led_data;
while(1) {
if(key==0) {
Delay_ms(10);
if(key==0) {
while(!key);
led_data=_crol_(led_data,1);//led_date向左循环移动1位
P1=led_data; //一位亮
Delay_ms(200); //延时0.5s
}
}
//--------------------------控制右移部分程序如下
if(key2==0) {
Delay_ms(10);
if(key2==0) {
while(!key2);
led_data=_cror_(led_data,1);//led_date向右循环移动1位
P1=led_data; //一位亮
Delay_ms(200); //延时0.5s
}
}
//--------------------------
}
}