7SEG-MPX4-CC能否实现显示四段不同数字?


ISIS中,7SEG-MPX4-CC能否实现显示四段不同数字?比如 “1234”,我现在只会实现同样的字符,比如“3333”,如附件中图示。如果能实现具体应该怎么做?


7seg.JPG


我也来说两句 查看全部回复

最新回复

  • budhy (2008-6-27 14:53:02)

    QUOTE:

    原帖由 fzpxp 于 2008-6-27 13:47 发表
    ISIS中,7SEG-MPX4-CC能否实现显示四段不同数字?比如 “1234”,我现在只会实现同样的字符,比如“3333”,如附件中图示。如果能实现具体应该怎么做?
    当然能够实现显示四段不同数字。把你的原理图和程序船上来,我们会帮你的。
  • fzpxp (2008-6-27 15:03:51)

    程序和图都在附件中,请指点!谢谢!

    7-seg.rar
    (2008-06-27 15:03:51, Size: 31.7 KB, Downloads: 1)

  • budhy (2008-6-27 17:48:10)

    给你修改好了,主要是给你看动态显示是怎么回事。

    [ 本帖最后由 budhy 于 2008-6-27 17:50 编辑 ]


    Snap1.jpg

    7-SEG.rar
    (2008-06-27 17:50:36, Size: 16.3 KB, Downloads: 16)

  • fzpxp (2008-6-27 21:04:12)

    哈哈,太感谢了大哥,学习中。
  • fzpxp (2008-7-11 09:40:24)

    请问大哥,C程序中初始引入unsigned char image[4]={0xff,0xff,0xff,0xff};并且数组全都是0xff是什么目的呢?
    还有延时子函数中 i  = 1000;  while (i--)0 = 0xFF;的P0 = 0xFF是什么意思,我试着把这句去掉好像也没影响到什么
  • budhy (2008-7-11 09:51:22)

    QUOTE:

    原帖由 fzpxp 于 2008-7-11 09:40 发表
    请问大哥,
    1. C程序中初始引入unsigned char image[4]={0xff,0xff,0xff,0xff};并且数组全都是0xff是什么目的呢?
    2. 还有延时子函数中 i  = 1000;  while (i--)0 = 0xFF;的P0 = 0xFF是什么意思,我试着把这句去掉好像也没影响 ...

  1. 没有什么特别目的,0xFF 是让 P0 端口不接地,没有亮着的 LED
  2. 是让 P0 端口不接地一闪时,实际线路上很需要这样


[ 本帖最后由 budhy 于 2008-7-11 09:57 编辑 ]
  • fzpxp (2008-7-11 10:24:32)

    1.就是程序初始化时没有灯亮了?
    2."是让 P0 端口不接地一闪时"这句话是什么意思,我不太理解?
  • budhy (2008-7-11 10:32:27)

    QUOTE:

    原帖由 fzpxp 于 2008-7-11 10:24 发表
    1.就是程序初始化时没有灯亮了?
    2."是让 P0 端口不接地一闪时"这句话是什么意思,我不太理解?
    1. 对,就那么简单
    2. 是让一闪时没有灯亮,这样数据管会显示的更清晰
  • fzpxp (2008-7-11 10:36:33)

    1.就是程序初始化时没有灯亮了?
    2."是让 P0 端口不接地一闪时"就是P0口瞬间灭一下吧?但是这样做是什么目的呢?delay过后第二个数码管位选选通,第一个位选断开(P2 = mask[1];)是不是就没有必要在延时中加P0 = 0xFF;了?还有刚才您为什么说“实际线路上很需要这样”。请赎我是不是有点钻牛角,不吝赐教
  • fzpxp (2008-7-11 11:22:53)

    刚才我又试了一下,延时中加P0 = 0xFF时可以正常显示“1234”,去掉P0 = 0xFF这句后第一二三个数码管都不亮,只有第四个显示"L",这就是您所说的“数据管会显示的更清晰”吗?从程序上我理解不了为什么不加P0 = 0xFF,会显示成"L",
    再追加一个问题:
    3.理论上i的值越小就是扫描频率越高,应该显示的越稳定清晰。但是试着把i该成50可看到"12"偶尔会灭一次,i=10,所有数码管就都不稳定了,为什么会出现这种情况?
  • budhy (2008-7-11 13:02:52)

    QUOTE:

    原帖由 fzpxp 于 2008-7-11 11:22 发表
    1. 刚才我又试了一下,延时中加P0 = 0xFF时可以正常显示“1234”,去掉P0 = 0xFF这句后第一二三个数码管都不亮,只有第四个显示"L",这就是您所说的“数据管会显示的更清晰”吗?从程序上我理解不了为什么不加P0 = 0xFF,会显示成"L",
    2. 理论上i的值越小就是扫描频率越高,应该显示的越稳定清晰。但是试着把i该成50可看到"12"偶尔会灭一次,i=10,所有数码管就都不稳定了,为什么会出现这种情况? ...

    1. 这么一说,我可以确定的告诉你,这是 Proteus 的一个 BUG, P0=0xFF, 在仿真中是为了解决这个 BUG, 在实际线路中会使显示更清晰。当初你说 P0=0xFF没有起作用,我感到奇怪。
    2. 不能说扫描频率越高,显示的越稳定清晰。扫描频率过高,我们的眼睛看不到点亮的 LED。Proteus 也仿真不了。
  • fzpxp (2008-7-11 13:05:34)

    根据您的程序我画了个数码管通断时序图。
    其中t11,t21,t31,t41分别表示四个数码管的接通时序,t10,t20,t30,t40分别表示四个数 码管的关断时序。
    其中t11=t21=t31=t41;t10=t20=t30=t40. t11="delay()" //“*”表示*指令执行的时间
          t10="P0 = image[1]"+"P2 = mask[1]"
    如果把延时程序中的P0 = 0xFF;语句去掉则第一个数码管显示"1"延时完后瞬间显示一下"2"才关断,然后第二个数码管显示“2”延 时完后瞬间显示以下"3"才关断.....其中瞬间指的是"P0 = image[1];"+P2 = mask[1]; 这条指令的执行时间,
    所以第一个数码管应该关断时错误的显示了第二个数码管应该显示 的"2",如图2,就是说四个数码管没有同时关断的时刻,如图2
    t11="delay()"+"P0 = image[1]"+"P2 = mask[1]"
    以上是我对为什么DELAY中加P0 = 0xFF;的理解,准确的说不是加上后显示更清晰,而是 去掉后四个数码管显示通断时序有点错乱了。

    以下是我的一点其他见解,我觉得P0 = 0xFF可以不加而保证通断时序不错乱
    您的程序中 P0 = image[0]; P2 = mask[0]; delay(); 只需要调换一下顺序,先选则位选再选择段选,其他三个数码管也依次换一下顺序 P2 = mask[0]; P0 = image[0]; delay(); 经测试未再出现“L”这样的显示错误,而能正常显示“1234”
    请大哥指教一下,谢谢!


    图.jpg