关于红外测温的。。。

2019-03-24 17:38发布

用proteus仿真,需要用到TN9,proteus里面好像没有啊,老师说用其他温度传感器仿一个,怎么弄额。。。 此帖出自小平头技术问答
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
5条回答
嵌入式追溯者
2019-03-25 06:58
#include"NBCTFT.h"
#include"reg52.h"

//**************控制端口定义********************
#define DataPort P0     //数据口使用DataPort

sbit RS    =P2^5;                //数据/命令选择
sbit RW    =P2^4;       //写数据/命令
sbit nRD   =P2^3;       //读控制
sbit CS    =P2^2;                //片选
sbit RES   =P2^1;                //复位

sbit LE    =P2^0;       //74HC573锁存控制
//**************声明外部函数和变量**************

extern unsigned int Device_code;

//================================================================================================
//        实现功能:        延时
//        输入参数:        count 设置延时时间
//================================================================================================
void delayms(unsigned int count)
{
    int i,j;                                                                                
    for(i=0;i<count;i++)                                                                    
       {
             for(j=0;j<255;j++);
       }                                                                                    
}

//================================================================================================
//        实现功能:        写命令
//        输入参数:  DH 需要输入16bits命令的高8位
//              DL 需要输入16bits命令的低8位
//================================================================================================
void Write_Cmd(unsigned char DH,unsigned char DL)
{
        CS=0;
        RS=0;
    nRD=1;
    RW=0;

    //注意:当使用8位数据口驱动16位数据模式时,使用74HC573作为IO扩展,程序如下
    DataPort=DH;            //送高8位命令给573待锁存
    LE=1;                   //锁存位
    LE=0;                   //断开锁存,位选573的Q7~Q0仍保持

        DataPort=DL;            //送低8位命令给TFT

        /*
    //如果使用16位数据口驱动16位数据模式,则无需IO扩展,直接将数据送到数据口即可
    DataPort_L=DL;
    DataPort_H=DH;
        */

        RW=1;
        CS=1;
}

//================================================================================================
//        实现功能:        写数据(2*8bits)
//        输入参数:  DH 需要输入16bits数据的高8位
//              DL 需要输入16bits数据的低8位
//================================================================================================
void Write_Data(unsigned char DH,unsigned char DL)
{
        
        CS=0;
        RS=1;

    //注意:当使用8位数据口驱动16位数据模式时,使用74HC573作为IO扩展,程序如下
        DataPort=DH;            //送高8位数据给573待锁存
    LE=1;                   //锁存位
    LE=0;                   //断开锁存,位选573的Q7~Q0仍保持

        DataPort=DL;            //送低8位数据给TFT

        /*
    //如果使用16位数据口驱动16位数据模式,则无需IO扩展,直接将数据送到数据口即可
    DataPort_L=DL;
    DataPort_H=DH;
        */

        RW=0;
        RW=1;
        CS=1;
}

//================================================================================================
//        实现功能:        写数据(16位)
//        输入参数:  y 需要输入16bits数据
//================================================================================================
void  Write_Data_U16(unsigned int y)
{
        unsigned char m,n;
        m=y>>8;
        n=y;
        Write_Data(m,n);
}

//================================================================================================
//        实现功能:        向x寄存器写入y数据
//        输入参数:  x 需要输入的命令 16位
//              y 需要输入的数据 16位
//================================================================================================
void  Write_Cmd_Data (unsigned char x,unsigned int y)
{
        unsigned char m,n;
        m=y>>8;
        n=y;
        Write_Cmd(0x00,x);
        Write_Data(m,n);
}

//================================================================================================
//        实现功能:        TFT清屏
//        输入参数:        bColor 清屏所使用的背景 {MOD}
//================================================================================================
void CLR_Screen(unsigned int bColor)
{
unsigned int i,j;
LCD_SetPos(0,240,0,320);//320x240
for (i=0;i<320;i++)
        {
           for (j=0;j<240;j++)
               Write_Data_U16(bColor);
        }
}

//================================================================================================
//        实现功能:        显示Ascii字符
//  输入参数:  x 横坐标
//              y 纵坐标
//                        c 需要显示的字符
//                        fColor 字符颜 {MOD}
//                        bColor 字符背景颜 {MOD}
//================================================================================================
#include "Ascii_8x16.h"
void LCD_PutChar(unsigned short x, unsigned short y, char c, unsigned int fColor, unsigned int bColor)
{
unsigned int i,j;
LCD_SetPos(x,x+8-1,y,y+16-1);                    //设置字符显示位置
for(i=0; i<16;i++) {                             //循环写入16字节,一个字符为16字节
                unsigned char m=Font8x16[(c-0x20)*16+i];  //提取c字符的第i个字节以,c减去0x20是由于Ascii码库中的0~1f被去掉
                for(j=0;j<8;j++) {                        //循环写入8位,一个字节为8位
                        if((m&0x80)==0x80) {                  //判断最高位是否为1
                                Write_Data_U16(fColor);           //最高位为1,写入字符颜 {MOD}
                                }
                        else {
                                Write_Data_U16(bColor);           //最高位为0,写入背景颜 {MOD}
                                }
                        m<<=1;                                //左移1位,准备写下一位
                        }
                }
}

//================================================================================================
//        实现功能:        显示16x16汉字
//  输入参数:  x 横坐标
//              y 纵坐标
//                        g 需要显示的字符编码
//                        fColor 字符颜 {MOD}
//                        bColor 字符背景颜 {MOD}
//================================================================================================
#include "chinese.h"        //包含16*16汉字字模

void Put16x16(unsigned short x, unsigned short  y, unsigned char g[2], unsigned int fColor,unsigned int bColor)
{
        unsigned int i,j,k;

        LCD_SetPos(x,  x+16-1,y, y+16-1);                       //设置汉字显示位置

        for (k=0;k<64;k++)                                      //循环64次,查询汉字字模位置
        {
          if ((ch16[k].GBK[0]==g[0])&&(ch16[k].GBK[1]==g[1]))   //判断第k个汉字的编码是否与输入汉字g[2]相等
          {
            for(i=0;i<32;i++)                                   //如果相等,既已找到待显示字模位置,循环写入32字节
                {
                  unsigned short m=ch16[k].hz16;                 //读取32字节中的第i字节
                  for(j=0;j<8;j++)                                  //循环写入8位数据
                   {                                                
                         if((m&0x80)==0x80) Write_Data_U16(fColor);     //判断最高位是否为1,最高位为1,写入字符颜 {MOD}
                         else              Write_Data_U16(bColor);      //最高位为0,写入背景颜 {MOD}
                     m<<=1;                                         //左移1位,准备写下一位
               }
                }
          }  
    }        
}

//================================================================================================
//        实现功能:        显示中英文字符串
//  输入参数:  x 横坐标
//              y 纵坐标
//                        *s 待显示的字符串,例如LCD_PutString(24,16,"123蓝芯",White,Blue);即把"123蓝芯"的第一个字符地址赋给指针变量s.
//                        bColor 字符背景颜 {MOD}
//================================================================================================
void LCD_PutString(unsigned short x, unsigned short y, unsigned char *s, unsigned int fColor, unsigned int bColor)
{
         unsigned char l=0;                            //显示屏位置增量
     while(*s)
         {
                if( *s < 0x80)                             //判断s指向的字符串中的某字符的编码值是否小于128,如果小于,即为ASCII字符
                    {
                         LCD_PutChar(x+l*8,y,*s,fColor,bColor);//显示该字符
                     s++;l++;                              //指针加1,位置加1
                        }
                else
                    {
                         Put16x16(x+l*8,y,(unsigned char*)s,fColor,bColor);//显示该汉字
                     s+=2;l+=2;                                        //因为汉字为编码为2字节,指针加2,显示16x16所以位置加2
                        }
         }
}

//================================================================================================
//        实现功能:        指定位置显示RGB颜 {MOD}
//  输入参数:  x0,y0 起始坐标
//              x1,y1 结束坐标
//                        Color  背景颜 {MOD}
//================================================================================================

void Show_RGB (unsigned int x0,unsigned int x1,unsigned int y0,unsigned int y1,unsigned int Color)
{
        unsigned int i,j;
        LCD_SetPos(x0,x1,y0,y1);      //设置显示位置
        for (i=y0;i<=y1;i++)
        {
           for (j=x0;j<=x1;j++)
               Write_Data_U16(Color);
        }
}

//================================================================================================
//        实现功能:        TFT初始化
//================================================================================================
void TFT_Initial(void)
{  

    RES = 1;   
        delayms(1);                    // Delay 1ms
        RES = 0;  
        delayms(10);                   // Delay 10ms            
        RES = 1;  
        delayms(50);                   // Delay 50 ms  
  
        if(Device_code==0x9320)
     {

    //************* Start Initial Sequence **********//
        Write_Cmd_Data(0x00,0x0001);   //Set the OSC bit as ‘1’ to start the internal oscillator
    Write_Cmd_Data(0x01,0x0100);   // set SS and SM bit
        Write_Cmd_Data(0x02,0x0700);   // set 1 line inversion
        Write_Cmd_Data(0x03,0x1030);   //set GRAM Write direction and BGR=1
    Write_Cmd_Data(0x04,0x0000);   // Resize register
        Write_Cmd_Data(0x08,0x0202);   // set the back porch and front porch
    Write_Cmd_Data(0x09,0x0000);   // set non-display area refresh cycle ISC[3:0]
    Write_Cmd_Data(0x0A,0x0000);   // FMARK function
    Write_Cmd_Data(0x0C,0x0000);   // RGB interface setting
        Write_Cmd_Data(0x0D,0x0000);   // Frame marker Position
    Write_Cmd_Data(0x0F,0x0000);   // RGB interface polarity
    delayms(30);
        //*************Power On sequence ****************//
        Write_Cmd_Data(0x10, 0x16b0);   // SAP, BT[3:0], AP, DSTB, SLP, STB
        delayms(30);
        Write_Cmd_Data(0x11, 0x0007);   //Write final user’s setting values to VC bit
        Write_Cmd_Data(0x12, 0x013a);   // set Internal reference voltage
        Write_Cmd_Data(0x13, 0x1a00);   // VDV[4:0] for VCOM amplitude
    delayms(30);
    Write_Cmd_Data(0x29, 0x000c);   // Set VCM[5:0] for VCOMH
        delayms(30); // Delay 50ms

        // ----------- Adjust the Gamma Curve ----------//
        Write_Cmd_Data(0x0030, 0x0000);
        Write_Cmd_Data(0x0031, 0x0505);
        Write_Cmd_Data(0x0032, 0x0304);
        Write_Cmd_Data(0x0035, 0x0006);
        Write_Cmd_Data(0x0036, 0x0707);
        Write_Cmd_Data(0x0037, 0x0105);
        Write_Cmd_Data(0x0038, 0x0002);
        Write_Cmd_Data(0x0039, 0x0707);
        Write_Cmd_Data(0x003C, 0x0704);
        Write_Cmd_Data(0x003D, 0x0807);

        //------------------ Set GRAM area ---------------//
        Write_Cmd_Data(0x0050, 0x0000); // Horizontal GRAM Start Address
        Write_Cmd_Data(0x0051, 0x00EF); // Horizontal GRAM End Address
        Write_Cmd_Data(0x0052, 0x0000); // Vertical GRAM Start Address
        Write_Cmd_Data(0x0053, 0x013F); // Vertical GRAM Start Address
        Write_Cmd_Data(0x0060, 0x2700); // Gate Scan Line
        Write_Cmd_Data(0x0061, 0x0001); // NDL,VLE, REV
        Write_Cmd_Data(0x006A, 0x0000); // set scrolling line
    Write_Cmd_Data(0x20, 0x0000);   // GRAM horizontal Address
        Write_Cmd_Data(0x21, 0x0000);   // GRAM Vertical Address

        //-------------- Partial Display Control ---------//
        Write_Cmd_Data(0x0080, 0x0000);
        Write_Cmd_Data(0x0081, 0x0000);
        Write_Cmd_Data(0x0082, 0x0000);
        Write_Cmd_Data(0x0083, 0x0000);
        Write_Cmd_Data(0x0084, 0x0000);
        Write_Cmd_Data(0x0085, 0x0000);

        //-------------- Panel Control ---------//
    Write_Cmd_Data(0x90,0x0010);   //Frame Cycle Contral
        Write_Cmd_Data(0x92,0x0000);   //Panel Interface Contral
        Write_Cmd_Data(0x93,0x0003);   //Panel Interface Contral 3.
        Write_Cmd_Data(0x95,0x0110);   //Frame Cycle Contral
        Write_Cmd_Data(0x97,0x0000);   //
        Write_Cmd_Data(0x98,0x0000);   //Frame Cycle Contral.     

        //-------------- Display on ---------//
    Write_Cmd_Data(0x07,0x0173);

        }

        else if(Device_code==0x1505 )
     {
                    不好意思 按错了


一周热门 更多>