打印

新人请教个问题

[复制链接]
1370|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
ll_sd|  楼主 | 2011-1-18 19:14 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
最近开始学c语言,自己写了个led显示屏模块的测试程序,程序是循环运行的,把程序烧到单片机后发现dr1,dr2,clk,stb,oe都没信号输出,只有a,b,c有信号,实际显示的内容是对的。用proteus仿真这几个信号都有波形请教下是哪里出了问题。还有就是
case 0: a=0;b=0;c=0;display (0);h=1;break;

case 1: a=1;b=0;c=0;display (4);h=2;break;

case 2: a=0;b=1;c=0;display (8);h=3;break;

case 3: a=1;b=1;c=0;display (12);h=4;break;

case 4: a=0;b=0;c=1;display (16);h=5;break;

case 5: a=1;b=0;c=1;display (20);h=6;break;

case 6: a=0;b=1;c=1;display (24);h=7;break;

case 7: a=1;b=1;c=1;display (28);h=0;break;

这段程序,为什么每行的运行时间不一样。
练习.rar (19.57 KB)

相关帖子

沙发
原野之狼| | 2011-1-18 19:21 | 只看该作者
把所有资料都贴出来,避免大家给你解答问题还需要去下载文件。

使用特权

评论回复
板凳
ll_sd|  楼主 | 2011-1-18 19:24 | 只看该作者
#include <reg52.h>
#include <intrins.h>
#define uchar unsigned char
uchar dispbuf[];                /*显示缓存*/
uchar code disptab[]={
0x0f,0xf0,0x0f,0xf0,0x0f,0xf0,0x0f,0xf0,0x0f,0xf0,0x0f,0xf0,0x0f,0xf0,0x0f,0xf0,0x0f,0xf0,0x0f,0xf0,0x0f,0xf0,0x0f,0xf0,0x0f,0xf0,0x0f,0xf0,0x0f,0xf0,0x0f,0xf0,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
};
sbit s1=P3^2;        /*按键1*/
sbit s2=P3^3;        /*按键2*/
sbit dr1=P2^0;        /*DR1数据*/
sbit dr2=P2^3;        /*DR2数据*/
sbit dg1=P2^1;        /*DG1数据*/
sbit dg2=P2^4;        /*DG2数据*/
sbit db1=P2^2;        /*DB1数据*/
sbit db2=P2^5;        /*DB2数据*/
sbit clk=P3^1;        /*时钟*/
sbit stb=P1^7;        /*锁存*/
sbit oe=P1^6;        /*使能*/
sbit a=P0^0;        /*A*/
sbit b=P0^1;        /*B*/
sbit c=P0^2;        /*c*/
uchar h=0;

void senddata(uchar data1,data2)        /*发送数据,data1为1到8行数据,data2为9到16行数据,1和9、2和10~8和16行同时显示*/
{        uchar i;                       
        for(i=0;i<8;i++)
        {        if ((data1&0x01)==0)
                        dr1=0;
                 else
                        dr1=1;
                if ((data2&0x01)==0)
                        dr2=0;
                else
                        dr2=1;
                _nop_();
                _nop_();
                clk=0;
                _nop_();
                _nop_();
                clk=1;
                data1=data1>>1;
                data2=data2>>1;
        }
       
}
void display(uchar i)                /*显示子程序*/
{        senddata(disptab[i+1],disptab[i+33]);
        senddata(disptab[i+2],disptab[i+34]);
        senddata(disptab[i+3],disptab[i+35]);
        senddata(disptab[i+4],disptab[i+36]);
}
void refresh()                /*刷新子程序*/
{        oe=1;
        switch (h)
        {        case 0: a=0;b=0;c=0;display (0);h=1;break;
                case 1: a=1;b=0;c=0;display (4);h=2;break;
                case 2: a=0;b=1;c=0;display (8);h=3;break;
                case 3: a=1;b=1;c=0;display (12);h=4;break;
                case 4:        a=0;b=0;c=1;display (16);h=5;break;
                case 5: a=1;b=0;c=1;display (20);h=6;break;
                case 6: a=0;b=1;c=1;display (24);h=7;break;
                case 7: a=1;b=1;c=1;display (28);h=0;break;
                default:break;
        }
        stb=1;
        stb=0;
        oe=0;
}








main()
{        dg1=0;
        dg2=0;
        db1=0;
        db2=0;
        while(1)
        {        refresh();
               
        }
}

使用特权

评论回复
地板
原野之狼| | 2011-1-18 19:29 | 只看该作者
顺便把电路也贴出来吧
看了下代码 不知道楼主想要表达什么意思 还需要努力哈~

使用特权

评论回复
5
ll_sd|  楼主 | 2011-1-18 19:37 | 只看该作者
本帖最后由 ll_sd 于 2011-1-18 19:45 编辑

就是用单片机驱动类似74hc595的ic,只不过是有16路输出,每路都有一个独立的电流源,控制方式跟595一样的。这程序应该是一直循环才对的,但实际烧进去后只有p0.0,p0.1,p0.2有输出,其他的都没输出

使用特权

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

本版积分规则

61

主题

394

帖子

0

粉丝