搜索
bottom↓
回复: 121

超声波测距原理图、PCB、源代码!!【恢复】

[复制链接]

出0入0汤圆

发表于 2008-12-18 09:39:11 | 显示全部楼层 |阅读模式
文件如下:

超声波PCBourdev_548882.rar(文件大小:21K) (原文件名:超声波PCB.rar) 

超声波原理图ourdev_548883.rar(文件大小:3K) (原文件名:CX20106.rar) 



文本语音合成软件(联网才能用!!)ourdev_548924.rar(文件大小:508K) (原文件名:KDVoiceV2.20文本语音合成.rar) 

语音单片机使用资料ourdev_548925.rar(文件大小:2.41M) (原文件名:WT588D语音单片机使用资料.rar) 



   原理图中并接在超声波接收头两端的瓷片电容不用的话可以增强信号,但是抗干扰性不强。我的做法是牺牲抗干扰性,提高距离,呵呵,没办法只能这样了。另外还有要说明的是发送与接收探头的距离是8个cm!!这样才能保证测量距离,我做好的测距距离是接近6米。发送与接收探头的距离可能还可以小一点,但不能小于4cm(网上说的),我做过间距为2cm的时候测距距离为3米左右。



主程序:



#include<reg51.h>

#include"12864.h"

#include<INTRINS.H>

#define        uc                         unsigned char

#define        ui                         unsigned int

#define        nop                        _nop_()

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

变量定义

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

uc                ID1=0,ID2=0;

float        distance;

ui                count=0,dis1;

uc                 high_time,low_time,flag=0;

//uc                i=0;

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

常量定义

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

#define        circle                0xf2//循环播放

#define        stop_play        0xfe//停止播放

#define        vo_0                0xe0//音量1

#define        vo_1                0xe1//音量2

#define        vo_2                0xe2//音量3

#define        vo_3                0xe3//音量4

#define        vo_4                0xe4//音量5

#define        vo_5                0xe5//音量6

#define        vo_6                0xe6//音量7

#define        vo_7                0xe7//音量8

#define        ID1_count        22//k1计数值

#define        ID2_count        100//k2计数值

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

语音单片机WT588D位定义

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

sbit        RST=P0^3;//复位端

sbit        CS1=P0^1;//片选端

sbit        CLK=P0^0;//时钟

sbit        DAT=P0^2;//数据位

sbit        busy=P0^4;//忙信号

sbit         csb=P3^6;

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

函数声明

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

void         delay_nms(ui ms);//延时nms

void         delay100us();//延时100us

void         send_com(uc add);//发送语音地址,指定播放某段语音

void         init();//语音单片机WT588D

float         Distance_count();//距离计算转换

void         sound(uc soud);//播放

void         tran();//送超声波信号进行测距

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

主函数

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

void main()

{

        uc i,j,k;

        ui tp=0;

        init();

        LcmInit();//lcd初始化        

        LcmClearTXT();//lcd清除显示

        PutStr(1,0,DIS2);//显示距离

        while(1)

        {

                for(i=0;i<10;i++)//测量10次

                {

                        tran();//发送超声波信号测距

                        tp=tp+dis1;//10次相加,下面求平均值

                }

                dis1=tp/10;//取平均值

                tp=0;//清零,为下次测量做准备

                sound(dis1);//语音播报

                i=dis1/100;//数据转换给lcd显示

                j=dis1%100/10;

                k=dis1%100%10;

                LCDXY(1,3);//设定显示位置

                Write_number(i);//显示数字

                LCDXY(1,5);

                Write_number(j);

                Write_number(k);

        }

}

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

初始化

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

void init()

{

           TMOD=0x01;//定时器0方式1用于计时,定时器1用于产生38K方波

        TH0=0;

        TL0=0;                /* 设定T0的工作模式为2*/

        EA=1;

        IT1=1;//下降沿有效,左传感器

}

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

左发送超声波函数,实测为38KHz信号,8个这样的方波

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

void         tran()

{

        uc i;

        TH0=0;

        TL0=0;//清定时0

        TR0=1;//开定时0

        for(i=8;i>0;i--)

        {

                csb=!csb;

                //nop;

                nop;

                nop;

                nop;

                nop;

                nop;

                nop;

                nop;

                nop;

                nop;

        }

        csb=1;

        delay_nms(1);//延时1ms左右后再开中断,避免直接回来的回波

        EX1=1;

        delay_nms(50);

        if(flag==1)

                {

                        distance=Distance_count();

                        dis1=(unsigned int)distance;

                        flag=0;

                }

                else dis1=0;

}

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

延时n个ms函数

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

void delay_nms(ui ms)   //delay ms function                              

{                        

  uc i; 

      while(ms--)

      {

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

       }

}

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

延时100us函数

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

void delay100us()

{

        uc j;

        for(j=50;j>0;j--);

}

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

发码播放函数;add为语音地址

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

void send_com(uc add)

{

         uc i;

        RST=1;

        RST=0;

        delay_nms(3);

        RST=1;

        delay_nms(20);

        CS1=0;

        delay_nms(5);

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

        {

                 CLK=0;

                if(add&1)        DAT=1;

                        else        DAT=0;

                        delay100us();

                        CLK=1;

                        delay100us();

                        add=add>>1;

        }

        CS1=1;

}

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



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

void sound(ui soud)

{

        ui i,j,k;

        if(soud==0)

        {

                send_com(13);//播放“超出测量范围,请重新测量”

                delay_nms(50);

                while(!busy);

        }

        else

        {

        i=soud/100;

        j=soud%100/10;

        k=soud%100%10;

        //send_com(10);//播放"障碍物距离"

        //delay_nms(50);

        //while(!busy);

         send_com(i);

        delay_nms(50);

        while(!busy);

        send_com(11);//播放点

        delay_nms(50);

        while(!busy);

        send_com(j);

        delay_nms(50);

        while(!busy);

        send_com(k);

        delay_nms(50);

        while(!busy);

        send_com(12);//播放米

        delay_nms(50);

        while(!busy);

        }

}

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

距离计算函数

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

float Distance_count()

{

        float temp;

        temp=high_time*256+low_time;

        //temp-2000;

        temp=(temp/1000)/2;

        temp*=344;

        temp=temp/10;

        return temp;

}

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

外部中断服务函数

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

void TT() interrupt 2

{

        ui tmp;

        TR0=0;//关定时器0

        ET1=0;//关外部中断

        flag=1;//外部中断标志位

        tmp=TH0*256+TL0;

        if((tmp>0)&&(tmp<60000))        

                {

                         high_time=TH0;

                        low_time=TL0;        

                }

                else 

                        {

                                 high_time=0;

                                low_time=0;        

                        } 



}









12864液晶显示函数(三线串口驱动):





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

*                                                                *

* ME500单片机开发系统演示程序 - 12864 图片与文字显示             * 

*                                                                *

* ST7920控制芯片(汉字库),串口模式。                             *

*                                                                *

* 版本: V1.0 (2006/11/20)                                       *

* 作者: gguoqing (Email: gguoqing@willar.com)                   *

* 网站: www.willar.com(伟纳电子)  www.mcusj.com(伟纳单片机世界) *

* 邮箱: support@willar.com                                      *

*                                                                *

*【版权】COPYRIGHT(C)伟纳电子 www.willar.com ALL RIGHTS RESERVED *

*【声明】此程序仅用于学习与参考,引用请注明版权和作者信息!      *

*                                                                *

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



/********** 12864LCD引脚定义 **********/



/*sbit CS    =  P2^5;        //片选 高电平有效 单片LCD使用时可固定高电平

sbit SID   =  P2^7;        //数据

sbit SCLK  =  P2^6;        //时钟*/

#include<reg51.h>

#define uchar unsigned char

#define uint  unsigned int        

sbit CS    =  P2^0;        //片选 高电平有效 单片LCD使用时可固定高电平

sbit SID   =  P2^1;        //数据

sbit SCLK  =  P2^2;        //时钟

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

uchar         code  DIS11[] = {"危险距离"};

uchar         code  DIS12[] = {"安全距离"};

uchar         code  DIS13[] = {"保持距离"};

uchar         code  DIS14[] = {"测量中.........."};

uchar         code  DIS2[] = {"距离:  点    米"};

uchar         code  DIS3[] = {"星期"};

//uchar         code  DIS4[] = {"TEL:15878671024 "};

uchar         code  DIS5[] = {"H:    L:        "};

uchar         code BMP1[] ={

0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,

0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,

0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,

0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0xF9,0xFF,0xC0,0x00,0x00,0x00,0x00,

0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x0F,0xFF,0xF8,0x00,0x00,0x00,0x00,

0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0C,0x04,0x00,0x0E,0x00,0x00,0x00,0x00,

0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x00,0x00,0x01,0x80,0x00,0x00,0x00,

0x00,0x00,0x98,0x00,0x00,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x60,0x00,0x00,0x00,

0x00,0x03,0x98,0x00,0x00,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x30,0x00,0x00,0x00,

0x00,0x01,0x90,0x00,0x00,0x00,0x00,0x70,0x08,0x00,0x00,0x00,0x18,0x00,0x00,0x00,

0x00,0x00,0xD0,0x00,0x00,0x00,0x00,0x60,0x0C,0x00,0x00,0x00,0x0C,0x00,0x00,0x00,

0x00,0x0C,0xD0,0x00,0x00,0x00,0x00,0x66,0x0C,0x00,0x00,0x00,0x06,0x00,0x00,0x00,

0x00,0x0E,0x40,0x00,0x00,0x00,0x00,0x4E,0x0C,0x00,0x00,0x00,0x03,0x00,0x00,0x00,

0x00,0x07,0x00,0x00,0x00,0x00,0x00,0x48,0x08,0x00,0x00,0x00,0x03,0x00,0x00,0x00,

0x00,0x00,0x18,0x00,0x00,0x00,0x00,0x10,0x98,0x00,0x00,0x00,0x03,0x80,0x00,0x00,

0x00,0x3E,0x1C,0x00,0x00,0x00,0x01,0x03,0x90,0x00,0x00,0x00,0x01,0x80,0x00,0x00,

0x00,0x3E,0x3E,0x00,0xFF,0xE0,0x03,0x8F,0xD0,0x00,0x00,0x00,0x01,0x80,0x00,0x00,

0x00,0x00,0x3F,0x07,0xFF,0xFC,0x07,0x40,0x33,0x00,0x00,0x00,0x00,0x80,0x00,0x00,

0x00,0x00,0x1F,0x9F,0xFF,0xFE,0x1F,0xCE,0x31,0x80,0x00,0x00,0x00,0xC0,0x00,0x00,

0x00,0x00,0x0F,0xFF,0xFF,0xFF,0xBF,0x83,0xB0,0x80,0x00,0x00,0x00,0xC0,0x00,0x00,

0x00,0x00,0x03,0xFF,0xFF,0xFF,0xFF,0x01,0xB0,0x00,0x00,0x00,0x00,0xC0,0x00,0x00,

0x00,0x00,0x01,0xFF,0xFF,0xFF,0xFC,0x00,0x30,0x00,0x00,0x00,0x00,0xC0,0x00,0x00,

0x00,0x00,0x03,0xFF,0xFF,0xFF,0xF8,0x00,0x30,0x00,0x00,0x00,0x00,0x40,0x00,0x00,

0x00,0x00,0x07,0xFF,0xFF,0xFF,0xF8,0x00,0x30,0x00,0x00,0x00,0x00,0x40,0x00,0x00,

0x00,0x00,0x07,0xFF,0x80,0x1F,0xF8,0x00,0x30,0x00,0x00,0x00,0x00,0x40,0x00,0x00,

0x00,0x00,0x0F,0xFE,0x00,0x03,0xFC,0x00,0x10,0x00,0x00,0x00,0x00,0xC0,0x00,0x00,

0x00,0x00,0x0F,0xF8,0x00,0x00,0xFC,0x00,0x10,0x00,0x00,0x00,0x00,0x80,0x00,0x00,

0x00,0x00,0x0F,0xF0,0x00,0x00,0x7E,0x00,0x10,0x00,0x00,0x00,0x00,0x80,0x00,0x00,

0x00,0x00,0x1F,0xC0,0x00,0x00,0x3E,0x00,0x18,0x00,0x00,0x00,0x00,0x80,0x00,0x00,

0x00,0x00,0x1F,0x80,0x00,0x00,0x1E,0x00,0x1B,0x00,0x00,0x00,0x01,0x80,0x00,0x00,

0x00,0x00,0x1F,0x00,0x00,0x00,0x0E,0x00,0x7B,0x00,0x00,0x00,0x01,0x00,0x00,0x00,

0x00,0x00,0x1E,0x08,0x00,0x04,0x0E,0x00,0x58,0x00,0x00,0x00,0x03,0x00,0x00,0x00,

0x00,0x00,0x1E,0x10,0x00,0x02,0x06,0x00,0x30,0x00,0x00,0x18,0x02,0x00,0x00,0x00,

0x00,0x00,0x1E,0x00,0x00,0x00,0x06,0x00,0x20,0xC0,0x00,0x06,0x06,0x00,0x00,0x00,

0x00,0x00,0x1E,0x00,0x00,0x00,0x0E,0x00,0x20,0x60,0x00,0x02,0x04,0x00,0x00,0x00,

0x00,0x00,0x0E,0x00,0x00,0x00,0x0E,0x00,0x20,0x00,0x00,0x02,0x0C,0x00,0x00,0x00,

0x00,0x00,0x0E,0x00,0x00,0x00,0x0E,0x00,0x20,0x00,0x00,0x7C,0x18,0x00,0x00,0x00,

0x00,0x00,0x0E,0x00,0x00,0x00,0x0E,0x00,0x18,0x00,0x00,0x18,0x30,0x00,0x00,0x00,

0x00,0x00,0x0E,0x00,0x00,0x00,0x0C,0x00,0x0D,0xC0,0x00,0x00,0x60,0x00,0x00,0x00,

0x00,0x00,0x0E,0x00,0x00,0x00,0x0E,0x00,0x06,0x60,0x00,0x01,0xC0,0x00,0x00,0x00,

0x00,0x00,0x1E,0x00,0x00,0x00,0x0A,0x00,0x03,0x80,0x00,0x03,0x80,0x00,0x00,0x00,

0x00,0x00,0x12,0x00,0xC0,0x20,0x0A,0x00,0x00,0xE0,0x00,0x0E,0x00,0x00,0x00,0x00,

0x00,0x00,0x02,0x00,0xC0,0x70,0x0A,0x00,0x00,0x1C,0x00,0x7C,0x00,0x04,0x3C,0x00,

0x00,0x00,0x0E,0x00,0xC7,0x30,0x0C,0x00,0x00,0x0F,0xFF,0xE0,0x00,0x03,0xFC,0x00,

0x00,0x00,0x04,0x00,0x00,0x00,0x08,0x00,0x00,0x18,0x1C,0x00,0x00,0x03,0xF8,0x00,

0x00,0x00,0x02,0x00,0x00,0x00,0x08,0x00,0x00,0x10,0x04,0x00,0x00,0x07,0xF8,0x00,

0x00,0x00,0x02,0x00,0x00,0x00,0x08,0x00,0x00,0x30,0x0C,0x00,0x00,0x0D,0xF8,0x00,

0x00,0x00,0x03,0x00,0x00,0x00,0x08,0x00,0x00,0x60,0x0C,0x00,0x00,0x01,0xF0,0x00,

0x00,0x00,0x01,0x80,0x00,0x00,0x10,0x00,0x00,0x64,0x0C,0x00,0x00,0x00,0xC0,0x00,

0x00,0x00,0x00,0xC0,0x00,0x00,0x70,0x00,0x00,0x72,0x0C,0x00,0x00,0x00,0x40,0x00,

0x00,0x00,0x00,0x60,0x10,0x00,0xC0,0x00,0x00,0xC2,0x04,0x00,0x00,0x03,0xC0,0x00,

0x00,0x00,0x00,0x1C,0x06,0x03,0x00,0x00,0x01,0x83,0x04,0x00,0x00,0x07,0xC0,0x00,

0x00,0x00,0x00,0x07,0x80,0x1C,0x00,0x00,0x03,0x01,0x00,0x00,0x00,0x0F,0x40,0x00,

0x00,0x00,0x00,0x00,0x1F,0xA0,0x00,0x00,0x06,0x01,0x82,0x00,0x00,0x00,0x48,0x00,

0x00,0x00,0x00,0x00,0x10,0x18,0x00,0x00,0x04,0x00,0x81,0x00,0x00,0x00,0x7C,0x00,

0x00,0x00,0x00,0x00,0x10,0x14,0x00,0x00,0x04,0x00,0x41,0x00,0x00,0x00,0x78,0x00,

0x00,0x00,0x00,0x00,0x90,0xF0,0x00,0x00,0x0C,0x00,0x40,0xC0,0x00,0x00,0x40,0x00,

0x00,0x00,0x04,0x01,0x1F,0xF8,0x00,0x00,0x3F,0xC0,0x60,0x60,0x00,0x00,0x40,0x00,

0x00,0x00,0x08,0x06,0x1F,0xF8,0x80,0x00,0x21,0xFF,0xF0,0x30,0x00,0x00,0x40,0x00,

0x00,0x00,0x08,0x08,0x3F,0xFC,0x80,0x00,0x20,0x00,0x18,0x30,0x00,0x00,0x40,0x00,

0x00,0x00,0x08,0x08,0x3F,0xFC,0x80,0x00,0x20,0x00,0x0C,0x30,0x00,0x00,0x00,0x00,

0x00,0x00,0x04,0x04,0x7F,0xFC,0x00,0x00,0x00,0x00,0x07,0x10,0x00,0x00,0x00,0x00,

0x00,0x00,0x00,0x01,0x7F,0xFD,0x00,0x00,0x10,0x00,0x01,0xE0,0x00,0x00,0x00,0x00,

0x00,0x00,0x02,0x03,0xFF,0xFD,0x00,0x00,0x10,0x0F,0x00,0x00,0x00,0x00,0x00,0x00,

};

uchar code AC_TABLE[]={

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,      //第四行汉字位置

};

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

*                                                       *                                                 

* 延时t毫秒                                             *

* 11.0592MHz时钟,延时约1ms                             *        

*                                                       *

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

void delay(uint t)

{                           

   uchar k;

   while(t--)

   {

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

     { }

   }

}

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

*                                                        *

* 延时函数 200us                                         *

*                                                        *

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

void delay_lcd(int ms)

{

  uchar t;

  while(ms--)

  {

    for(t=0; t<20; t++) ;

  }

}

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

* 函数名称    :SendByte

* 功能描述    :串口发送一个字节

* 参数        :  参数名称:        输入/输出?        类型                描述

* 

* 返回值      :

* 作者        :

* 创建日期    :2006-12-19

* 全局变量    :

* 全局静态变量:

* 局部静态变量:

*----------------------------------------修改历史------------------------------------------

* 当前版本    :                          修改人:                  修改日期:

* 修改说明    :

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

void SendByte(uchar Dbyte)

{

     uchar i;

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

     {

           SCLK = 0;

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

           SID = CY;            //移出的位给SID

           SCLK = 1;

           SCLK = 0;

     }

}



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

* 函数名称    :ReceiveByte

* 功能描述    :串口接收一个字节

* 参数        :  参数名称:        输入/输出?        类型                描述

* 仅在读取数据的时候用到

* 而读出的数据是一次只能读出4bit的

* 返回值      :

* 作者        :

* 创建日期    :2006-12-19

* 全局变量    :

* 全局静态变量:

* 局部静态变量:

*----------------------------------------修改历史------------------------------------------

* 当前版本    :                          修改人:                  修改日期:

* 修改说明    :

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

uchar ReceiveByte(void)

{

     uchar i,temp1,temp2;

     temp1 = 0;

     temp2 = 0;

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

     {

           temp1=temp1<<1;

           SCLK = 0;

           SCLK = 1;            

           SCLK = 0;

           if(SID) temp1++;

     }

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

     {

           temp2=temp2<<1;

           SCLK = 0;

           SCLK = 1;

           SCLK = 0;

           if(SID) temp2++;

     }

     return ((0xf0&temp1)+(0x0f&temp2));

}

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

* 函数名称    :CheckBusy

* 功能描述    :

* 参数        :  参数名称:        输入/输出?        类型                描述

* 

* 返回值      :

* 作者        :

* 创建日期    :2006-12-19

* 全局变量    :

* 全局静态变量:

* 局部静态变量:

*----------------------------------------修改历史------------------------------------------

* 当前版本    :                          修改人:                  修改日期:

* 修改说明    :

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

void CheckBusy( void )

{

     do   SendByte(0xfc);      //11111,RW(1),RS(0),0

     while(0x80&ReceiveByte());      //BF(.7)=1 Busy

}

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

* 函数名称    :WriteCommand

* 功能描述    :

* 参数        :  参数名称:        输入/输出?        类型                描述

* 

* 返回值      :

* 作者        :

* 创建日期    :2006-12-19

* 全局变量    :

* 全局静态变量:

* 局部静态变量:

*----------------------------------------修改历史------------------------------------------

* 当前版本    :                          修改人:                  修改日期:

* 修改说明    :

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

void WriteCommand(uchar Cbyte )

{

     CS = 1;

     CheckBusy();

     SendByte(0xf8);            //11111,RW(0),RS(0),0

     SendByte(0xf0&Cbyte);      //高四位

     SendByte(0xf0&Cbyte<<4);//低四位(先执行<<)

     CS = 0;

}

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

* 函数名称    :WriteData

* 功能描述    :

* 参数        :  参数名称:        输入/输出?        类型                描述

* 

* 返回值      :

* 作者        :

* 创建日期    :2006-12-19

* 全局变量    :

* 全局静态变量:

* 局部静态变量:

*----------------------------------------修改历史------------------------------------------

* 当前版本    :                          修改人:                  修改日期:

* 修改说明    :

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

void WriteData(uchar Dbyte )

{

     CS = 1;

     CheckBusy();

     SendByte(0xfa);            //11111,RW(0),RS(1),0

     SendByte(0xf0&Dbyte);      //高四位

     SendByte(0xf0&Dbyte<<4);//低四位(先执行<<)

     CS = 0;

}

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

* 函数名称    :ReadData

* 功能描述    :

* 参数        :  参数名称:        输入/输出?        类型                描述

* 

* 返回值      :

* 作者        :

* 创建日期    :2006-12-19

* 全局变量    :

* 全局静态变量:

* 局部静态变量:

*----------------------------------------修改历史------------------------------------------

* 当前版本    :                          修改人:                  修改日期:

* 修改说明    :

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

uchar ReadData( void )

{

     CheckBusy();

     SendByte(0xfe);            //11111,RW(1),RS(1),0

     return ReceiveByte();

}

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

* 函数名称    :LcmInit

* 功能描述    :

* 参数        :  参数名称:        输入/输出?        类型                描述

* 

* 返回值      :

* 作者        :

* 创建日期    :2006-12-19

* 全局变量    :

* 全局静态变量:

* 局部静态变量:

*----------------------------------------修改历史------------------------------------------

* 当前版本    :                          修改人:                  修改日期:

* 修改说明    :

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

void LcmInit( void )

{

     WriteCommand(0x30);      //8BitMCU,基本指令集合

     WriteCommand(0x03);      //AC归0,不改变DDRAM内容

     WriteCommand(0x0C);      //显示ON,游标OFF,游标位反白OFF

     WriteCommand(0x01);      //清屏,AC归0

     WriteCommand(0x06);      //写入时,游标右移动

}



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

* 函数名称    :LcmClearTXT

* 功能描述    :文本区清RAM函数

* 参数        :  参数名称:        输入/输出?        类型                描述

* 

* 返回值      :

* 作者        :

* 创建日期    :2006-12-19

* 全局变量    :

* 全局静态变量:

* 局部静态变量:

*----------------------------------------修改历史------------------------------------------

* 当前版本    :                          修改人:                  修改日期:

* 修改说明    :

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

void LcmClearTXT( void )

{

     uchar i;

     WriteCommand(0x30);      //8BitMCU,基本指令集合

     WriteCommand(0x80);      //AC归起始位

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

     WriteData(0x20);

}



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

* 函数名称    :LcmClearBMP

* 功能描述    :图形区清RAM函数

* 参数        :  参数名称:        输入/输出?        类型                描述

* 图形区和文本区显示在两个不同的RAM区

* 返回值      :

* 作者        :

* 创建日期    :2006-12-19

* 全局变量    :

* 全局静态变量:

* 局部静态变量:

*----------------------------------------修改历史------------------------------------------

* 当前版本    :                          修改人:                  修改日期:

* 修改说明    :

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

void LcmClearBMP( void )

{

     uchar i,j;

     WriteCommand(0x34);      //8Bit扩充指令集,即使是36H也要写两次

     WriteCommand(0x36);      //绘图ON,基本指令集里面36H不能开绘图

     for(i=0;i<32;i++)            //12864实际为256x32

     {

           WriteCommand(0x80|i);      //行位置

           WriteCommand(0x80);      //列位置

           for(j=0;j<32;j++)            //256/8=32 byte

                WriteData(0);

     }

}

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

* 函数名称    :PutStr

* 功能描述    :

* 参数        :  参数名称:        输入/输出?        类型                描述

* 

* 返回值      :

* 作者        :

* 创建日期    :2006-12-19

* 全局变量    :

* 全局静态变量:

* 局部静态变量:

*----------------------------------------修改历史------------------------------------------

* 当前版本    :                          修改人:                  修改日期:

* 修改说明    :

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

void PutStr(uchar row,uchar col,uchar *puts)

{

     WriteCommand(0x30);      //8BitMCU,基本指令集合

     WriteCommand(AC_TABLE[8*row+col]);      //起始位置

     while(*puts != '\0')      //判断字符串是否显示完毕

     {

           if(col==8)            //判断换行

           {            //若不判断,则自动从第一行到第三行

                 col=0;

                 row++;

           }

           if(row==4) row=0;      //一屏显示完,回到屏左上角

           WriteCommand(AC_TABLE[8*row+col]);

           WriteData(*puts);      //一个汉字要写两次

           puts++;

           WriteData(*puts);

           puts++;

           col++;

     }

}

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

* 函数名称    :PutBMP

* 功能描述    :

* 参数        :  参数名称:        输入/输出?        类型                描述

* 

* 返回值      :

* 作者        :

* 创建日期    :2006-12-19

* 全局变量    :

* 全局静态变量:

* 局部静态变量:

*----------------------------------------修改历史------------------------------------------

* 当前版本    :                          修改人:                  修改日期:

* 修改说明    :

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

void PutBMP(uchar *puts)

{

     uint x=0;

     uchar i,j;

     WriteCommand(0x34);      //8Bit扩充指令集,即使是36H也要写两次

     WriteCommand(0x36);      //绘图ON,基本指令集里面36H不能开绘图

     for(i=0;i<32;i++)            //12864实际为256x32

     {

           WriteCommand(0x80|i);      //行位置

           WriteCommand(0x80);      //列位置

           for(j=0;j<32;j++)      //256/8=32 byte

           {            //列位置每行自动增加

                 WriteData(puts[x]);

                 x++;

           }

     }

}

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

* 函数名称    :DisplayDots

* 功能描述    :

* 参数        :  参数名称:        输入/输出?        类型                描述

* 

* 返回值      :

* 作者        :

* 创建日期    :2006-12-19

* 全局变量    :

* 全局静态变量:

* 局部静态变量:

*----------------------------------------修改历史------------------------------------------

* 当前版本    :                          修改人:                  修改日期:

* 修改说明    :

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

void DisplayDots(uchar DotByte)

{

     uchar i,j;

     WriteCommand(0x34);      //8Bit扩充指令集,即使是36H也要写两次

     WriteCommand(0x36);      //绘图ON,基本指令集里面36H不能开绘图

     for(i=0;i<32;i++)            //12864实际为256x32

     {

           WriteCommand(0x80|i);      //行位置

           WriteCommand(0x80);      //列位置

           for(j=0;j<32;j++)      //256/8=32 byte

           {            //列位置每行自动增加

              WriteData(DotByte);                  

           }

           DotByte=~DotByte;

     }

}

LCDXY(uchar H,uchar L)

{

         WriteCommand(0x30);      //8BitMCU,基本指令集合

    WriteCommand(AC_TABLE[8*H+L]);      //起始位置

}

void Write_number(uchar s)//        数字显示函数

{        

                WriteData(s+0x30);

                //WriteData(s);

                //WriteCommand(0x06);

                //Delaynms(1);

}

/*void show_time()   //液晶显示程序

{

          //DS1302_GetTime(&CurrentTime);  //获取时钟芯片的时间数据

          //TimeToStr(&CurrentTime);       //时间数据转换液晶字符

          //DateToStr(&CurrentTime);       //日期数据转换液晶字符

          //ReadTemp();                    //开启温度采集程序

          //temp_to_str();                 //温度数据转换成液晶字符

          //PutStr(0,0,CurrentTime.TimeString);

          PutStr(0,5,DIS3);

        //PutStr(0,7,week_value);

          //PutStr(3,0,DIS5);

        //PutStr(1,TempBuffer);

        write(1,0xA1);        

        write(1,0xE6); 

}*/



本贴被 xsh2005105326 编辑过,最后修改时间:2008-12-18,09:58:27.

阿莫论坛20周年了!感谢大家的支持与爱护!!

一只鸟敢站在脆弱的枝条上歇脚,它依仗的不是枝条不会断,而是自己有翅膀,会飞。

出0入0汤圆

 楼主| 发表于 2008-12-18 09:59:59 | 显示全部楼层
图片没拍,货已经卖给别人了,临时做的,一天就搞完了,然后卖了呵呵,没相机,来不急拍了

出0入0汤圆

 楼主| 发表于 2008-12-18 15:20:35 | 显示全部楼层
这个程序是没有校正的,误差很大,校正之后误差在正负1cm
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-5-13 04:21

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

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