打印

求助,大家帮我看看,怎么就显示一个0呢。

[复制链接]
1417|19
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
孟令民|  楼主 | 2014-2-10 18:25 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
Latch, tc, TE, AN, AI
本帖最后由 孟令民 于 2014-2-11 17:28 编辑

求助,大家帮我看看,怎么就显示一个0呢。附上代码。先谢谢啦。补充下dateport=weima[1]; dateport=duan[1];都写成这样就能正常显示,换成qian bai就都不好用了。
#include<c:\Keil\C51\INC\STC\STC12c5a60S2.H>
#define uchar unsigned char
#define uint  unsigned int
#define dateport P0
sbit LATCH1=P2^2;
sbit LATCH2=P2^3;
uchar i=0,qian,bai,shi,ge;


unsigned char code duanma[8]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07};
unsigned char code weima[8]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};


void delay(unsigned int t)
{
while(--t);
}

unsigned char q=3450;
void display()
{  
         
  qian=q/1000;
        bai=q%1000/100;
        shi=q%100/10;
        ge=q%10;
}
void main()
{
        P0=0x00;

while(1)
{
         
  dateport=weima[qian];
         LATCH2=1;
         LATCH2=0;
         
         dateport=duanma[qian];
         LATCH1=1;
         LATCH1=0;
         delay(200);
         
          dateport=weima[bai];
         LATCH2=1;
         LATCH2=0;
         
         dateport=duanma[bai];
         LATCH1=1;
         LATCH1=0;
         delay(200);         
         
          dateport=weima[shi];
         LATCH2=1;
         LATCH2=0;
         
         dateport=duanma[shi];
         LATCH1=1;
         LATCH1=0;
         delay(200);         
         
          dateport=weima[ge];
         LATCH2=1;
         LATCH2=0;
         
         dateport=duanma[ge];
         LATCH1=1;
         LATCH1=0;
         delay(200);         


/* dateport=weima;
         LATCH2=1;
         LATCH2=0;
         
         dateport=duanma;
         LATCH1=1;
         LATCH1=0;
         delay(200);
        */
         i++;
         if(8==i) i=0;
}
}

以下是正解。在坛友的帮助下修改的,不足之处请高手指教。
#include<c:\Keil\C51\INC\STC\STC12c5a60S2.H>
#define uchar unsigned char
#define uint  unsigned int
#define dateport P0
sbit LATCH1=P2^2;      //段选
sbit LATCH2=P2^3;      //位选

unsigned long q=1234;
uchar qian,bai,shi,ge;
uchar code table[]={                                  //数组


                        0x3f,0x06,0x5b,0x4f,


                        0x66,0x6d,0x7d,0x07,


                        0x7f,0x6f,0x77,0x7c,


                        0x39,0x5e,0x79,0x71,

                    };
/********delay 函数**********/
void delay(unsigned int t)
{
while(--t);
}

/*********display显示函数***/
void display()
{  
qian=q/1000;
         bai=q%1000/100;
         shi=q%100/10;
         ge=q%10;
         
         LATCH1=1;
   dateport=table[qian];
         LATCH1=0;
         dateport=0xff;
         LATCH2=1;
         dateport=0xfe;
         LATCH2=0;
         delay(200);

   LATCH1=1;
   dateport=table[bai];
         LATCH1=0;
         dateport=0xff;
         LATCH2=1;
         dateport=0xfd;
         LATCH2=0;
         delay(100);
         
         LATCH1=1;
   dateport=table[shi];
         LATCH1=0;
         dateport=0xff;
         LATCH2=1;
         dateport=0xfb;
         LATCH2=0;
         delay(100);
         
         LATCH1=1;
   dateport=table[ge];
         LATCH1=0;
         dateport=0xff;
         LATCH2=1;
         dateport=0xf7;
         LATCH2=0;
         delay(10);

}
/********main主函数*****/
void main()
{
        P0=0x00;                          //初始化P0 i/o
while(1)
{
          display();                      //调用display函数

}
}




相关帖子

沙发
香水橙| | 2014-2-10 21:19 | 只看该作者
这句明显不对: unsigned char q=3450;

还有,哪里调用了display()?

使用特权

评论回复
板凳
谈的元| | 2014-2-10 21:48 | 只看该作者
unsigned char q=3450;
修改为 unsigned  long  q=3450;

使用特权

评论回复
地板
liubin1109| | 2014-2-11 01:57 | 只看该作者
delay()不该在LATCH2=0;后面,display()没调用。。。

使用特权

评论回复
5
孟令民|  楼主 | 2014-2-11 12:53 | 只看该作者
香水橙 发表于 2014-2-10 21:19
这句明显不对: unsigned char q=3450;

还有,哪里调用了display()?

谢谢啦,小弟菜鸟

使用特权

评论回复
6
孟令民|  楼主 | 2014-2-11 12:54 | 只看该作者
liubin1109 发表于 2014-2-11 01:57
delay()不该在LATCH2=0;后面,display()没调用。。。

谢谢

使用特权

评论回复
7
孟令民|  楼主 | 2014-2-11 12:54 | 只看该作者
谈的元 发表于 2014-2-10 21:48
unsigned char q=3450;
修改为 unsigned  long  q=3450;

谢谢

使用特权

评论回复
8
孟令民|  楼主 | 2014-2-11 13:09 | 只看该作者
liubin1109 发表于 2014-2-11 01:57
delay()不该在LATCH2=0;后面,display()没调用。。。

为什么delay不能放在LATCH2=0后面呢

使用特权

评论回复
9
孟令民|  楼主 | 2014-2-11 13:12 | 只看该作者
香水橙 发表于 2014-2-10 21:19
这句明显不对: unsigned char q=3450;

还有,哪里调用了display()?

我改成这样了,unsigned long q=3450;display也调用了,现在显示三个0了,这也不是我要的效果啊。您再帮我看看哪里还有错.谢谢啦

使用特权

评论回复
10
gx_huang| | 2014-2-11 13:24 | 只看该作者
你还是委托别人开发得了。

使用特权

评论回复
11
孟令民|  楼主 | 2014-2-11 13:29 | 只看该作者
gx_huang 发表于 2014-2-11 13:24
你还是委托别人开发得了。

谢谢,我是学习的,所以不用找别人开发。

使用特权

评论回复
12
gx_huang| | 2014-2-11 14:23 | 只看该作者
你既然是学习的,应该有最起码的调试手段。
分段检查,比如显示固定的1234之类的。
程序也应该全面一些,不要局部,硬件连接要有说明,否则大家看不懂。
另外,扫描显示的原理要清楚。
先显示一位,消隐,再显示下一位。你目前没有消隐,可能有鬼影。

使用特权

评论回复
13
孟令民|  楼主 | 2014-2-11 14:25 | 只看该作者
gx_huang 发表于 2014-2-11 14:23
你既然是学习的,应该有最起码的调试手段。
分段检查,比如显示固定的1234之类的。
程序也应该全面一些,不 ...

嗯,谢谢

使用特权

评论回复
14
gx_huang| | 2014-2-11 14:38 | 只看该作者
段码个数怎么是8?0-9也有10个呀?
位码怎么是8?个十百千也不过是4呀?
你知道扫描显示的道理吗?
dateport=weima[ge];是什么意思?ge应该是固定的一个数字,比如0。

使用特权

评论回复
15
gx_huang| | 2014-2-11 14:39 | 只看该作者
扫描显示的硬件原理都不懂,编什么驱动软件?

使用特权

评论回复
16
孟令民|  楼主 | 2014-2-11 17:26 | 只看该作者
gx_huang 发表于 2014-2-11 14:38
段码个数怎么是8?0-9也有10个呀?
位码怎么是8?个十百千也不过是4呀?
你知道扫描显示的道理吗?

谢谢您的回复,我写好了,帖子更新了我的答案,不足之处还请指教。

使用特权

评论回复
17
gx_huang| | 2014-2-11 17:29 | 只看该作者
孟令民 发表于 2014-2-11 17:26
谢谢您的回复,我写好了,帖子更新了我的答案,不足之处还请指教。

不过还是有问题的。
只能显示0-7,8、9怎么显示?
段码数组不应该只有8个呀。
----不好意思,没有看到你后面的修改。

使用特权

评论回复
18
孟令民|  楼主 | 2014-2-11 17:33 | 只看该作者
gx_huang 发表于 2014-2-11 17:29
不过还是有问题的。
只能显示0-7,8、9怎么显示?
段码数组不应该只有8个呀。

谢谢啦,暂时这么几个数就够用了,要显示8.9很简单了,是不是呀。谢谢指教,学习了,小弟跨专业自己学着玩的还处于菜鸟级别还请多多指教哈。:)

使用特权

评论回复
19
谈的元| | 2014-2-11 19:53 | 只看该作者
bai=q%1000/100;
         shi=q%100/10;
         ge=q%10;


修改为:

      bai=5;
         shi=2;
         ge=3;
//一步步定位

使用特权

评论回复
20
孟令民|  楼主 | 2014-2-11 22:32 | 只看该作者
谈的元 发表于 2014-2-11 19:53
bai=q%1000/100;
         shi=q%100/10;
         ge=q%10;

谢谢,我已经解决了。

使用特权

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

本版积分规则

个人签名:天宏科技 专业 专注温控工控自动化 QQ 496542965

54

主题

722

帖子

1

粉丝