找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 16397|回复: 32
打印 上一主题 下一主题
收起左侧

单片机16x16点阵广告牌设计(含仿真+源码+论文+原理图)

  [复制链接]
跳转到指定楼层
楼主
分享自己做得16x16点阵广告牌
目次
1绪论    1
1.1    MCS-51系列单片机简介    1
1.2    单片机的应用模式和应用领域    2
1.3    主要工作任务    3
2硬件设计    3
2.1    单片机系统的基本模块    3
2.2    16*16点阵滚动显示的硬件设计    4
3软件设计    6
3.1    16*16点阵滚动显示的软件设计    6
4软件仿真结果    8
4.1    16*16点阵滚动显示仿真结果    8
结  论    9
参考文献    10
致谢    11
附录相关源程序    12

所谓16*16点阵,就是行列各位16个长度的点阵,现实中我们可以通过4个8*8点阵进行拼凑来实现一个16*16的点阵。如图3所示。图中的16*16点阵由U6,U7,U8,U9四个单点阵组成,所有的行(X0-X7)都通过排阻接到单片机的P0口上,所有的列(Y00-Y07、Y10-Y17、Y20-Y27、Y30-Y37)接到不同的74ls138(U2,U3,U4,U5)上,U2控制U6,U3控制U7,U4控制U8,U5控制U9。74ls138直接由单片机的P2口进行驱动,这样就形成了一个完整的电路。

其显示原理与单个点阵的显示原理类似,但是这里需要先把代码写入U6,然后短暂延时后写入U7,直到U9。时间段控制合理的话,我们就可以看到显示屏上将显示稳定的字符。这里涉及到一个滚动显示的问题,所谓滚动显示,即字符是从屏幕右端慢慢往左边移动,好像是一个拉幕的效果,那么滚动显示在程序上如何实现呢?这里我们就要用到单片机的定时中断,中断一次,字符往左移动一次,如此循环,即实现了字符的滚动显示。这与上面单个点阵的静态显示是有区别的。

关于74hc138的使用,74hc138是3-8线译码器,当E1=1,E2,E3=0时,该译码器被选中,此时如果数据输入端ABC输入000-111八个数据,输出端Y0-Y7将依次输出0。所以,我们可以依次选中四个译码器,向数据输入端写入数据来直接控制某个点阵的显示。
以上就是16*16点阵的滚动显示原理。

2.2.3    16*16点阵滚动显示的硬件设计
如图5就是本次设计的全部硬件电路图:

在设计16*16滚动显示的软件部分时,我们必须要明白其中的原理。本次设计中我们需要注意以下几个问题:第一,怎么样让点阵显示我们需要的字符,即我们如何获得字符显示的代码。第二,如何实现字符的滚动显示。第三,如何使画面保持稳定。
第一,如何取得代码。现在针对点阵的取字模软件很多,我们只需要打开软件,写入需要取字模的字,然后注意取字模的顺序,是横向还是纵向就行了。我们这里采用纵向取模,设置字模为C51格式。这样当写入的字确定后,我们就可以直接复制字模到程序中来实现相应功能。如“老”的字模就为:{0x02,0x10,0x22,0x10,0x22,0x20,0x22,0x20,0x22,0x40,0x22,0x7C,0xFE,0x92,0x23,0x12,0x23,0x22,0x22,0x22,0x26,0x42,0x2A,0x42,0x72,0x02,0x22,0x0E,0x02,0x00,0x00,0x00,/*"老",2*/}。
第二,如何实现滚动显示。为了实现字符的滚动显示,我们加入了定时中断函数,如下:
  1. void timer1() interrupt 3
  2. {
  3.    alt++;
  4.    if(alt==10)               //到一定的时间加以实现左移
  5.    {
  6.      alt=0;
  7.         if(fangxiang==0)      //如果是正向 正向移动
  8.         {
  9.                net=net+2;
  10.             if(net>sl)  //字移动数量
  11.             net=0;
  12.         }
  13.         else                       //否则反向移动
  14.         {
  15.             net=net-2;
  16.                if(net<2)
  17.                net=sl;   //字移动数量
  18.         }
  19.    }
  20. }
复制代码


电路原理图如下:


仿真原理图如下(proteus仿真工程文件可到本帖附件中下载)




单片机源程序如下:
  1. #include<reg51.h>
  2. #include<intrins.h>
  3. #define uchar unsigned char
  4. #define uint unsigned int
  5. #define data1 P0
  6. #define data2 P2
  7. sbit s1=P3^6;
  8. sbit s2=P3^7;
  9. bit fangxiang;
  10. uint alt=0,net=0,sl=128;
  11. bit mode;
  12. uchar code tab[]={
  13. //
  14. 0x20,0x08,0x24,0x10,0x22,0x60,0x21,0x80,0x26,0x41,0x39,0x32,0x02,0x04,0x0C,0x18,
  15. 0xF0,0x60,0x13,0x80,0x10,0x60,0x10,0x18,0x14,0x04,0x18,0x02,0x00,0x01,0x00,0x00,/*"欢",2*/

  16. 0x02,0x00,0x02,0x02,0x42,0x04,0x33,0xF8,0x00,0x04,0x00,0x02,0x3F,0xF2,0x20,0x22,
  17. 0x40,0x42,0x00,0x02,0x3F,0xFE,0x20,0x42,0x20,0x22,0x3F,0xC2,0x00,0x02,0x00,0x00,/*"迎",3*/

  18. 0x00,0x80,0x01,0x00,0x06,0x00,0x1F,0xFF,0xE0,0x00,0x02,0x08,0x04,0x30,0x18,0xC0,
  19. 0xF0,0x02,0x10,0x01,0x13,0xFE,0x10,0x00,0x10,0x80,0x14,0x60,0x18,0x18,0x00,0x00,/*"你",4*/

  20. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,/*" ",5*/

  21. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,/*" ",6*/

  22. };

  23. void delay(uint z)           //延时子函数
  24. {
  25.    uchar x;
  26.    for(;z>0;z--)
  27.    for(x=110;x>0;x--);
  28. }

  29. void xianshi()                        //显示
  30. {
  31.         uchar aa,i;
  32.         for(i=0;i<16;i++)
  33.         {
  34.                 P1=i; //列扫描
  35.                 data1=tab[net+aa]; //取出上8行数据输出
  36.                 aa++;
  37.                 data2=tab[net+aa]; //取出下8行数据输出
  38.                 aa++;
  39.                 delay(5);        //延时
  40.                 data1=0;  //清屏
  41.                 data2=0;  //清屏
  42.                 P1=0x00;  //消除余辉
  43.                 if(aa>30) aa=0;  //字模地址
  44.         }       
  45.        
  46. }

  47. void main()         //主函数
  48. {
  49.    ET1=1;         //使能定时器0
  50.    EA=1;         //开启总中断
  51.    TR1=1;        //开始计数
  52.    while(1)         //无限循环
  53.    {
  54.            xianshi();  //显示
  55.            if(s1==0)   //检测按键
  56.            {
  57.               delay(30);  //延时消抖
  58.                   TR1=~TR1;          //按下暂停  ,暂按继续
  59.                   while(!s1)xianshi();
  60.                   delay(30);
  61.            }
  62.            if(s2==0)        //检测按键
  63.            {
  64.                delay(30);                        //延时消抖
  65.                    fangxiang=~fangxiang;  //方向取反
  66.                    while(!s2)xianshi();
  67.                    delay(30);
  68.            }
  69.          }
  70. }

  71. void timer1() interrupt 3
  72. {

  73.    alt++;
  74.    if(alt==10)                   //到一定的时间加以实现左移
  75.    {
  76.      alt=0;
  77.          if(fangxiang==0)         //如果是正向 正向移动
  78.          {
  79.                  net=net+2;
  80.              if(net>sl)  //字移动数量
  81.              net=0;
  82.          }
  83.          else                           //否则反向移动
  84.          {
  85.              net=net-2;
  86.                  if(net<2)
  87.                  net=sl;          //字移动数量…………

  88. …………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码


所有资料51hei提供下载(含仿真+源码+论文+原理图):
111.zip (525.24 KB, 下载次数: 795)



评分

参与人数 1黑币 +5 收起 理由
chinajjzty + 5 很给力!

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏18 分享淘帖 顶10 踩1
回复

使用道具 举报

沙发
ID:290911 发表于 2018-5-15 11:42 | 只看该作者
谢谢分享,正好需要呢哈哈
回复

使用道具 举报

板凳
ID:319023 发表于 2018-6-25 10:28 | 只看该作者
不错的资料,谢谢分享
回复

使用道具 举报

地板
ID:358103 发表于 2018-6-25 11:05 | 只看该作者
老是调试失败啊
回复

使用道具 举报

5#
ID:336342 发表于 2018-6-27 23:17 | 只看该作者
我是新手请问元器件清单有吗 谢谢
回复

使用道具 举报

6#
ID:398944 发表于 2018-9-19 07:50 | 只看该作者
感谢分享,只希望可以让我的单片机设计通过
回复

使用道具 举报

7#
ID:73182 发表于 2018-9-19 15:54 | 只看该作者
这是个实用的例子,感谢分享
回复

使用道具 举报

8#
ID:447736 发表于 2018-12-17 10:27 | 只看该作者
感谢分享  太棒了
回复

使用道具 举报

9#
ID:434167 发表于 2018-12-24 22:30 | 只看该作者
大神请问我显示要显示9个字,把数组改好后,sl=320,仿真出来第二遍刚开始是乱码怎么回事?我发现字数一多就会这样。
回复

使用道具 举报

10#
ID:450700 发表于 2018-12-24 23:32 来自手机 | 只看该作者
不错,不错值得学习
回复

使用道具 举报

11#
ID:456896 发表于 2018-12-27 22:49 | 只看该作者
用那个软件画的图里用的是哪些原件啊?不知道是什么名字诶
回复

使用道具 举报

12#
ID:456896 发表于 2018-12-27 23:47 | 只看该作者

小姐姐可不可以给我发一下这个的原理图~QQ1215029362 感谢分享  (有酬)
回复

使用道具 举报

13#
ID:456896 发表于 2019-1-2 22:49 | 只看该作者
不会做pcb原件封装
回复

使用道具 举报

14#
ID:519104 发表于 2019-5-9 01:10 | 只看该作者
怎样在此基础上用按键按下不同的键显示不同的字符的程序,求大神帮帮忙,急用,拜托
回复

使用道具 举报

15#
ID:532069 发表于 2019-5-11 19:39 | 只看该作者
很不错,谢谢分享
回复

使用道具 举报

16#
ID:532069 发表于 2019-5-12 21:26 | 只看该作者
ytv12345 发表于 2018-12-24 22:30
大神请问我显示要显示9个字,把数组改好后,sl=320,仿真出来第二遍刚开始是乱码怎么回事?我发现字数一多就 ...

我的自定义字体乱码怎么解决啊
回复

使用道具 举报

17#
ID:532069 发表于 2019-5-12 21:27 | 只看该作者
自定义字体乱码怎么解决呢
回复

使用道具 举报

18#
ID:92810 发表于 2019-5-30 16:37 | 只看该作者
感觉挺好玩的样子啊
回复

使用道具 举报

19#
ID:441186 发表于 2019-6-11 15:23 | 只看该作者

我也失败
回复

使用道具 举报

20#
ID:522182 发表于 2019-7-18 23:44 | 只看该作者
谢谢大佬
回复

使用道具 举报

21#
ID:601007 发表于 2019-8-17 10:32 | 只看该作者
很不错的分享
回复

使用道具 举报

22#
ID:447180 发表于 2019-9-24 16:13 | 只看该作者
好东西,正在学习
回复

使用道具 举报

23#
ID:368229 发表于 2019-11-4 09:30 | 只看该作者
感谢分享,帮助很大
回复

使用道具 举报

24#
ID:219507 发表于 2019-11-4 16:06 | 只看该作者
感谢楼主分享教程
回复

使用道具 举报

25#
ID:635667 发表于 2019-11-4 22:23 | 只看该作者
非常感谢楼主分享
回复

使用道具 举报

26#
ID:575263 发表于 2019-12-27 15:34 | 只看该作者
试试效果
回复

使用道具 举报

27#
ID:798697 发表于 2020-7-6 21:15 | 只看该作者
正好需要就看到了哈哈哈,谢谢
回复

使用道具 举报

28#
ID:854670 发表于 2020-12-4 21:55 | 只看该作者
好强啊,膜拜大佬
回复

使用道具 举报

29#
ID:861106 发表于 2020-12-16 10:41 | 只看该作者
超级棒。
回复

使用道具 举报

30#
ID:860264 发表于 2020-12-16 12:07 | 只看该作者
取模软件发一下呗
回复

使用道具 举报

31#
ID:996055 发表于 2021-12-23 12:48 | 只看该作者
HeroFong 发表于 2020-12-16 12:07
取模软件发一下呗

取模软件PCtoLCD2002
回复

使用道具 举报

32#
ID:1010722 发表于 2022-6-3 23:56 | 只看该作者
这是什么仿真软件阿?
回复

使用道具 举报

33#
ID:1026001 发表于 2022-6-6 18:24 | 只看该作者
字数增多如何更改
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表