单片机c程序设计 关于点亮流水灯的问题 30
在Proteus中设计三个按键控制8个流水灯电路,要求三个按键K1、K2、K3分别接单片机的P0.0、P0.1、P0.2端口,8个发光二极管接P1口。画出仿真电路图。用C...
在Proteus中设计三个按键控制8个流水灯电路,要求三个按键K1、K2、K3分别接单片机的P0.0、P0.1、P0.2端口,8个发光二极管接P1口。画出仿真电路图。
用C51编程实现以下功能:
(1) 8支发光二极管每隔一段时间(时间长短自行掌握)全亮全灭一次。
(2) 按K1时,8支彩灯从上至下循环点亮。
(3) 按K2时,8支彩灯从下至上循环点亮。
(4) 按K3时,8支彩灯先下循环点亮后上循环点亮。
要求:请在程序中灵活使用if…else if…、 switch … case 、 while 、 do…while四种结构中的两种。 展开
用C51编程实现以下功能:
(1) 8支发光二极管每隔一段时间(时间长短自行掌握)全亮全灭一次。
(2) 按K1时,8支彩灯从上至下循环点亮。
(3) 按K2时,8支彩灯从下至上循环点亮。
(4) 按K3时,8支彩灯先下循环点亮后上循环点亮。
要求:请在程序中灵活使用if…else if…、 switch … case 、 while 、 do…while四种结构中的两种。 展开
4个回答
2012-09-13
展开全部
#include<reg51.h>
#define uchar unsigned char
#define uint unsigned int
sbit key1=P0^0;
sbit key2=P0^1;
sbit key3=P0^2;
void delay(uint t)
{
register uint bt;
for(;t;t--)
for(bt=0;bt<255;bt++);
}
void LedUpToDown(void)
{
uchar temp=0x01;
for(i=0;i<8;i++)
{
P2=temp;
delay(100);
temp<<=1;
}
}
void LedDownToUp(void)
{
uchar temp=0x80;
for(i=0;i<8;i++)
{
P2=temp;
delay(100);
temp>>=1;
}
}
void Flicking(void)
{
P2=0;
delay(1000);
P2=0xFF;
delay(1000);
}
voidmain(void)
{
while(1)//轮询法判断按键
{
if(key1==0)
{
LedUpToDown();
}
else if(key2==0)
{
LedDownToUp();
}
else if(key3==0)
{
LedUpToDown();
LedDownToUp();
}
else//8支发光二极管每隔一段时间(时间长短delay确定)全亮全灭一次
{
Flicking();
}
}
}
#define uchar unsigned char
#define uint unsigned int
sbit key1=P0^0;
sbit key2=P0^1;
sbit key3=P0^2;
void delay(uint t)
{
register uint bt;
for(;t;t--)
for(bt=0;bt<255;bt++);
}
void LedUpToDown(void)
{
uchar temp=0x01;
for(i=0;i<8;i++)
{
P2=temp;
delay(100);
temp<<=1;
}
}
void LedDownToUp(void)
{
uchar temp=0x80;
for(i=0;i<8;i++)
{
P2=temp;
delay(100);
temp>>=1;
}
}
void Flicking(void)
{
P2=0;
delay(1000);
P2=0xFF;
delay(1000);
}
voidmain(void)
{
while(1)//轮询法判断按键
{
if(key1==0)
{
LedUpToDown();
}
else if(key2==0)
{
LedDownToUp();
}
else if(key3==0)
{
LedUpToDown();
LedDownToUp();
}
else//8支发光二极管每隔一段时间(时间长短delay确定)全亮全灭一次
{
Flicking();
}
}
}
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
宿兴电子
2024-11-28 广告
2024-11-28 广告
联系我们一、有无震荡源 无源这里的“源”不是指电源,而是指震荡源。也就是说,有源蜂鸣器内部带震荡源,所以只要一通电就会叫。而无源内部不带震荡源,所以如果用直流信号无法令其鸣叫。 二、价格不同 有源蜂鸣器往比无源蜂鸣器贵,就是因为里面多个震荡...
点击进入详情页
本回答由宿兴电子提供
展开全部
#include <reg52.h>
#include <intrins.h> //启用 循环左移(_crol_),循环右移(_cror_)函数
char temp_L, temp_R, temp_D;
bit f; //
//-------------------------------------
void delay(int x) //延时函数
{
char i;
while(x--) for(i = 0; i < 110; i++);
}
//-------------------------------------
LEFT()
{
P1 = temp_L;
temp_L = _crol_(temp_L, 1);
}
//-------------------------------------
RIGHT()
{
P1 = temp_R;
temp_R = _cror_(temp_R, 1);
}
//-------------------------------------
L_R()
{
P1 = temp_D;
if(f) temp_D = _crol_(temp_D, 1);
else temp_D = _cror_(temp_D, 1);
}
//-------------------------------------
void main() //主函数
{
char i, j = 0;
temp_L = temp_R = temp_D = 254;
f = 1;
while(1) {
i = P3 & 0x07;
switch (i) {
case 6: LEFT(); break;
case 5: RIGHT(); break;
case 3: L_R(); j++; if(j == 7) {j = 0; f = ~f;} break;
default: P1 = ~P1;
}
delay(500);
}
}
//-------------------------------------
#include <intrins.h> //启用 循环左移(_crol_),循环右移(_cror_)函数
char temp_L, temp_R, temp_D;
bit f; //
//-------------------------------------
void delay(int x) //延时函数
{
char i;
while(x--) for(i = 0; i < 110; i++);
}
//-------------------------------------
LEFT()
{
P1 = temp_L;
temp_L = _crol_(temp_L, 1);
}
//-------------------------------------
RIGHT()
{
P1 = temp_R;
temp_R = _cror_(temp_R, 1);
}
//-------------------------------------
L_R()
{
P1 = temp_D;
if(f) temp_D = _crol_(temp_D, 1);
else temp_D = _cror_(temp_D, 1);
}
//-------------------------------------
void main() //主函数
{
char i, j = 0;
temp_L = temp_R = temp_D = 254;
f = 1;
while(1) {
i = P3 & 0x07;
switch (i) {
case 6: LEFT(); break;
case 5: RIGHT(); break;
case 3: L_R(); j++; if(j == 7) {j = 0; f = ~f;} break;
default: P1 = ~P1;
}
delay(500);
}
}
//-------------------------------------
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
我会C,但我对分数不感兴趣。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询