烧录程序是个好玩的事情。打开烧录软件之后,我把光盘中的实验程序从基础到高级能烧的都烧了一遍。有需要按钮的就去源程序中找控制按钮。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语言,搞明白基本函数,控制语句,数据类型,关键字,运算符等基本编程知识,获取高级思维模式 本文是自己初学单片机的经验分享,希望对初学的同学有用。感谢平台
单片机源程序如下:
- //该板子上的点阵为8*8,只能显示简单的一些汉子,如果要显示真正的汉字
- //通过取模软件取的可以选择16*16点阵的板子
- #include<reg51.h>
- #include<intrins.h>
- sbit SRCLK=P3^6;
- sbit RCLK=P3^5;
- sbit SER=P3^4;
- //--定义要使用的IO口--//
- #define COMMONPORTS P0
- //--列选通控制--//
- unsigned char code TAB[8] = {0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe};
- //--点阵字码--//
- unsigned char code CHARCODE[4][8]=
- {
- 0x7F,0x01,0x01,0x01,0x00,0x00,0x5F,0x00, //Li
- 0x10,0x55,0xBF,0x14,0x10,0xFE,0x99,0x52, //我
- 0x38,0x64,0x22,0x11,0x11,0x22,0x64,0x38, //心形
- {0x20,0x7F,0x84,0x6A,0xC1,0x5F,0x68,0x44} //你
- };
- void delay(unsigned int time)
- {
- unsigned int i,j;
- for(i=0;i<time;i++)
- for(j=0;j<121;j++);
- }
- /*******************************************************************************
- * 函数名 : Hc595SendByte(unsigned char dat)
- * 函数功能 : 想74H595发送一个字节的数据
- * 输入 : 无
- * 输出 : 无
- *******************************************************************************/
- void Hc595SendByte(unsigned char dat)
- {
- unsigned char a;
- SRCLK=0;
- RCLK=0;
- for(a=0;a<8;a++)
- {
- SER=dat>>7;
- dat<<=1;
- SRCLK=1;
- _nop_();
- _nop_();
- SRCLK=0;
- }
- RCLK=1;
- _nop_();
- _nop_();
- RCLK=0;
- }
- /*******************************************************************************
- * 函数名 : main
- * 函数功能 : 主函数
- * 输入 : 无
- * 输出 : 无
- *******************************************************************************/
- void main()
- {
- unsigned char tab, j;
- unsigned int i;
- while(1)
- {
- for(i= 0; i<50; i++ ) //两个字之间的扫描间隔时间
- {
- for(tab=0;tab<8;tab++)
- {
- Hc595SendByte(0x00); //消隐
- COMMONPORTS = TAB[tab]; //输出字码
- Hc595SendByte(CHARCODE[j][tab]);
- ……………………
- …………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码
所有资料51hei提供下载:
LED点阵显示汉字.rar
(24.31 KB, 下载次数: 34)
|