边学边秀单片机

学习单片机,要的是有动手的欲望。这样你才能在单片机的世界里累并快乐着。

文章图片

      写了前面四篇关于NRF24L01通讯调试的文章,看来大家还是很喜欢,有帮助的。有很多大学生朋友问我说,我们没有两个LCD来显示调试状态,连一个也没有,能不能用几个LED来显示调试状态呢?因此我就写这篇补充调试的文章,就用P0口的8个LED来显示调试NRF24L01到成功进行数据通讯。

      先把51单片机的最小系统准备好,还有8个LED的小电路板,如果你的LED就在系统板上那省了这一步。

   8个LED的小板子电路很简单,但你焊接要可靠,不然电路本身都不稳定,后面对判断故障会产生很大影响。

  NRF24L01+模块电路还是前面说过的那样:

相同的两个模块的板子。

好!假设我们用P0口来作LED显示、用P1口来作模块接口,下面我们先写一段最简单的程序,来确认LED电路,和P0、P1口的完好!

#include <reg52.h>

#include <intrins.h>

#define uint unsigned int

typedef unsigned char uchar;

//*********************************

//        延时函数

//  在晶振为12MHz时,延时count毫秒

//*********************************

void Delayms(uint count)

{

  uint i;

  while(count--)

   { for(i=0;i<80;i++

上一篇我已经将串口通讯的操作完成,这次我来连上ADC0809进行实际的测量,把数据传到PC来显示和处理。

连接示意图如下。

实际连接图如下:

单片机上我还是连上了LCD12864,让它同时也显示转换值。

单片机程序用了一个主程序adc0809m.c和两个子程序adc0809c.c   12864put.c  如下图左边:

 下面我列出主程序:

#include <AT89X52.H>

#include <intrins.H>

#define uchar unsigned char

#define uint unsigned int

extern void LcmClear( void );       //清屏

extern void LcmInit( void );        //初始化

extern void LcmPutstr( uchar row,uchar y,uchar * str );  //在设定位置显示字符串

extern uchar adc0809conv(void);  //测量转换函数

extern void Delay(uint MS) ;    //延时函数

uchar * uchartostr(unsigned char unm);    //将char值转成字符串

uchar str[4];

uchar idata buff2[2];

//****************************

//将char值转成字符串函数

//****************************

uchar * uchartostr(uchar unm)

 uchar x00,xx,x0,x,n;

 x00=unm/100;

 xx=unm%100;

 x0=xx/10;

 x=xx%10;

 n=0;

 if(x00!=0)

 {  str[n]=x00+48;  //值加48即为字符

    n++;

 }

 if(!(x00==0&x0==0))

 {  str[n]=x0+48;

    n

     这次我们来试着一步步的去掌握PC与单片机通过RS-232进行通讯和控制。

      先说说我硬件的情况。我用的PC是个二手的IBM240小本本,十寸屏,赛扬400,机子很老了。但也有它的优点:1、串口,并口,PS鼠标口、USB口、PCM插槽全有。      调试硬件电路最好还是用真实串、并口好些,因为用USB转换的串、并口有时会出现兼容性上的问题,就会增加你调试上的复杂性。

下图为本人的IBM 240及各种接口图:

下图是PC的大小对比图

单片机还是我一步步做出来的那个了,USB-ISP编程线也是我前面秀过,好!现在我放上PC与单片机连接图:

      用本本的好处就是调整方便,接口、器件都在旁边,假若是用台式机,你还得钻到桌子底下去插拔那些接口,而现在本本却又没有串、并口了。

     言归正传,单片机的RS-232串口通过9针串口线接到本本的串口上,单片机的ISP编程口通过USB-ISP编程器接到本本的USB口。

另外本本要接电源,单片机也要接5V电源,还有千万千要记得,本本是要插上鼠标才玩得转哦!

我将这个一步一步掌握串口的通讯与控制分为五步:

1、测试单片机与PC的串口连接是否正确好用。    

2、

图像取模和文字取模本身没什么区别,只是一开始你要准备好一幅将要在你LCD显示的图,因为LCD是没有灰度级的,每个点就是黑或者白。再有我们一般用的LCD点阵数都比较小,你看到一些很好看很丰富的图像往往都无法展示,所以要尽量找一些笔触简单的图片来制做例如:我准备了两张图片,打算做为LCD_12864显示图:

我先把我两张图处理成单色的图像,有很多软件可以将图像处理成黑白的,并能采用抖动的方式模拟出灰度,我在这就图方便就用WORD 软件的“图片工具栏”来把图像转成灰度再增强对比度来获得单色图像:

不断增强对比度直到成为黑白图像。

现在图像已是黑白图了。然后把它复制,粘到画图板里调节它的大小

再用画图板里的“图像”-“拉伸/扭曲”功能,把图像缩小为128x64:

这时你把这个图存成单色位图,就是单色的BMP图像文件。

好!下面打开取字模软件,用左边“基本操作”的“打开图像图标”功能来读入我们刚才保存的单色BMP图:

下面你就要在“参数设置”里的“其它选项”来设置是需要横向取模还是纵向取模。是正序还是倒序。选择完毕后,点“取模方式”里的“C51格式”,这时在右下区的“点阵生成区”里就形成了,这个图像的点阵数据:

你可以通过复制、

这一讲说说如何用取模软件将图形转成数据吧,有很多人反复问我这个问题,我就再罗嗦下吧!

  取字模的软件有很多款。有的只能将文字转成字模数据,有的既可将文本文字转字模也能将图片转成点阵数据。在这里我就介绍一款使用简单易用的,它能将文字或图形转成我们LCD模块使用的C51数据,其它的软件也大同小异。

界面很简单,左边是各种功能和设置修改栏,右边上半部分是显示你所工作的点阵图,右下部分是文字输入框和点阵数据查看框。

  我们用它主要是想让它将文字或图形转成我们在LCD12864上显示的点阵数据。所以我就讲讲如何将文字和图形转成点阵数据。

  点击左边功能栏里的“参数设置”,再点击“文字输入区字体选择”如下图。

我们选宋体,小五号字。小五号字就是12X12的点阵。然后在“文字输入区”里输入你想要转为字模的文字。例如“你好”

接着再在“参数设置”项里点击“其他选项”如下图:

在选项中你可以设定横向取模还是纵向取模,是字节正序还是字节倒序。

然后按住“CTRL”键的同时按“Enter”键。文字点阵就显示在左上部分的点阵图上了。如下图:

如果觉得字形不好看你还可以用鼠标在点阵图上修改,点左键画点,点右键擦除。

下面就要进行点阵的

我们先写一段简单的,就在屏上显示一排“AAAAAA”。看下面的程序:

/*************************************************

名    称:LCD12864_ST7920串行方式测试

连接方式: 串行方式连接

*************************************************/

#include <reg52.h>

#define uchar unsigned char

#define uint unsigned int  

/*****LCD接口定义*****/

sbit SID = P1^0;      //串行数据

sbit SCLK = P1^1;     //串行同步时钟

/*****汉字地址表*****/

uchar code addr_tab[]={

0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,//第一行汉字位置

0x90,0x91,0x92,0x93,0x94,0x95,0x96,0x97,//第二行汉字位置

0x88,0x89,0x8a,0x8b,0x8c,0x8d,0x8e,0x8f,//第三行汉字位置

0x98,0x99,0x9a,0x9b,0x9c,0x9d,0x9e,0x9f,//第四行汉字位置

};

/*****n(ms)延时子程序*****/

void delayms(uint t)     //约延时n(ms)

{

uint i;

while(t--)

    {

     for(i=0;i<125;i++);

    }       

}

/*****串行发送一个字节*****/

void SendByte(uchar Dbyte)

{

     uchar i;

     for(i=0;i<8;i++)

     {

       SCLK = 0;

       Dbyte=Dbyte<<1;   //左移一位

     &nb