qq_59858469 2021-07-11 23:44 采纳率: 0%
浏览 62

求一个节日彩灯控制器的系统工作原理

描述一下节日彩灯控制器的系统工作原理,要写报告
#include "intrins.h"
sbit K1 = P1^0;
sbit K2 = P1^1;
sbit K3 = P1^2;
sbit K4 = P1^3;
sbit K5 = P1^4;
sbit K6 = P1^5;
void Delay100ms()
{
unsigned char i, j, k;

nop();
nop();
i = 5;
j = 52;
k = 195;
do
{
do
{
while (--k);
} while (--j);
} while (--i);
}
void DelayK(unsigned char t)
{
while(t--);
}
unsigned char i;

void Key()
{
if(K1==0)
{
DelayK(100);
if(K1==0)
{
P0 = 0xf9;
for(i = 0;i < 8;i++)
{
P2=(0x1<<i);
Delay100ms();
}
while(K1==0);
P0 = 0;
for(i = 0;i < 8;i++)
{
P2=(0x1>>i);
Delay100ms();
}
}
}
if(K2==0)
{
DelayK(100);
if(K2==0)
{
P0 = 0xa4;
for(i = 0;i < 7;i++)
{
P2=(0x1<<i);
Delay100ms();
}
while(K2==0);
P0 = 0;
for(i = 0;i < 7;i++)
{
P2=(0x1>>i);
Delay100ms();
}
}
}
if(K3==0)
{
DelayK(100);
if(K3==0)
{
P0 = 0xb0;
for(i = 0;i < 6;i++)
{
P2=(0x1<<i);
Delay100ms();
}
while(K3==0);
P0 = 0;
for(i = 0;i < 6;i++)
{
P2=(0x1>>i);
Delay100ms();
}
}
}
if(K4==0)
{
DelayK(100);
if(K4==0)
{
P0 = 0x99;
for(i = 0;i < 8;i++)
{
P2=(0x2<<i);
Delay100ms();
}
while(K4==0);
P0 = 0;
for(i = 0;i <5;i++)
{
P2=(0x1>>i);
Delay100ms();
}
}
}
if(K5==0)
{
DelayK(100);
if(K5==0)
{
P2 = 0;
}
}

if(K6==0)
{
DelayK(100);
if(K6==0)
{
P2 = 0xff;
}
}
}
void main()
{
while(1)
{
Key();
}
}
img

  • 写回答

1条回答 默认 最新

  • 丘比特惩罚陆 Java领域新星创作者 2023-04-13 08:45
    关注

    这不给我点个关注???
    通过P1口读取控制器的按键输入,然后控制P0口的LED显示灯和P2口的控制灯的亮灭。

    当按下K1时,P0口的LED显示为0xf9,表示将控制灯从右到左依次点亮,并且每个灯点亮的时间为100ms。

    当按下K2时,P0口的LED显示为0xa4,表示将控制灯从左到右依次点亮,并且每个灯点亮的时间为100ms。

    当按下K3时,P0口的LED显示为0xb0,表示将控制灯从中间往两侧依次点亮,并且每个灯点亮的时间为100ms。

    当按下K4时,P0口的LED显示为0x99,表示将控制灯从左上到右下斜线方向依次点亮,并且每个灯点亮的时间为100ms。

    当按下K5时,P2口的控制灯全灭,即所有的LED都熄灭。

    当按下K6时,P2口的控制灯全亮,即所有的LED都点亮。

    在控制LED灯点亮的过程中,Delay100ms()函数用于延迟100ms时间,DelayK()函数用于延迟t个时间单位。通过循环控制每个LED灯的点亮和熄灭,达到控制彩灯的效果。

    评论

报告相同问题?

问题事件

  • 创建了问题 7月11日

悬赏问题

  • ¥15 Stata链式中介效应代码修改
  • ¥15 latex投稿显示click download
  • ¥15 请问读取环境变量文件失败是什么原因?
  • ¥15 在若依框架下实现人脸识别
  • ¥15 网络科学导论,网络控制
  • ¥100 安卓tv程序连接SQLSERVER2008问题
  • ¥15 利用Sentinel-2和Landsat8做一个水库的长时序NDVI的对比,为什么Snetinel-2计算的结果最小值特别小,而Lansat8就很平均
  • ¥15 metadata提取的PDF元数据,如何转换为一个Excel
  • ¥15 关于arduino编程toCharArray()函数的使用
  • ¥100 vc++混合CEF采用CLR方式编译报错