打印
[51单片机]

菜鸟求教,想用终端控制独立键盘,然后控制led。

[复制链接]
1524|19
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
程序编译没有错误,可是用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 | 只看该作者
这是图。。

clip_image002.jpg (56 KB )

clip_image002.jpg

使用特权

评论回复
地板
zoushilin|  楼主 | 2014-4-17 08:48 | 只看该作者
dirtwillfly 发表于 2014-4-16 17:31
电路是什么样的?建议楼主也提供一下。

电路附上来了,请帮忙看看,谢谢

使用特权

评论回复
5
dirtwillfly| | 2014-4-17 10:27 | 只看该作者
调试时,用protues里带的示波器看看IO脚是否有电平变化

使用特权

评论回复
6
justsuperone| | 2014-4-17 10:33 | 只看该作者
那个排阻和LED为什么分开放置  不是说P0需要上啦电阻吗  我感觉你那个排阻和LED城并联了  所以导通的时候电流直接经过排阻而LED没有电流

使用特权

评论回复
7
ayb_ice| | 2014-4-17 10:42 | 只看该作者
LED灯都接错了

使用特权

评论回复
8
zoushilin|  楼主 | 2014-4-17 10:54 | 只看该作者
justsuperone 发表于 2014-4-17 10:33
那个排阻和LED为什么分开放置  不是说P0需要上啦电阻吗  我感觉你那个排阻和LED城并联了  所以导通的时候电 ...

没有关系的吧。之前也是用这个图做的led灯调试

使用特权

评论回复
9
zoushilin|  楼主 | 2014-4-17 10:54 | 只看该作者
ayb_ice 发表于 2014-4-17 10:42
LED灯都接错了

哪里错了呢?

使用特权

评论回复
10
ayb_ice| | 2014-4-17 11:03 | 只看该作者
本帖最后由 ayb_ice 于 2014-4-17 11:04 编辑
zoushilin 发表于 2014-4-17 10:54
哪里错了呢?

无语了

电阻与LED串联,不是并联

使用特权

评论回复
11
fmzhangpei241| | 2014-4-17 12:54 | 只看该作者
现在什么个情况

使用特权

评论回复
12
zoushilin|  楼主 | 2014-4-17 13:05 | 只看该作者
fmzhangpei241 发表于 2014-4-17 12:54
现在什么个情况

还是不行呢。

使用特权

评论回复
13
zoushilin|  楼主 | 2014-4-17 13:12 | 只看该作者
dirtwillfly 发表于 2014-4-17 10:27
调试时,用protues里带的示波器看看IO脚是否有电平变化

没有变化额。。。是不是程序有问题。

使用特权

评论回复
14
通宵敲代码| | 2014-4-17 13:19 | 只看该作者
这问题,不好找,可能的地方太多了。

使用特权

评论回复
15
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;
}







使用特权

评论回复
16
ayb_ice| | 2014-4-17 16:28 | 只看该作者
T0中断才能1MS,中断延时20MS,太有才了

使用特权

评论回复
17
zoushilin|  楼主 | 2014-4-17 16:49 | 只看该作者
ayb_ice 发表于 2014-4-17 15:46
#include

sbit s1= P2^0;

还是不行呀?P0口根本就没有变化。你的意思是要把T0的延时大于中断延时吗?

使用特权

评论回复
18
ayb_ice| | 2014-4-17 17:27 | 只看该作者
整个文件都发出来

使用特权

评论回复
19
qq312448494| | 2014-4-18 13:27 | 只看该作者
你按键接的P2口,中断里面判断的P0口是怎么回事?

使用特权

评论回复
20
qq312448494| | 2014-4-18 13:28 | 只看该作者
另外,中断里面还加20ms延时函数?你的中断周期也才1000us左右啊

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

7

主题

61

帖子

1

粉丝