找回密码
 立即注册

QQ登录

只需一步,快速开始

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

单片机led灯板显示汉字程序

[复制链接]
跳转到指定楼层
#
ID:333114 发表于 2018-5-19 09:36 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
烧录程序是个好玩的事情。打开烧录软件之后,我把光盘中的实验程序从基础到高级能烧的都烧了一遍。有需要按钮的就去源程序中找控制按钮。1.实验前我第N次烧这个循环显示汉字的程序的时候觉得这个“中”子两头多的俩点不好看,就想去掉它俩
每个灯显示亮与不亮是开和关就是1与0,想改要从源程序入手

中字(多两点的)

2.发现有F,E,A等字母我明白了这是16进制,
灯板上最左边从底向上亮为1暗为0二进制转换为16进制恰好为0x后两位的值(明白了字形是如何编码的)






将多两点的两列由0x7c,0x7c改为0x78,0x78,重新烧录如图

去掉两点的中





改过的中字字形码

3.更改其他字(我,Li,心的形状,你),由于不知道有字形码转换器,所以就算了一遍(哭)



字码




4.由于对C语言不是很懂(苦笑),所以照着老师写好的代码打了一遍
但是照着打还是出现了诸多错误(如下)





对delay函数修改了数次,甚至重新在英文状态下编辑了一遍(还是失败)最后发现是void前少了个“ ; ”








函数Hc595Send没有声明,就跑到程序最开始声明了一下#define Hc595SendByte,还是不对
最终发现s没有大写,最后引用的时候中间多了个空格(去掉空格重新编译,成功)


5.实验感悟
1.深切感受到了实验板的魅力
2.重新复习了2进制转16进制
3.悔不当初,没有认真学习C语言(错误基本是百度解决)
4.亡羊补牢,借此学期机会学习C语言,搞明白基本函数,控制语句,数据类型,关键字,运算符等基本编程知识,获取高级思维模式
本文是自己初学单片机的经验分享,希望对初学的同学有用。感谢平台

单片机源程序如下:
  1. //该板子上的点阵为8*8,只能显示简单的一些汉子,如果要显示真正的汉字
  2. //通过取模软件取的可以选择16*16点阵的板子

  3. #include<reg51.h>
  4. #include<intrins.h>

  5. sbit SRCLK=P3^6;
  6. sbit RCLK=P3^5;
  7. sbit SER=P3^4;

  8. //--定义要使用的IO口--//
  9. #define COMMONPORTS                P0

  10. //--列选通控制--//
  11. unsigned char code TAB[8]  = {0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe};

  12. //--点阵字码--//
  13. unsigned char code CHARCODE[4][8]=
  14. {

  15. 0x7F,0x01,0x01,0x01,0x00,0x00,0x5F,0x00,  //Li
  16. 0x10,0x55,0xBF,0x14,0x10,0xFE,0x99,0x52,   //我
  17. 0x38,0x64,0x22,0x11,0x11,0x22,0x64,0x38,  //心形

  18. {0x20,0x7F,0x84,0x6A,0xC1,0x5F,0x68,0x44}  //你

  19. };
  20. void delay(unsigned int time)
  21. {
  22.   unsigned int i,j;
  23.   for(i=0;i<time;i++)
  24.     for(j=0;j<121;j++);
  25. }

  26. /*******************************************************************************
  27. * 函数名         : Hc595SendByte(unsigned char dat)
  28. * 函数功能                   : 想74H595发送一个字节的数据
  29. * 输入           : 无
  30. * 输出                  : 无
  31. *******************************************************************************/
  32. void Hc595SendByte(unsigned char dat)
  33. {
  34.         unsigned char a;
  35.         SRCLK=0;
  36.         RCLK=0;
  37.         for(a=0;a<8;a++)
  38.         {
  39.                 SER=dat>>7;
  40.                 dat<<=1;

  41.                 SRCLK=1;
  42.                 _nop_();
  43.                 _nop_();
  44.                 SRCLK=0;       
  45.         }

  46.         RCLK=1;
  47.         _nop_();
  48.         _nop_();
  49.         RCLK=0;
  50. }
  51. /*******************************************************************************
  52. * 函数名         : main
  53. * 函数功能                   : 主函数
  54. * 输入           : 无
  55. * 输出                  : 无
  56. *******************************************************************************/

  57. void main()
  58. {       
  59.         unsigned char tab, j;
  60.         unsigned int  i;

  61.         while(1)
  62.         {       
  63.                 for(i= 0; i<50; i++ )   //两个字之间的扫描间隔时间
  64.                 {
  65.                         for(tab=0;tab<8;tab++)
  66.                         {       

  67.                                 Hc595SendByte(0x00);                             //消隐                                                                                                                               
  68.                                 COMMONPORTS        = TAB[tab];                                 //输出字码       
  69.                                 Hc595SendByte(CHARCODE[j][tab]);       
  70. ……………………

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

所有资料51hei提供下载:
LED点阵显示汉字.rar (24.31 KB, 下载次数: 34)


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

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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