以下為本人已寫代碼(仿真后led僅流水,并不能實作按鍵控制led正反流水):
#include "reg52.h" //此檔案中定義了單片機的一些特殊功能暫存器
#include<intrins.h> //因為要用到左右移函式,所以加入這個頭檔案
typedef unsigned int u16; //對資料型別進行宣告定義
typedef unsigned char u8;
#define led P1
sbit k1=p3^0;
u8 a;
void delay(u16 i)
{
while(i--);
}
void main()
{
u8 i;
led=0xfe;
delay(50000); //大約延時450ms
while(1)
{
if(k1==0)
{
delay(1000);
if(k1==0)
{
a=~a;
}
}
if(a==0)
{
for(i=0;i<7;i++)
{
led=_crol_(led,1);
delay(50000); //大約延時450ms
}
}
if(a==1)
{
for(i=0;i<7;i++)
{
led=_cror_(led,1);
delay(50000); //大約延時450ms
}
}
}
}
uj5u.com熱心網友回復:
1. u8 a;a沒有初始化;
2. 如果a = 0,那么a=~a;之后a = 255。
uj5u.com熱心網友回復:
能教教我怎么改嗎?謝謝
uj5u.com熱心網友回復:
u8 a = 0; //初始化if(k1==0)
{
a= !a; //用邏輯非
}
uj5u.com熱心網友回復:
可參https://ask.csdn.net/questions/906267uj5u.com熱心網友回復:
#include <reg52.h> //流水燈回圈#include <intrins.h>
#define uchar unsigned char
#define uint unsigned int
uchar temp,a;
sbit KEY=P3^0;
void delay(uint z);
void left();
void right();
void main()
{
a=0;
temp=0xfe; //給一個初值
P1=temp; //流水燈埠
while(1)
{
if(KEY==0)
{
a++;
if(a==1)
{
left(); //左移
}
if(a==2)
{
a=0;
right(); //右移
}
}
}
}
void delay(uint z)
{
uint x,y;
for(x=z;x>0;x--)
for(y=112;y>0;y--);
}
void left()
{
temp=_crol_(temp,1);//移位
delay(500);//延時500ms
P1=temp;
}
void right()
{
temp=_cror_(temp,1);//移位
delay(500);//延時500ms
P1=temp;
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/71035.html
標籤:單片機/工控
下一篇:stc8a8k64s412
