找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2644|回复: 1
收起左侧

TLC2543 +nokia5110显示屏 12位AD转换测试程序

[复制链接]
ID:336397 发表于 2018-9-21 10:51 | 显示全部楼层 |阅读模式
部分代码 可自行下载压缩包 全部代码   测试可用


#include <reg51.h>
#include <intrins.h>
#include "tlc2543.h"
#include "led_display.h"
#define L  0   //Low level;
#define H  1   //High level;
#define uint8 unsigned char
#define uint16 unsigned int
#define int8  char
#define int16 int
bit flag=0;
uint8 aa[5],*ap;
void aa1 (void) interrupt 1
{
        TH0=0x3c;
        TL0=0xb0;        
        flag=0;       
}
void initial (void)
{
TCON=(TCON&0xfe)|0x00 ;//interrupt mode control;
IE=(IE&0x7d)|0x82;//interrupt enable ;
IP=(IP&0xfe)|0x02;//interrupt priority;
TMOD=(TMOD&0xf0)|0x01;//timer counter mode;
TH0=0x3c;
TL0=0xb0;
TCON=(TCON&0xaf)|0x10;//timer control register;
CE_TLC2543   =0;
}
main(void)
{
        uint8 i;
        uint16 b;
        initial();
        START_TLC2543 ( 0x00 )         ;
        while( 1 )
        {       
                if(EOC_TLC2543)
                {
                        b=READ_TLC2543 ( 0 );
                        for( i = 0 ; i<4 ; i++ )
                        {
                               
                                aa[i]=b%10;
                                b/=10;               
                                                               
                        }
                        //flag=1;
                }
                Dynamic_Display ( 4 , aa );
        }
                         
}





#include "nokia5110.h"
#include "english_6x8_pixel.h"
#include "write_chinese_string_pixel.h"



/*-----------------------------------------------------------------------
LCD_init          : 3310LCD初始化

编写日期          :2004-8-10
最后修改日期      :2004-8-10
-----------------------------------------------------------------------*/

void delay_1us(void)                 //1us延时函数
  {
   unsigned int i;
  for(i=0;i<1000;i++);
  }

  void delay_1ms(void)                 //1ms延时函数
  {
   unsigned int i;
   for (i=0;i<1140;i++);
  }

void delay_nms(unsigned int n)       //N ms延时函数
  {
   unsigned int i=0;
   for (i=0;i<n;i++)
   delay_1ms();
  }


void LCD_init(void)
  {
            // 产生一个让LCD复位的低电平脉冲
   LCD_RST = 0;
    delay_1us();

   LCD_RST = 1;

                // 关闭LCD
   LCD_CE = 0;
    delay_1us();
                // 使能LCD
   LCD_CE = 1;
    delay_1us();

    LCD_write_byte(0x21, 0);        // 使用扩展命令设置LCD模式
    LCD_write_byte(0xc8, 0);        // 设置偏置电压
    LCD_write_byte(0x06, 0);        // 温度校正
    LCD_write_byte(0x13, 0);        // 1:48
    LCD_write_byte(0x20, 0);        // 使用基本命令
    LCD_clear();                // 清屏
    LCD_write_byte(0x0c, 0);        //  设定显示模式,正常显示

           // 关闭LCD
   LCD_CE = 0;
  }

/*-----------------------------------------------------------------------
LCD_clear         : LCD清屏函数

编写日期          :2004-8-10
最后修改日期      :2004-8-10
-----------------------------------------------------------------------*/
void LCD_clear(void)
  {
    unsigned int i;

    LCD_write_byte(0x0c, 0);                       
    LCD_write_byte(0x80, 0);                       

    for (i=0; i<504; i++)
      LCD_write_byte(0, 1);                       
  }

/*-----------------------------------------------------------------------
LCD_set_XY        : 设置LCD坐标函数

输入参数:X       :0-83
          Y       :0-5

编写日期          :2004-8-10
最后修改日期      :2004-8-10
-----------------------------------------------------------------------*/
void LCD_set_XY(unsigned char X, unsigned char Y)
  {
    LCD_write_byte(0x40 | Y, 0);                // column
    LCD_write_byte(0x80 | X, 0);                  // row
  }

/*-----------------------------------------------------------------------
LCD_write_char    : 显示英文字符

输入参数:c       :显示的字符;

编写日期          :2004-8-10
最后修改日期      :2004-8-10
-----------------------------------------------------------------------*/
void LCD_write_char(unsigned char c)
  {
    unsigned char line;

    c -= 32;

    for (line=0; line<6; line++)
      LCD_write_byte(font6x8[c][line], 1);
  }

/*-----------------------------------------------------------------------
LCD_write_english_String  : 英文字符串显示函数

输入参数:*s      :英文字符串指针;
          X、Y    : 显示字符串的位置,x 0-83 ,y 0-5

编写日期          :2004-8-10
最后修改日期      :2004-8-10                
-----------------------------------------------------------------------*/
void LCD_write_english_string(unsigned char X,unsigned char Y,char *s)
  {
    LCD_set_XY(X,Y);
    while (*s)
      {
         LCD_write_char(*s);
         s++;
      }
  }
  /*---------------------------------------------
LCD_write_byte    : 使用SPI接口写数据到LCD

输入参数:data    :写入的数据;
          command :写数据/命令选择;

编写日期          :2004-8-10
最后修改日期      :2004-8-13
-----------------------------------------------*/
void LCD_write_letter(unsigned char row, unsigned char line,unsigned char c) //row:? line:? dd:??
{
        unsigned char i;         
       
        LCD_set_XY(row, line);
        for(i=0; i<6;i++)       
        {
            LCD_write_byte(font1[c][i],1);
        }                 
            
}
/*-----------------------------------------------------------------------
LCD_write_chinese_string: 在LCD上显示汉字

输入参数:X、Y    :显示汉字的起始X、Y坐标;
          ch_with :汉字点阵的宽度
          num     :显示汉字的个数;  
          line    :汉字点阵数组中的起始行数
          row     :汉字显示的行间距
编写日期          :2004-8-11
最后修改日期      :2004-8-12
测试:
        LCD_write_chi(0,0,12,7,0,0);
        LCD_write_chi(0,2,12,7,0,0);
        LCD_write_chi(0,4,12,7,0,0);
-----------------------------------------------------------------------*/                        
void LCD_write_chinese_string(unsigned char X, unsigned char Y,
                   unsigned char ch_with,unsigned char num,
                   unsigned char line,unsigned char row)
  {
    unsigned char i,n;

    LCD_set_XY(X,Y);                             //??????

    for (i=0;i<num;)
      {
              for (n=0; n<ch_with*2; n++)              //?????
                {
                  if (n==ch_with)                      //????????
                    {
                      if (i==0) LCD_set_XY(X,Y+1);
                      else
                         LCD_set_XY((X+(ch_with+row)*i),Y+1);
              }
                  LCD_write_byte(write_chinese[line+i][n],1);
                }
              i++;
              LCD_set_XY((X+(ch_with+row)*i),Y);
      }
  }



/*-----------------------------------------------------------------------
LCD_draw_map      : 位图绘制函数

输入参数:X、Y    :位图绘制的起始X、Y坐标;
          *map    :位图点阵数据;
          Pix_x   :位图像素(长)
          Pix_y   :位图像素(宽)

编写日期          :2004-8-13
最后修改日期      :2004-8-13
-----------------------------------------------------------------------*/
void LCD_draw_bmp_pixel(unsigned char X,unsigned char Y,unsigned char *map,
                  unsigned char Pix_x,unsigned char Pix_y)
  {
    unsigned int i,n;
    unsigned char row;

    if (Pix_y%8==0) row=Pix_y/8;      //????????
      else
        row=Pix_y/8+1;

    for (n=0;n<row;n++)
      {
              LCD_set_XY(X,Y);
        for(i=0; i<Pix_x; i++)
          {
            LCD_write_byte(map[i+n*Pix_x], 1);
          }
        Y++;                         //??
      }      
  }

/*-----------------------------------------------------------------------
LCD_write_byte    : 使用SPI接口写数据到LCD

输入参数:data    :写入的数据;
          command :写数据/命令选择;

编写日期          :2004-8-10
最后修改日期      :2004-8-13
-----------------------------------------------------------------------*/
void LCD_write_byte(unsigned char dat, unsigned char command)
  {
    unsigned char i;

    LCD_CE = 0;

    if (command == 0)

     LCD_DC = 0;
    else

     LCD_DC = 1;
                for(i=0;i<8;i++)
                {
                        if(dat&0x80)
                                SDIN = 1;
                        else
                                SDIN = 0;
                        SCLK = 0;
                        dat = dat << 1;
                        SCLK = 1;
                }

     LCD_CE = 1;
  }






#include "reg51.h"
#include "nokia5110.h"
#include "tlc2543.h"

//***********************************
#define                delay_time        25767
#define  unit unsigned int
#define  uchar unsigned char

uchar h,g;
uint8 aa[5],*ap;

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

/******************************************************************************/
void main(void)

{

           uint8 i;
        uint16 b;

         CE_TLC2543   =0;
         START_TLC2543 ( 1 ) ;                        //通道1开始转换
       
        LCD_init();     
        LCD_clear();


        while( 1 )
        {                                                                                          
            LCD_write_chinese_string(1,1,12,5,0,3);
                LCD_write_english_string(0,3,"Z:");
                   LCD_write_english_string(0,4,"Y:");
                LCD_write_english_string(0,5,"X:");
                if(EOC_TLC2543)
                {
                        b=READ_TLC2543 ( 1 );                 //读通道1的值
                        for( i = 0 ; i<4 ; i++ )
                        {
                                aa[i]=b%10;
                                LCD_write_letter(54-6*i,3,aa[i]);
                                b/=10;
                                  g++        ;
                                g=0;
                        }


                 if(g==1){START_TLC2543 ( 2 ) ; }                 //通道2开始转换
                 if(EOC_TLC2543)
                {
                        b=READ_TLC2543 ( 2 );  //读通道2
                        for( i = 0 ; i<4 ; i++ )
                        {
                                aa[i]=b%10;
                                LCD_write_letter(54-6*i,4,aa[i]);
                                b/=10;
                                  h++;
                                h=0;
                        }
                  
                 if(h==1){START_TLC2543 ( 3 ) ; }
                 if(EOC_TLC2543)
                {
                        b=READ_TLC2543 ( 3 );
                        for( i = 0 ; i<4 ; i++ )
                        {
                                aa[i]=b%10;
                                LCD_write_letter(54-6*i,5,aa[i]);
                                b/=10;
                                 
                        }


                  
                  
       
}       
}       
}       
}                       
}       
                  




多通道转换AD TLC2543液晶显示.zip

58.75 KB, 下载次数: 39, 下载积分: 黑币 -5

评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

回复

使用道具 举报

ID:27254 发表于 2020-2-9 10:55 | 显示全部楼层
楼主辛苦,谢谢发帖!
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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