标题: 想写一个滚动数码管滚动11位电话号码的程序,但想了半天没想出来 [打印本页]

作者: 单片机在想peach    时间: 2019-11-21 20:35
标题: 想写一个滚动数码管滚动11位电话号码的程序,但想了半天没想出来
单片机原理图已上传,滚动的时候就像是滚动love you一样滚动
以前一位老哥写的程序,但我有点小白没看懂,主要是一些语法没学比如static,按位转换等。可否求一个简单的程序或者可以解释详细一点,谢了



TX-1C型单片机开发板原理图.pdf

1015.98 KB, 下载次数: 13

原理图如下


作者: wc86110    时间: 2019-11-22 06:39
改程序
作者: moluxiyan    时间: 2019-11-22 14:14
C语言不懂得地方就先学,学会了在看程序,“小白”不是接口,学习还是要靠自己
作者: man1234567    时间: 2019-11-22 20:58
把love you和程序再加上you就够11位了。
作者: yzwzfyz    时间: 2019-11-23 11:26
本帖最后由 yzwzfyz 于 2019-11-23 23:57 编辑

方案简单:假设你的显示屏只有N位(N=8),滚显示N+X-1位(X=3,N+X=1位)。
1、做2N+X-1位一个显示缓冲区(2N+X-1=18位)。放显示的LED码,注意N+X位之后要重头重复放N-1位,如:1234567890A1234567)。
2、要点:不要将需要显示的内容直接送屏,而是送入这个缓冲区。
3、显示屏只从这个缓冲区中取8位进行显示。
4、滚动的方式有两种:
4.1、做个显示屏指针P,让P每间隔一个时间+1,并从1到N+X (1-11)之间变化,显示屏以P为起点在缓冲区中取数字显示。目的:无论P=?,你取到是总是电话号码中的连续8个值在显示,全每次后移了一位。
4.2、每间隔一个时间你让缓冲区中的显示码前移一个字节,显示屏总是取前N(8)个显示码显示。
关键点:2N+X-1缓冲区!
做程序关键是方案,写程序很容易,要明白道理。

作者: zouyadong    时间: 2022-8-24 16:36
  1. #include <STC89C5xRC.H>
  2. #include "intrins.h"
  3. #define uchar unsigned char
  4. #define uint unsigned int

  5. sbit duan=P2^6;
  6. sbit wei=P2^7;
  7. uchar code tab[18]={0x06,0x6f,0x7f,0x06,0x06,0x06,0x6d,0x66,0x5b,0x06,0x5b,0x6f,0x00,0x00,0x00,0x00,0x00,0x00};
  8. //共阴极数码管段码表
  9. uchar idata dis_buf[6]={17,17,17,17,17,17};
  10. //显示缓冲区数据(十进制)
  11. void delayms(uint i) //延时1ms函数
  12. {
  13.                 uint j;
  14.         for(;i>0;i--)
  15. for(j=120;j>0;j--)
  16. {;}
  17. }


  18. void main() //主函数
  19. {
  20.         uchar k,m,n,bitcode,segcode;
  21.         while(1)
  22.                 {
  23.                         for(n=0;n<17;n++)
  24.                         {
  25.                                 dis_buf[0]=dis_buf[1]; //数据移动
  26.                                 dis_buf[1]=dis_buf[2];
  27.                                 dis_buf[2]=dis_buf[3];
  28.                                 dis_buf[3]=dis_buf[4];
  29.                                 dis_buf[4]=dis_buf[5];
  30.                                 dis_buf[5]=n;
  31.                                 for(m=0;m<100;m++) //100次扫描,大约600ms
  32.                                 {
  33.                                         bitcode=0xfe; //起始位码
  34.                                         for(k=0;k<6;k++)
  35.                                         {
  36.                                                 P0=0xff; //消影
  37.                                                 wei=1;
  38.                                                 wei=0;
  39.                                                 segcode=dis_buf[k]; //取数据
  40.                                                 P0=tab[segcode]; //送段码
  41.                                                 duan=1;
  42.                                                 duan=0;
  43.                                                 P0=bitcode; //送位码
  44.                                                 wei=1;
  45.                                                 wei=0;
  46.                                                 delayms(1);
  47.                                                 bitcode=_crol_(bitcode,1); //更新位码,准备显示下一位
  48.                                         }
  49.         }
  50.      }
  51.   }
  52. }
复制代码

作者: xianfajushi    时间: 2022-8-25 08:00


作者: 名字不是重点    时间: 2022-8-25 10:40
画个流程图就能解决问题了,为什么不动手画一个呢?
作者: zilihangjian    时间: 2022-8-29 08:25
用指针的方式就解决了




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1