求解双色LED

[复制链接]
2870|8
 楼主| qujianp 发表于 2008-12-29 15:03 | 显示全部楼层 |阅读模式

#include<reg51.h> 
#define uchar unsigned char 
#define uint unsigned int 
uchar code TAB[]={0X81,0XBF,0XBF,0X81,0XFD,0XFD,0XFD,0X81, 
        0X81,0XBF,0XBF,0X81,0XBF,0XBF,0XBF,0X81, 
        0XDD,0XDD,0XDD,0X81,0XDF,0XDF,0XDF,0XDF, 
        0X81,0xFD,0xFD,0x81,0xBF,0xBF,0xBD,0xC3}; 
uchar i,t; 
delay(uchar t) 

 while(t--) 
 {;}      

void main(void) 
{uchar N,T; 
  while(1) 
  { 
   for(N=0;N<4;N++) 
   for(T=0;T<200;T++) 
   { 
    P2=0XFE; 
    for(i=0;i<8;i++) 
    {      
     P1=TAB[i+8*N]|P0;        
     delay(100); 
     P2=(P2<<1)|(P2>>7); 
  
    } 
   } 
 } 

上面的程序当LED亮的时候是红色,下面的是绿色 
#include<reg51.h> 
#define uchar unsigned char 
#define uint unsigned int 
uchar code TAB[]={0X81,0XBF,0XBF,0X81,0XFD,0XFD,0XFD,0X81, 
        0X81,0XBF,0XBF,0X81,0XBF,0XBF,0XBF,0X81, 
        0XDD,0XDD,0XDD,0X81,0XDF,0XDF,0XDF,0XDF, 
        0X81,0xFD,0xFD,0x81,0xBF,0xBF,0xBD,0xC3}; 
uchar i,t; 
delay(uchar t) 

 while(t--) 
 {;}      

void main(void) 
{uchar N,T; 
  while(1) 
  { 
   for(N=0;N<4;N++) 
   for(T=0;T<200;T++) 
   { 
    P2=0XFE; 
    for(i=0;i<8;i++) 
    {      
     P0=TAB[i+8*N]|P0;        
     delay(100); 
     P2=(P2<<1)|(P2>>7); 
  
    } 
   } 
 } 

请问如何能这个程序合并在一起呢,呈现黄色呢?
如何要出现三种情况这个程序该如何写的?
耕在此行 发表于 2008-12-29 18:50 | 显示全部楼层

楼主的提问估计要会读甲古文的人才会答.

huangqi412 发表于 2008-12-29 19:51 | 显示全部楼层

lz是一个8*8点点阵对吧

每点是2个灯 
对应位组合决定颜色
P2  P0  P1
1    0    0  红
0    1   0  绿
1    1   0  黄
0   0    0  灭
x   x   1   灭

单色时候 p2和p1送一个就可以,  黄色时候p2和p1都要送数就可以啦.
 楼主| qujianp 发表于 2008-12-30 16:07 | 显示全部楼层

求解双色LED

楼上看来没看懂电路图啊,我用的是P0、P2、P3。
如果我要想这个程序依次出现红、绿、黄,三种颜色这个程序该如何写呢,请高手帮帮忙,我才学写C,不是很会

isbit 发表于 2008-12-30 18:22 | 显示全部楼层

电路图明明是p0 p1 p2

  
LZ是大学生吗?
huangqi412 发表于 2008-12-30 19:05 | 显示全部楼层

偶崩溃了,...半天没发现p3

不是c的问题,是思维的问题,
都说的很清楚啦,4种状态怎么组合出来...
 楼主| qujianp 发表于 2008-12-31 09:27 | 显示全部楼层

求解双色LED

我是大学生,就p0、p1、p2那要出现三种状态什么写这个程序呢
huangqi412 发表于 2008-12-31 09:37 | 显示全部楼层

俺晕,,,

lz去类比下数字逻辑电路吧... 输入组合决定输出状态 想要什么输出状态就根据表格去做输入状态吧.

#define led_show(a,b,c) P2=a;p0=b;p1=c;
#define stop()  while(1)

void main()
{
uchar red,green,ground;

red=xx;
green=yy;
ground=zz;

led_show(red,green,groud);
stop();
}
 lz自己找几个数给xx,yy,zz幅值,多试几次不要说你还没看明白啊.
stycx 发表于 2008-12-31 17:40 | 显示全部楼层

来个黄色的

注意倒数第三个语句
红色   P1=TAB[i+8*N]|P0;  应该是  P1=TAB[i+8*N]|P1; 吧    
绿色   P0=TAB[i+8*N]|P0; 

所以黄色的就是       
    
include<reg51.h> 
#define uchar unsigned char 
#define uint unsigned int 
uchar code TAB[]={0X81,0XBF,0XBF,0X81,0XFD,0XFD,0XFD,0X81, 
        0X81,0XBF,0XBF,0X81,0XBF,0XBF,0XBF,0X81, 
        0XDD,0XDD,0XDD,0X81,0XDF,0XDF,0XDF,0XDF, 
        0X81,0xFD,0xFD,0x81,0xBF,0xBF,0xBD,0xC3}; 
uchar i,t; 
delay(uchar t) 

while(t--) 
{;}      

void main(void) 
{uchar N,T; 
  while(1) 
  { 
   for(N=0;N<4;N++) 
   for(T=0;T<200;T++) 
   { 
    P2=0XFE; 
    for(i=0;i<8;i++) 
    {      
     P1=TAB[i+8*N]|P1; 
     P0=TAB[i+8*N]|P0;       
     delay(100); 
     P2=(P2<<1)|(P2>>7); 
  
    } 
   } 

}
您需要登录后才可以回帖 登录 | 注册

本版积分规则

8

主题

17

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部