[51单片机] 菜鸟求教,想用终端控制独立键盘,然后控制led。

[复制链接]
1905|19
 楼主| zoushilin 发表于 2014-4-16 17:07 | 显示全部楼层 |阅读模式
程序编译没有错误,可是用protues仿真的时候,led根本就没有反应。电路比较简单,所以应该不会有错误。想让你们帮我看看是怎么回事。程序如下:
#include<reg51.h>
sbit s1= P2^0;
sbit s2= P2^1;
sbit s3= P2^2;
void delayled()
{
   unsigned char i,j;
   for(i=0;i<250;i++)
           for(j=0;j<250;j++)
                ;
}
void delay20ms()
{
   unsigned char i,j;
   for(i=0;i<100;i++)
        for(j=0;j<60;j++)
                ;
}
void ms1()
{
        P0=0x00;
}
void ms2()
{
        P0=0xff;
}
void ms3()
{
unsigned char i,j;       
for(i=0;i<8;i++)
{
        P0=0xfe<<i;       
        delayled();
}
if(P0==0x00)
{
   for(j=0;j<8;j++)
   {
        P0=0xfe>>i;
        delayled();
   }

}
}
void main()
{
unsigned char keyval;
TMOD=0x01;
EA=1;
ET0=1;
TR0=1;
TH0=(65536-1000)/256;
TL0=(65536-1000)%256;
while(1)
{
   switch(keyval)
   {
        case 1:ms1();
        break;
        case 2:ms2();
        break;
        case 3:ms3();
        break;
}
}
}
void time0() interrupt 1
{
unsigned char keyval;
if((P0&0xf0)!=0xf0)
{
   delay20ms()        ;
   if(s1==0)
     keyval=1;
   if(s2==0)
     keyval=2;
   if(s3==0)
     keyval=3;
}
TH0=(65536-1000)/256;
TL0=(65536-1000)%256;
}
dirtwillfly 发表于 2014-4-16 17:31 | 显示全部楼层
电路是什么样的?建议楼主也提供一下。
 楼主| zoushilin 发表于 2014-4-17 08:48 | 显示全部楼层
这是图。。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
 楼主| zoushilin 发表于 2014-4-17 08:48 | 显示全部楼层
dirtwillfly 发表于 2014-4-16 17:31
电路是什么样的?建议楼主也提供一下。

电路附上来了,请帮忙看看,谢谢
dirtwillfly 发表于 2014-4-17 10:27 | 显示全部楼层
调试时,用protues里带的示波器看看IO脚是否有电平变化
justsuperone 发表于 2014-4-17 10:33 | 显示全部楼层
那个排阻和LED为什么分开放置  不是说P0需要上啦电阻吗  我感觉你那个排阻和LED城并联了  所以导通的时候电流直接经过排阻而LED没有电流
ayb_ice 发表于 2014-4-17 10:42 | 显示全部楼层
LED灯都接错了
 楼主| zoushilin 发表于 2014-4-17 10:54 | 显示全部楼层
justsuperone 发表于 2014-4-17 10:33
那个排阻和LED为什么分开放置  不是说P0需要上啦电阻吗  我感觉你那个排阻和LED城并联了  所以导通的时候电 ...

没有关系的吧。之前也是用这个图做的led灯调试
 楼主| zoushilin 发表于 2014-4-17 10:54 | 显示全部楼层
ayb_ice 发表于 2014-4-17 10:42
LED灯都接错了

哪里错了呢?
ayb_ice 发表于 2014-4-17 11:03 | 显示全部楼层
本帖最后由 ayb_ice 于 2014-4-17 11:04 编辑
zoushilin 发表于 2014-4-17 10:54
哪里错了呢?

无语了

电阻与LED串联,不是并联
fmzhangpei241 发表于 2014-4-17 12:54 | 显示全部楼层
现在什么个情况
 楼主| zoushilin 发表于 2014-4-17 13:05 | 显示全部楼层
fmzhangpei241 发表于 2014-4-17 12:54
现在什么个情况

还是不行呢。
 楼主| zoushilin 发表于 2014-4-17 13:12 | 显示全部楼层
dirtwillfly 发表于 2014-4-17 10:27
调试时,用protues里带的示波器看看IO脚是否有电平变化

没有变化额。。。是不是程序有问题。
通宵敲代码 发表于 2014-4-17 13:19 | 显示全部楼层
这问题,不好找,可能的地方太多了。
ayb_ice 发表于 2014-4-17 15:46 | 显示全部楼层







#include<reg51.h>

sbit s1= P2^0;
sbit s2= P2^1;
sbit s3= P2^2;

void delayled()
{
        unsigned char i,j;

        for(i=0;i<250;i++)
                for(j=0;j<250;j++);
}

void delay20ms()
{
        unsigned char i,j;

        for(i=0;i<100;i++)
                for(j=0;j<60;j++);
}

void ms1()
{
    P0=0x00;
}

void ms2()
{
    P0=0xff;
}

void ms3()
{
        unsigned char i,j;

        for(i=0;i<8;i++)
        {
                P0=0xfe<<i;
                delayled();
        }
        if(P0==0x00)
        {
                for(j=0;j<8;j++)
                {
                        P0=0xfe>>i;
                        delayled();
                }
        }
}


unsigned char keyval = 0;

void main()
{
        TMOD=0x01;
        TH0=(65536-1000)/256;
        TL0=(65536-1000)%256;
        EA=1;
        ET0=1;
        TR0=1;

        while(1)
        {
                switch(keyval)
                {
                case 1:
                        ms1();
                        break;
                case 2:
                        ms2();
                        break;
                case 3:
                        ms3();
                        break;
                }
        }
}


void time0() interrupt 1
{
        unsigned char t = 0;

        TH0=(65536-1000)/256;
        TL0=(65536-1000)%256;

        if((P0&0xf0) != 0xf0)
        {
                delay20ms();
                if(s1 == 0){
                        t=1;
                }else
                if(s2 == 0){
                        t=2;
                }else{
                if(s3 == 0)
                        t=3;
                }
        }

        keyval = t;
}







ayb_ice 发表于 2014-4-17 16:28 | 显示全部楼层
T0中断才能1MS,中断延时20MS,太有才了
 楼主| zoushilin 发表于 2014-4-17 16:49 | 显示全部楼层
ayb_ice 发表于 2014-4-17 15:46
#include

sbit s1= P2^0;

还是不行呀?P0口根本就没有变化。你的意思是要把T0的延时大于中断延时吗?
ayb_ice 发表于 2014-4-17 17:27 | 显示全部楼层
整个文件都发出来
qq312448494 发表于 2014-4-18 13:27 | 显示全部楼层
你按键接的P2口,中断里面判断的P0口是怎么回事?
qq312448494 发表于 2014-4-18 13:28 | 显示全部楼层
另外,中断里面还加20ms延时函数?你的中断周期也才1000us左右啊
您需要登录后才可以回帖 登录 | 注册

本版积分规则

7

主题

61

帖子

1

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