找回密码
 立即注册

QQ登录

只需一步,快速开始

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

16X64点阵屏上位机软件与下位机单片机程序(串口改字与频谱)

[复制链接]
跳转到指定楼层
楼主
此点阵屏与控制卡的电路原理图与详细制作资料详见:
http://www.51hei.com/bbs/dpj-107584-1.html


上位机字幕软件采用VB.NET编写,所以用此软件需先安装dotnet2.0平台 需要自己去下载

针对16*64点阵,上位机取模大小为16*16的汉字,STC12C5A32S2 内部有32K EEP 可存储1000个汉字,把你需要的字输入文本框点生成字幕后
点发送数据,此时要保证串口与控制卡连接正常。下载完成字幕后 点下设置发送 方可显示,显示过程中可通过设置改变移动速度和显示颜色。



附带2个下位机源码:高级--加放大16分频与64分频16X64双色点阵频谱程序与
串口改字16X64点阵单片机源程序如下:
  1. /****************************************
  2. 下位机程序:Fucp
  3. 上位机软件:Zhanggr

  4. 主控芯片;STC12C5A32S2  晶振:18.432M
  5. 通信波特率:9600
  6. 使用点阵屏 :16*64双色

  7. 串口除了下载程序外,也是配置字幕数据的接口,
  8. 用USB转串口方便小巧

  9. 下面见视频效果:

  10. 程序实现功能:
  11. 通过上位机字幕软件生成的字幕数据下载到单片机内部的EEPROM
  12. 此款单片机内部有32K的EEPROM 所以可以存储1000 个16*16汉字
  13. 字幕软件配置16*16字体
  14. 其中字体可设置显示颜色 红 绿 黄 三种
  15. 可设置移动速度
  16. 移动方式目前只有一种左移 往后继续加
  17. 其他功能待开发

  18. 上位机使用见说明
  19. 祝大家学习进步!
  20. *****************************************/
  21. #include "NEW_8051.H"
  22. #include "main.h"
  23. #define light 3                        //定义亮度
  24. uchar code hanzi[];                                            //汉字字模
  25. uchar code hanzi1[];                                            //汉字字模
  26. // uchar code sw[16]={0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f};/*16行段码*/
  27. //如果用自己的单片机实验板连接A B C D 一一对应,则用这个扫描数据
  28. //uchar code sw[16]={0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,};/*16行段码*///138驱动数据

  29. //下面的A B C D行扫描数据是反向的 配套我们的控制卡用                                 
  30. uchar code sw[16]={0X00,0X08,0x04,0x0C,0X02,0X0A,0X06,0X0E,0X01,0X09,0X05,0X0D,0X03,0X0B,0X07,0X0F};/*16行段码*///138驱动数据


  31. #define DataOut        P0
  32. sbit STR=P1^7;              //锁存         
  33. sbit SCK=P1^6;                    //时钟         
  34. sbit SERr= P0^4;            //红色数据
  35. sbit SERg= P0^5;                        //绿色数据
  36. uchar Move,Speed,line;  //时间变量
  37. uint zimuo;                                   //字模计数器
  38. uchar BUFF[20];                                   //缓存
  39. uchar ucTimeOut;
  40. uchar i;
  41. uint uiBaseAddress=0;
  42. uint uiFontNumber=0;
  43. //void   DelayMs(void);              // 延时
  44. void   in_data();                                   // 调整移动数据
  45. void   rxd_data();                                   // 串口发送移动数据
  46. /******************************************************/
  47. uchar ucSetSpeed=0;
  48. uchar ucSpeed=3;
  49. uchar ucSetPlateNum=0;
  50. uchar ucPlateNum=0;
  51. uchar ucSetShowMode=0;
  52. uchar ucShowMode=0;
  53. uchar ucSetFontSize=0;
  54. uchar ucFontSize=0;
  55. uchar BuffCount=0;
  56. uchar ucSetFontColor=0;
  57. uchar ucFontColor=0;
  58. uchar DelayMs=0;
  59. uchar l=0;
  60. bit bDelayMsOver=0;
  61. uchar ucEEPArray=0;
  62. uchar ucUdateTime=0;
  63. /*************************/
  64. void DelayMss(void)
  65. {
  66.   uchar TempCyc;
  67.   for(TempCyc=150;TempCyc>1;TempCyc--)
  68.      {;}
  69. }
  70. /**************************延时***********************/
  71. void InitTimer0(void)
  72. {
  73.     TMOD|= 0x01;
  74.     TH0 = 0x0C4;
  75.     TL0 = 0x00;
  76.     EA = 1;
  77.     ET0 = 1;
  78.     TR0 = 1;
  79. }
  80. /***********************************/
  81. void Send_data(unsigned char d)          /*从串口发送数据*/
  82. {
  83.           ES=0;
  84.       SBUF=d;
  85.           while(TI==0);       //等待发送完毕
  86.       TI=0;
  87.           ES=1;
  88. }
  89. /*****************************************/
  90. void Timer0Interrupt(void) interrupt 1
  91. {
  92.     TH0 = 0x0C4;
  93.     TL0 = 0x00;
  94.         if( ucTimeOut )
  95.         {
  96.                 ucTimeOut--;
  97.                 if( !ucTimeOut )
  98.                 {
  99.                         //bEanle=0;
  100.                         LED4=1;
  101.                 }
  102.                         
  103.         }
  104.         if(ucUdateTime)
  105.         {
  106.                 ucUdateTime--;
  107.                 if(!ucUdateTime)
  108.                 {
  109.                                        
  110.                         //uiBaseAddress=0;
  111.                         //bEanle=0;
  112.                         
  113.                 }
  114.         }
  115.         
  116. /**************************************/
  117.    
  118. }
  119. /****************************************/
  120. void LED_Display(void)
  121. {
  122.         ucSetPlateNum=byte_read(0x0003);//读取EEPROM里设置的点阵屏块数量(16*64一块)
  123.         switch ( ucSetPlateNum )
  124.         {
  125.         case 0X01:
  126.                 ucPlateNum=8; //1块
  127.                 break;
  128.         case 0X02:
  129.                 ucPlateNum=16; //2块
  130.                 break;
  131.         case 0X03:
  132.                 ucPlateNum=24;//3块
  133.                 break;
  134.         case 0X04:
  135.                 ucPlateNum=32;//4块
  136.                 break;
  137.         case 0X05:
  138.                 ucPlateNum=40;        //5块
  139.                 break;
  140.         default:
  141.                 ucPlateNum=8;        //1块
  142.                 break;
  143.         }
  144. /***********************************/

  145.   ucSetShowMode=byte_read(0x0004); //显示方式
  146.   switch ( ucSetShowMode )
  147.    {
  148.            case 0X01:
  149.                 ucShowMode=1;  //左移
  150.                 break;
  151.         case 0X02:
  152.                 ucShowMode=2;
  153.                 break;
  154.         case 0X03:
  155.                 ucShowMode=3;
  156.                 break;
  157.         case 0X04:
  158.                 ucShowMode=4;
  159.                 break;
  160.         case 0X05:
  161.                 ucShowMode=5;
  162.                 break;
  163.         default:
  164.                 ucShowMode=2;
  165.                 break;
  166.         }
  167. /***********************************/

  168. ucSetSpeed=byte_read(0x0000); //移动速度
  169.   switch ( ucSetSpeed )
  170.    {
  171.            case 0X01:
  172.                 ucSpeed=2;
  173.                 break;
  174.         case 0X02:
  175.                 ucSpeed=4;
  176.                 break;
  177.         case 0X03:
  178.                 ucSpeed=6;
  179.                 break;
  180.         case 0X04:
  181.                 ucSpeed=8;
  182.                 break;
  183.         case 0X05:
  184.                 ucSpeed=10;
  185.                 break;
  186.         default:
  187.                 ucSpeed=5;
  188.                 break;
  189.         }
  190. /********************************************/
  191. ucSetFontSize=byte_read(0x0001); //字体大小
  192.   switch ( ucSetFontSize )
  193.    {
  194.            case 0X01:
  195.                 ucFontSize=16;
  196.                 break;
  197.         default:
  198.                 ucFontSize=16;
  199.                 break;
  200.         }
  201. /**************************************************/
  202. ucSetFontColor=byte_read(0x0002); //字体颜色
  203.   switch ( ucSetFontColor )
  204.    {
  205.            case 0X01:
  206.                 ucFontColor=1;         //红
  207.                 break;
  208.         case 0X02:
  209.                 ucFontColor=2; //绿
  210.                 break;
  211.         case 0X03:
  212.                 ucFontColor=3; //黄
  213.                 break;
  214.         default:
  215.                 ucFontColor=1;
  216.                 break;
  217.         }
  218. uiFontNumber=(byte_read(0x0100)<<8)+byte_read(0x0101);
  219. }

  220. /*主函数*/
  221. void main()
  222. {  
  223.    InitTimer0();
  224.    uart_init();
  225.    Move=0;
  226.    zimuo=0;
  227.    LED_Display();

  228.    //uart_rBIT=1;   
  229. /*******************************************/

  230. while(1)  
  231. {
  232.         while(zimuo<uiFontNumber+64)
  233.         {
  234.                 if(ucShowMode==0x01)
  235.                 {
  236.                         while(Move<ucFontSize)        //数据移位。
  237.                         {                        
  238.                                         for(Speed=0;Speed<ucSpeed;Speed++) //移动速度
  239.                                         {        
  240.                                                 for(line=0;line<16;line++)
  241.                                                 {
  242.                                                         in_data();                //调整移动数据
  243.                                                         rxd_data();
  244.                                                         DataOut=sw[line];                                                                        
  245.                                                         STR=1;//锁存
  246.                                                         STR=0;
  247.                                                         STR=1;
  248.                                                         DelayMss();         //延时,等待一段时间,让这列显示的内容在人眼内产生“视觉暂留”现象。                                                                                
  249.                                                 }
  250.                                         }
  251.                                 
  252.                 /****************************************************/
  253.                         l++;
  254.                                 if(l==16)l=0;
  255.                                 Move++;                                                 //移动一步
  256.                         }
  257.                            Move=0;               
  258.                         zimuo=zimuo+32;
  259.                         
  260.                 }                                       
  261. /**********************************************************/        
  262.                         else if(ucShowMode==0x02)
  263.                                 {

  264.                                 }
  265.                         
  266.         }
  267.         zimuo=0;
  268.         }
  269. }
  270. /**********************************************************/
  271. void in_data(void)                                       //调整数据
  272. {
  273.           char s;   
  274.         if(ucShowMode==0x01)//左移
  275.         {
  276.                  if( ucFontSize==16 )//如果字体是16*16
  277.                  {
  278.                          for(s=8;s>=0;s--)                                            //i为向后先择字节计数器,zimuoo为向后先字计数器
  279.                          {
  280.                                  BUFF[2*s+1]=byte_read(0x200+zimuo+1+32*s+2*line);            //把第一个字模的第一个字节放入BUFF0中,第二个字模和第一个字节放入BUFF2中
  281.                                  BUFF[2*s]=byte_read(0x200+zimuo+32*s+2*line);                //把第一个字模的第二个字节放入BUFF1中,第二个字模的第二个字节放入BUFF3中

  282.                          }
  283.                  }
  284.         
  285.         }
  286. }

  287. /***********************发送移动的数据****************************/
  288. void rxd_data(void)                            //串行发送数据
  289. {
  290.   uchar s;
  291.   uchar inc,tempyid,temp,k;
  292.          if(Move<8)
  293.         {
  294.                 inc=0;
  295.         }
  296.         else
  297.         {
  298.                 inc=1;
  299.         }
  300.   for(s=0+inc;s<8+inc;s++)                   //发送ucSePlateNum字节数据
  301.         {
  302.                  if(l<8)
  303.                        tempyid=l;
  304.               else
  305.                      tempyid=l-8;
  306. ……………………

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


更新日志:
2012-6-29 10:13:00__Start
2012-6-29 10:13:37__参数设置失败,速度3,16*16,红色,屏数2,左移
2012-6-29 10:13:44__字模数据发送失败---读串口超时
2012-6-29 10:13:55__字模数据发送失败---读串口超时
2012-6-29 10:15:38__参数设置失败,速度3,16*16,红色,屏数2,左移
2012-6-29 10:15:44__字模数据发送成功---(      《登高》风急天高猿啸哀,渚清沙白鸟飞回。无边落木萧萧下,不尽长江滚滚来。万里悲秋常作客,百年多病独登台。艰难苦恨繁霜鬓
,潦倒新停浊酒怀。)
2012-6-29 10:15:46__参数设置成功,速度3,16*16,红色,屏数2,左移
2012-6-29 10:38:22__字模数据发送失败---读串口超时
2012-6-29 10:38:32__字模数据发送失败---读串口超时
2012-6-29 10:38:37__参数设置成功,速度2,32*32,红色,屏数2,左移
2012-6-29 10:38:51__字模数据发送成功---(      《登高》风急天高猿啸哀,渚清沙白鸟飞回。无边落木萧萧下,不尽长江滚滚来。万里悲秋常作客,百年多病独登台。艰难苦恨繁霜鬓
,潦倒新停浊酒怀。)
2012-6-29 10:54:14__参数设置成功,速度2,32*32,红色,屏数2,左移
2012-6-29 10:58:25__参数设置成功,速度2,32*32,红色,屏数2,左移
2012-6-29 10:58:31__字模数据发送成功---(      《登高》风急天高猿啸哀,渚清沙白鸟飞回。)
2012-6-29 10:59:22__参数设置失败,速度2,16*16,红色,屏数2,左移
2012-6-29 10:59:27__参数设置失败,速度2,16*16,红色,屏数2,左移
2012-6-29 10:59:41__参数设置失败,速度2,16*16,红色,屏数2,左移
2012-6-29 10:59:49__参数设置失败,速度2,16*16,红色,屏数2,左移
2012-6-29 10:59:52__参数设置成功,速度2,16*16,红色,屏数2,左移
2012-6-29 11:00:01__字模数据发送成功---(      《登高》风急天高猿啸哀,渚清沙白鸟飞回。)
2012-6-29 11:00:31__参数设置失败,速度2,32*32,红色,屏数2,左移
2012-6-29 11:00:36__参数设置成功,速度2,32*32,红色,屏数2,左移
2012-6-29 11:01:12__字模数据发送成功---(      《登高》风急天高猿啸哀,渚清沙白鸟飞回。)
2012-6-29 11:01:18__参数设置失败,速度2,32*32,绿色,屏数2,左移
2012-6-29 11:01:22__参数设置成功,速度2,32*32,绿色,屏数2,左移
2012-6-29 11:01:32__参数设置成功,速度2,32*32,黄色,屏数2,左移
2012-6-29 11:01:44__参数设置失败,速度1,32*32,绿色,屏数2,左移
2012-6-29 11:01:55__参数设置成功,速度1,32*32,绿色,屏数2,左移
2012-6-29 11:02:34__字模数据发送成功---(      《登高》风急天高猿啸哀,渚清沙白鸟飞回。无边落木萧萧下,不尽长江滚滚来。万里悲秋常作客,百年多病独登台。艰难苦恨繁霜鬓
,潦倒新停浊酒怀。)
2012-6-29 11:02:51__参数设置成功,速度1,32*32,红色,屏数2,左移
2012-6-29 11:04:55__Close
2012-7-26 01:42:44__Start
2012-7-26 01:44:03__字模数据发送成功---(      欢迎光临DIY视界 祝大家制作成功!  《登高》风急天高猿啸哀,渚清沙白鸟飞回。无边落木萧萧下,不尽长江滚滚来。万里悲秋常作客,百年多病独登台。)
2012-7-26 01:44:14__参数设置失败,速度3,16*16,红色,屏数1,左移
2012-7-26 01:44:19__参数设置失败,速度3,16*16,红色,屏数1,左移
2012-7-26 01:44:24__参数设置失败,速度3,16*16,红色,屏数1,左移
2012-7-26 01:44:35__参数设置失败,速度3,16*16,红色,屏数1,左移
2012-7-26 01:44:47__参数设置失败,速度3,16*16,红色,屏数1,左移
2012-7-26 01:44:53__Close
2012-7-26 01:49:09__Start
2012-7-26 01:50:24__字模数据发送成功---(       欢迎光临DIY视界,祝大家制作成功      《登高》风急天高猿啸哀,渚清沙白鸟飞回。无边落木萧萧下,不尽长江滚滚来。万里悲秋常作客,百年多病独登台。艰难苦恨繁霜鬓,潦倒新停浊酒怀。)
2012-7-26 01:50:26__参数设置成功,速度3,16*16,红色,屏数1,左移
2012-7-26 01:52:01__参数设置失败,速度2,16*16,红色,屏数1,左移
2012-7-26 01:52:09__参数设置失败,速度2,16*16,红色,屏数1,左移
2012-7-26 01:52:57__参数设置成功,速度2,16*16,红色,屏数1,左移
2012-7-26 01:53:40__字模数据发送成功---(       欢迎光临DIY视界,祝大家制作成功!   《登高》风急天高猿啸哀,渚清沙白鸟飞回。无边落木萧萧下,不尽长江滚滚来。万里悲秋常作客,百年多病独登台。艰难苦恨繁霜鬓,潦倒新停浊酒怀。)
2012-7-26 01:54:03__字模数据发送成功---(    欢迎光临DIY视界,祝大家制作成功!   《登高》风急天高猿啸哀,渚清沙白鸟飞回。无边落木萧萧下,不尽长江滚滚来。万里悲秋常作客,百年多病独登台。艰难苦恨繁霜鬓,潦倒新停浊酒怀。)
2012-7-26 01:55:56__字模数据发送成功---(    欢迎光临DIY视界,祝大家制作成功!   《登高》风急天高猿啸哀,渚清沙白鸟飞回。无边落木萧萧下,不尽长江滚滚来。万里悲秋常作客,百年多病独登台。艰难苦恨繁霜鬓,潦倒新停浊酒怀。)
2012-7-26 01:56:41__字模数据发送成功---(    欢迎光临DIY视界,祝大家制作成功!   《登高》风急天高猿啸哀,渚清沙白鸟飞回。无边落木萧萧下,不尽长江滚滚来。万里悲秋常作客,百年多病独登台。艰难苦恨繁霜鬓,潦倒新停浊酒怀。)
2012-7-26 01:57:18__参数设置成功,速度2,16*16,绿色,屏数1,左移
2012-7-26 01:57:54__参数设置成功,速度2,16*16,黄色,屏数1,左移
2012-7-26 01:58:23__参数设置成功,速度1,16*16,黄色,屏数1,左移
2012-7-26 01:59:19__参数设置成功,速度1,16*16,绿色,屏数1,左移
2012-7-26 01:59:58__参数设置成功,速度1,16*16,红色,屏数1,左移
2012-7-26 02:00:07__Close




全部资料51hei下载地址:
http://www.51hei.com/bbs/dpj-107584-1.html



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

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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