找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 8830|回复: 15
收起左侧

16X16点阵扩展16X32点阵详细教程(单片机程序+仿真)

  [复制链接]
ID:424598 发表于 2019-5-2 10:26 | 显示全部楼层 |阅读模式
首先, 上一张16X16点阵的仿真图, 我已尽量备注详细

16X16.png


下面是从上图的仿真扩展为16X32(相应的程序也要修改)

16X32.png


这样子应该看明白了吧, 有想法的程友可以自己动手再扩展

单片机源程序如下:
  1. #include <reg51.h>

  2. #define uchar unsigned char  
  3. #define uint unsigned int

  4. #define  SPEED   2 //移动速度,数字越小越快,数字越大越慢

  5. sbit DS=P2^0;           //接U2_74HC595的引脚14
  6. sbit ST=P2^2;           //接U2_74HC595的引脚12
  7. sbit SH=P2^1;           //接U2_74HC595的引脚11

  8. uchar code table1[]={        //点阵屏的上部(1屏和2屏)
  9. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,        //空白屏

  10. 0x04,0x24,0x24,0x24,0x7F,0xC4,0x44,0x04,0x04,0xFF,0x04,0x44,0x34,0x05,0x04,0x00,/*"我"的上半部,0*/
  11. 0x01,0x26,0x34,0x2C,0x24,0x24,0x37,0x4C,0x44,0x44,0x4C,0x74,0xC4,0x45,0x06,0x00,/*"爱"的上半部,1*/
  12. 0x00,0x01,0x06,0x1F,0xE0,0x02,0x04,0x18,0xF0,0x10,0x13,0x10,0x10,0x14,0x18,0x00,/*"你"的上半部,2*/
  13. 0x00,0x00,0x0F,0x08,0x08,0x08,0x08,0xFF,0x08,0x08,0x08,0x08,0x0F,0x00,0x00,0x00,/*"中"的上半部,3*/
  14. 0x00,0x7F,0x40,0x48,0x49,0x49,0x49,0x4F,0x49,0x49,0x49,0x48,0x40,0x7F,0x00,0x00,/*"国"的上半部,4*/

  15. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,        //空白屏
  16. };


  17. uchar code table2[]={         //点阵屏的下部(3屏和4屏)
  18. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,        //空白屏

  19. 0x00,0x10,0x12,0x21,0xFE,0x40,0x82,0x02,0x04,0xC8,0x30,0x28,0x44,0x82,0x1F,0x00,/*"我"的下半部,0*/
  20. 0x00,0x82,0x84,0x89,0x91,0xE1,0xB2,0xAA,0xA4,0xA4,0xAA,0xB2,0x81,0x01,0x01,0x00,/*"爱"的下半部,1*/
  21. 0x80,0x00,0x00,0xFF,0x00,0x08,0x30,0xC0,0x02,0x01,0xFE,0x00,0x80,0x60,0x18,0x00,/*"你"的下半部,2*/
  22. 0x00,0x00,0xF0,0x20,0x20,0x20,0x20,0xFF,0x20,0x20,0x20,0x20,0xF0,0x00,0x00,0x00,/*"中"的下半部,3*/
  23. 0x00,0xFF,0x02,0x12,0x12,0x12,0x12,0xF2,0x12,0x52,0x32,0x12,0x02,0xFF,0x00,0x00,/*"国"的下半部,4*/

  24. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,        //空白屏
  25. };

  26. void senddata(uchar,uchar);
  27. void delay(uint);

  28. void main()
  29. {
  30.         uchar        i,j,k,m,n=0;
  31.         while(1)
  32.         {
  33.                  for(i=0;i<96;i++) //要显示的字数,值=字数*16+16, 最后的这个16是显示一个空白屏
  34.                 {
  35.                         for(j=0;j<SPEED;j++)   //移动速度
  36.                         {
  37.                                 for(k=0;k<16;k++) //显示列数(勿修改)
  38.                                 {
  39.                                         m=i+k;
  40.                                         P1=k;                                       
  41.                                         senddata(table1[m],table2[m]); //传送第上部屏和下部屏
  42.                                         delay(100);        //延时
  43.                                           senddata(0,0);        //消隐,全灭
  44.                                 }
  45.                         }
  46.                 }
  47.         }
  48.   
  49. }

  50. /* 将每行数据送至74HC595        
  51. * m为高8位,n为低8位
  52. * SH为移位时钟,ST为锁存时钟 */
  53. void senddata(uchar m,uchar n)
  54. {
  55.         uchar i;
  56.         ST=0;
  57.         for(i=0;i<16;i++)  //有多少行,就改多少
  58.         {
  59.                 SH=0;
  60.                 if(i<8) {                                         //1-8行
  61.                           DS=0X80&(m<<i);           
  62.                 } else if(i>=8 && i<16) {         //9-16行
  63.                         DS=0X80&(n<<(i-8));
  64.                 }                                          
  65.                 SH=1;        
  66.         }
  67.         ST=1;
  68. }

  69. void delay(uint m)
  70. {
  71.         uint j;
  72.         for(j=m;j>0;j--);
  73. }
复制代码

取模方式
取模方式.png


附件内容, 有些程友上传的附件不全, 导致下载浪费黑币, 还有的程友发布的仿真程序只有hex, 但在内容描述却带有源程序字样, 在此BS一下

JD20190502101522.png


仿真打开后, 如果单片机指定的main.hex变动, 请手工重新指定

JD20190502101543.png

全部资料51hei下载地址:
16X16点阵扩展16X32点阵示例(程序+仿真).zip (633.65 KB, 下载次数: 272)

评分

参与人数 2黑币 +88 收起 理由
兰州hsd + 8 很给力!
admin + 80 共享资料的黑币奖励!

查看全部评分

回复

使用道具 举报

ID:337540 发表于 2019-5-8 13:42 | 显示全部楼层
QQ截图20190508134100.png 楼主和我正在做的一模一样,哈哈,就是你的行列表达错了横排是行,竖排是列啊,我看了半天还头大,感谢楼主的显示程序,哈哈买了实物,来了调着玩玩。
回复

使用道具 举报

ID:539242 发表于 2019-5-15 19:59 | 显示全部楼层
那个活动的怎么弄
回复

使用道具 举报

ID:682239 发表于 2020-1-7 11:17 | 显示全部楼层
我照着弄为什么显示不出来呀
回复

使用道具 举报

ID:150338 发表于 2020-2-18 14:45 | 显示全部楼层
谢谢楼主分享
回复

使用道具 举报

ID:298008 发表于 2020-2-18 17:36 | 显示全部楼层
谢谢楼主分享!!!
回复

使用道具 举报

ID:697123 发表于 2020-2-24 10:33 | 显示全部楼层
我照做不能实现显示
回复

使用道具 举报

ID:684248 发表于 2020-2-24 14:13 | 显示全部楼层
感谢楼主分享
回复

使用道具 举报

ID:686739 发表于 2020-2-24 17:33 来自手机 | 显示全部楼层
学习一下
回复

使用道具 举报

ID:690948 发表于 2020-2-24 21:33 来自手机 | 显示全部楼层
wsh791 发表于 2020-2-24 17:33
学习一下

感谢分享
回复

使用道具 举报

ID:698786 发表于 2020-2-26 21:45 | 显示全部楼层

谢谢楼主分享!!!
回复

使用道具 举报

ID:616633 发表于 2020-3-4 08:55 | 显示全部楼层
大佬为什么这个程序只可以显示15个字?        for(i=0;i<336;i++) //要显示的字数,值=字数*16+16, 最后的这个16是显示一个空白屏   我要显示20个字上面的数值我也改了到15个字就重新显示
回复

使用道具 举报

ID:702266 发表于 2020-3-4 13:39 | 显示全部楼层
谢谢楼主分享!!!
回复

使用道具 举报

ID:424598 发表于 2020-3-5 08:11 来自手机 | 显示全部楼层
Kevinhwf 发表于 2020-3-4 08:55
大佬为什么这个程序只可以显示15个字?        for(i=0;i

你是模拟的还是实物的?将你修改后的代码贴上来。什么单片机型号的说清楚。
回复

使用道具 举报

ID:693628 发表于 2020-3-5 10:24 来自手机 | 显示全部楼层
谢谢楼主分享
回复

使用道具 举报

ID:766622 发表于 2020-6-2 17:13 | 显示全部楼层
  1. if(i<8) {                                         //1-8行
  2.                           DS=0X80&(m<<i);           
  3.                 } else if(i>=8 && i<16) {         //9-16行
  4.                         DS=0X80&(n<<(i-8));
复制代码
   楼主,这个给DS所赋的值,与0x80取与是什么意思呢?我有点不太懂这个取与的意思,希望能根据二进制详解一下谢谢!
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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