标题:
新人,希望大神们相助。真心不会按下K1键,P1口的LED灯从D1到D8依次循环点亮。
[打印本页]
作者:
华山论剑
时间:
2014-12-11 16:31
标题:
新人,希望大神们相助。真心不会按下K1键,P1口的LED灯从D1到D8依次循环点亮。
11.png
(153.15 KB, 下载次数: 159)
下载附件
根据此图
2014-12-11 16:28 上传
根据上图,编写程序实现以下功能:
按下K1键,P1口的LED灯从D1到D8依次循环点亮。
按下K2键,P1口的LED灯从D8到D1依次循环点亮。
K1键和K2键同时按下时,发光二极管全灭。
作者:
dgahz
时间:
2014-12-11 20:32
共同学习,抛砖引玉,不要笑:
#include <reg51.H>
#include <intrins.H>
sbit k1=P3^6;
sbit k2=P3^7;
void delay(int z)
{
int x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
void main()
{
while(1)
{
if(k1==0&&k2==1)
{ P1=0xfe;
delay(5);
if(k1==0&&k2==1)
{
while(k2)
{
P1=_crol_(P1,1);
delay(500);
}
}
}
if(k2==0&&k1==1)
{ P1=0xfe;
delay(5);
if(k2==0&&k1==1)
{
while(k1)
{
P1=_cror_(P1,1);
delay(500);
}
}
}
if(k1||k2==0)
P1=0xff;
}
}
作者:
jiashun
时间:
2014-12-11 20:37
本帖最后由 jiashun 于 2014-12-11 20:45 编辑
#include<reg52.h> //包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义
void Delay(unsigned int t); //函数声明
/*------------------------------------------------
主函数
------------------------------------------------*/
void main (void)
{
unsigned char i; //定义一个无符号字符型局部变量 i 取值范围 0~255
Delay(50000);
if(P3.6=0)
{
P1=0xfe; //赋初始值
while (1) //主循环
{
for(i=0;i<8;i++) //加入 for循环,表明for循环大括号中的程序循环执行8次
{
Delay(50000);
P1<<=1;
P1=P1|0x01; //右移后,最右端自动赋值0,所以需要该语句赋值1
}
P1=0xfe; //重新赋初始值
//主循环中添加其他需要一直工作的程序
}
}
else if( P3.7=0)
{
P1=0x7f; //赋初始值
while (1) //主循环
{
for(i=0;i<8;i++) //加入 for循环,表明for循环大括号中的程序循环执行8次
{
Delay(50000);
P1>>=1;
P1=P1|0x80;
//右移后,最左端自动赋值0,所以需要该语句赋值1
}
P1=0x7f; //重新赋初始值
//主循环中添加其他需要一直工作的程序
}
}
else if (P3.6=0&&P3.7=0)
{
P1=0xff;
}
/*------------------------------------------------
延时函数,含有输入参数 unsigned int t,无返回值
unsigned int 是定义无符号整形变量,其值的范围是
0~65535
------------------------------------------------*/
void Delay(unsigned int t)
{
while(--t);
}
作者:
dgahz
时间:
2014-12-16 21:46
新思路实现
#include <reg51.H>
#include <intrins.H>
sbit k1=P3^6;
sbit k2=P3^7;
void main()
{
unsigned int i=0;
unsigned char k;
while(1)
{
if((k1==0)&&(k2==0))
{
P1=0xff;
}
else
{
if(k1==0)
{ P1=0x7f;
k=1;
}
if(k2==0)
{ P1=0xfe;
k=2;
}
}
switch(k)
{
case 1:
i++;
if(i>13000)
{
i=0;
P1=_cror_(P1,1);
}
break;
case 2:
i++;
if(i>13000)
{
i=0;
P1=_crol_(P1,1);
}
break;
}
}
}
作者:
菜鸟一个666
时间:
2014-12-17 15:45
#include<reg52.h>
#include<intrins.h>
#define uint unsigned int
#define uchar unsigned char
#include<reg52.h>
#include<intrins.h>
#define uint unsigned int
#define uchar unsigned char
sbit fmq=P3^6;
sbit k1=P3^2;
void delayms(uint);
uchar a;
uint z;
void delayms(uint x)
{
uint i,j;
for(i=x;i>0;i--)
for(j=1;j<100;j++);
}
void delay500us()
{
unsigned char j;
for(j=0;j<57;j++);
}
void beer()
{
fmq=0;
delay500us();
fmq=1;
delay500us();
}
void display()
{
unsigned int t;
while(1){
for(t=0;t<500;t++)
{
beer();
}
}
}
void main()
{z=0;
EA=1;
EX0=1;
IT0=1;
a=0xfe;
P0=a;
delayms(500);
a=_crol_(a,1);
while(1);
}
void int0() interrupt 0
{
while(1){
if(k1==0)
{
z++;
if(z%2==0)
{
display();
}
}
}
}
sbit k1=P3^2;
void delayms(uint);
uchar a;
uint z;
void delayms(uint x)
{
uint i,j;
for(i=x;i>0;i--)
for(j=1;j<100;j++);
}
void delay500us()
{
unsigned char j;
for(j=0;j<57;j++);
}
void beer()
{
fmq=0;
delay500us();
fmq=1;
delay500us();
}
void display()
{
unsigned int t;
while(1){
for(t=0;t<500;t++)
{
beer();
}
}
}
void main()
{z=0;
EA=1;
EX0=1;
IT0=1;
a=0xfe;
P0=a;
delayms(500);
a=_crol_(a,1);
while(1);
}
void int0() interrupt 0
{
while(1){
if(k1==0)
{
z++;
if(z%2==0)
{
display();
}
}
}
}
这个实用中断控制的,比较简单,希望有所帮助,,
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1