
该代码是基于51单片机的LCD320240显示屏控制程序主要用于通过MAX6675温度传感器采集温度数据并在LCD上显示。程序包含LCD初始化、温度数据读取与处理、字符和汉字显示等功能模块。通过间接接口RA8835控制器实现ASCII码和中文的显示并利用双向数据缓冲器XS245进行数据传输。主程序循环读取温度值分离千百十个位数据并通过特定函数在LCD上动态显示温度和状态信息。//disp_character(20,16,2此处16点阵为2 24点阵为3,16,8,6,tab);//2X816 3X824 0000 0000 八位为一显示单元//LCD320240间接接口 RA8835控制器ASCII码和中文显示程序//XS245g xs245d为显示双向数据传送缓冲器控制信号//sr245g a573qc b573qc为并联在数据端口P2的屏蔽信号//源程序2012年6月22日11:00//L440 读取MAX6675 程序 分离千百十个位数据 还需调整显示温度#include reg52.h#include string.h#include stdlib.h#include stdio.h#include intrins.h#define data_ora P2#define uchar unsigned char#define uint unsigned intuchar taby[4];uchar tabx[4];uchar maxq,maxb,maxs,maxg;uint x[4],y[4];int dat0;uint a0,r;sbit wr P0^4;sbit rd P0^3;sbit cs P0^2;sbit a0 P0^1;sbit rstP0^0;sbit sr245g P0^7;sbit xs245g P0^6;sbit xs245d P0^5;sbit a573qc P3^4;sbit b573qc P3^7;sbit SOP1^0;//;;;;6675的7脚// sbit CSP1^1;//;;;;6675的6脚sbit SCKP1^2;//;;;;6675的5脚//触摸屏引脚定义sbit DCLKP3^0;sbit busyP2^6;sbit CEP3^5; //临时定义sbit ipP3^2; //接外部中断0sbit DINP3^3;sbit DOUTP3^1;uchar code systab[8]{0x30,0x87,0x0f,0x27,0x3a,0xef,0x28,0x00};int code xsadd[10]{0,32,64,96,128,160,192,224,256,288};//整型变量 两个字节//显示地址ascii查表 0显示0起始位置 1在0位置加32字节 10个数字共计320个字节//显示地址ascii查表 0显示0起始位置 1在0位置加32字节 10个数字共计320个字节uchar code scrtab[10]{0x00,0x00,0xf0,0xb0,0x04,0xf0,0x30,0x2a,0xb0,0x4f};uchar code ascii[]{//0, 170x00,0x00,0x00,0x00,0x00,0x00,0x1C,0x00,0x36,0x00,0x63,0x00,0x63,0x00,0x63,0x00,0x63,0x00,0x63,0x00,0x63,0x00,0x63,0x00,0x36,0x00,0x1C,0x00,0x00,0x00,0x00,0x00,//1, 180x00,0x00,0x00,0x00,0x00,0x00,0x18,0x00,0x78,0x00,0x18,0x00,0x18,0x00,0x18,0x00,0x18,0x00,0x18,0x00,0x18,0x00,0x18,0x00,0x18,0x00,0x7E,0x00,0x00,0x00,0x00,0x00,//2,190x00,0x00,0x00,0x00,0x00,0x00,0x3E,0x00,0x63,0x00,0x63,0x00,0x63,0x00,0x06,0x00,0x06,0x00,0x0C,0x00,0x18,0x00,0x30,0x00,0x63,0x00,0x7F,0x00,0x00,0x00,0x00,0x00,//3, 200x00,0x00,0x00,0x00,0x00,0x00,0x3E,0x00,0x63,0x00,0x63,0x00,0x06,0x00,0x1C,0x00,0x06,0x00,0x03,0x00,0x03,0x00,0x63,0x00,0x66,0x00,0x3C,0x00,0x00,0x00,0x00,0x00,//4, 210x00,0x00,0x00,0x00,0x00,0x00,0x06,0x00,0x0E,0x00,0x1E,0x00,0x36,0x00,0x36,0x00,0x66,0x00,0x66,0x00,0x7F,0x00,0x06,0x00,0x06,0x00,0x1F,0x00,0x00,0x00,0x00,0x00,//5, 170x00,0x00,0x00,0x00,0x00,0x00,0x7F,0x00,0x60,0x00,0x60,0x00,0x60,0x00,0x7C,0x00,0x76,0x00,0x03,0x00,0x03,0x00,0x63,0x00,0x66,0x00,0x3C,0x00,0x00,0x00,0x00,0x00,//6, 180x00,0x00,0x00,0x00,0x00,0x00,0x1E,0x00,0x36,0x00,0x60,0x00,0x60,0x00,0x7C,0x00,0x76,0x00,0x63,0x00,0x63,0x00,0x63,0x00,0x36,0x00,0x1C,0x00,0x00,0x00,0x00,0x00,//7,190x00,0x00,0x00,0x00,0x00,0x00,0x7F,0x00,0x66,0x00,0x66,0x00,0x0C,0x00,0x0C,0x00,0x18,0x00,0x18,0x00,0x18,0x00,0x18,0x00,0x18,0x00,0x18,0x00,0x00,0x00,0x00,0x00,//8, 200x00,0x00,0x00,0x00,0x00,0x00,0x3E,0x00,0x63,0x00,0x63,0x00,0x63,0x00,0x36,0x00,0x1C,0x00,0x36,0x00,0x63,0x00,0x63,0x00,0x63,0x00,0x3E,0x00,0x00,0x00,0x00,0x00,//9, 210x00,0x00,0x00,0x00,0x00,0x00,0x1C,0x00,0x36,0x00,0x63,0x00,0x63,0x00,0x63,0x00,0x37,0x00,0x1F,0x00,0x03,0x00,0x03,0x00,0x36,0x00,0x3C,0x00,0x00,0x00,0x00,0x00,};uchar code tab0[]{//状,0x10,0xA0,0x10,0x90,0x10,0x98,0x90,0x88,0x50,0x80,0x5F,0xFE,0x10,0xA0,0x10,0xA0,0x31,0x20,0x51,0x20,0x91,0x10,0x12,0x10,0x12,0x08,0x14,0x0E,0x18,0x04,0x10,0x00,//态,0x01,0x00,0x01,0x00,0x7F,0xFC,0x01,0x00,0x02,0x80,0x02,0x40,0x05,0x20,0x08,0x98,0x30,0x06,0x01,0x00,0x04,0x88,0x24,0x84,0x24,0x12,0x64,0x12,0x43,0xF0,0x00,0x00,//监,0x04,0x80,0x24,0xC0,0x24,0x80,0x24,0xFE,0x25,0x40,0x26,0x20,0x24,0x30,0x04,0x10,0x00,0x00,0x3F,0xF8,0x24,0x88,0x24,0x88,0x24,0x88,0x24,0x88,0xFF,0xFE,0x00,0x00,//视,0x20,0x00,0x19,0xFC,0x11,0x04,0xFD,0x24,0x05,0x24,0x09,0x24,0x11,0x24,0x29,0x24,0x55,0x24,0x96,0x54,0x14,0x50,0x10,0x90,0x10,0x92,0x11,0x12,0x12,0x0E,0x14,0x00,};uchar code tab[]{//A, 340x00,0x00,0x00,0x00,0x00,0x00,0x18,0x00,0x18,0x00,0x1C,0x00,0x3C,0x00,0x3C,0x00,0x36,0x00,0x3E,0x00,0x66,0x00,0x63,0x00,0x63,0x00,0xF7,0x80,0x00,0x00,0x00,0x00,//点,0x01,0x00,0x01,0x00,0x01,0xF8,0x01,0x00,0x01,0x10,0x1F,0xF8,0x10,0x10,0x10,0x10,0x10,0x10,0x1F,0xF0,0x10,0x10,0x01,0x10,0x28,0x88,0x24,0x44,0x44,0x44,0x00,0x00,//温,0x40,0x00,0x27,0xF0,0x24,0x10,0x07,0xF0,0x94,0x10,0x54,0x10,0x17,0xF0,0x20,0x00,0x2F,0xFC,0xC9,0x24,0x49,0x24,0x49,0x24,0x49,0x24,0x49,0x24,0x5F,0xFE,0x40,0x00,//度,0x01,0x00,0x00,0x80,0x3F,0xFE,0x22,0x20,0x22,0x20,0x2F,0xFC,0x22,0x20,0x23,0xE0,0x20,0x00,0x27,0xF8,0x22,0x10,0x21,0x20,0x20,0xC0,0x41,0x30,0x46,0x0E,0x98,0x04,//B, 350x00,0x00,0x00,0x00,0x00,0x00,0xFC,0x00,0x66,0x00,0x66,0x00,0x66,0x00,0x7C,0x00,0x66,0x00,0x63,0x00,0x63,0x00,0x63,0x00,0x66,0x00,0xFC,0x00,0x00,0x00,0x00,0x00,//点,0x01,0x00,0x01,0x00,0x01,0xF8,0x01,0x00,0x01,0x10,0x1F,0xF8,0x10,0x10,0x10,0x10,0x10,0x10,0x1F,0xF0,0x10,0x10,0x01,0x10,0x28,0x88,0x24,0x44,0x44,0x44,0x00,0x00,//温,0x40,0x00,0x27,0xF0,0x24,0x10,0x07,0xF0,0x94,0x10,0x54,0x10,0x17,0xF0,0x20,0x00,0x2F,0xFC,0xC9,0x24,0x49,0x24,0x49,0x24,0x49,0x24,0x49,0x24,0x5F,0xFE,0x40,0x00,//度,0x01,0x00,0x00,0x80,0x3F,0xFE,0x22,0x20,0x22,0x20,0x2F,0xFC,0x22,0x20,0x23,0xE0,0x20,0x00,0x27,0xF8,0x22,0x10,0x21,0x20,0x20,0xC0,0x41,0x30,0x46,0x0E,0x98,0x04,//C, 360x00,0x00,0x00,0x00,0x00,0x00,0x3F,0x00,0x63,0x00,0x63,0x00,0xC0,0x00,0xC0,0x00,0xC0,0x00,0xC0,0x00,0xC0,0x00,0x63,0x00,0x66,0x00,0x3C,0x00,0x00,0x00,0x00,0x00,//点,0x01,0x00,0x01,0x00,0x01,0xF8,0x01,0x00,0x01,0x10,0x1F,0xF8,0x10,0x10,0x10,0x10,0x10,0x10,0x1F,0xF0,0x10,0x10,0x01,0x10,0x28,0x88,0x24,0x44,0x44,0x44,0x00,0x00,//温,0x40,0x00,0x27,0xF0,0x24,0x10,0x07,0xF0,0x94,0x10,0x54,0x10,0x17,0xF0,0x20,0x00,0x2F,0xFC,0xC9,0x24,0x49,0x24,0x49,0x24,0x49,0x24,0x49,0x24,0x5F,0xFE,0x40,0x00,//度,0x01,0x00,0x00,0x80,0x3F,0xFE,0x22,0x20,0x22,0x20,0x2F,0xFC,0x22,0x20,0x23,0xE0,0x20,0x00,0x27,0xF8,0x22,0x10,0x21,0x20,0x20,0xC0,0x41,0x30,0x46,0x0E,0x98,0x04,//D, 370x00,0x00,0x00,0x00,0x00,0x00,0xFC,0x00,0x66,0x00,0x63,0x00,0x63,0x00,0x63,0x00,0x63,0x00,0x63,0x00,0x63,0x00,0x63,0x00,0x66,0x00,0xFC,0x00,0x00,0x00,0x00,0x00,//点,0x01,0x00,0x01,0x00,0x01,0xF8,0x01,0x00,0x01,0x10,0x1F,0xF8,0x10,0x10,0x10,0x10,0x10,0x10,0x1F,0xF0,0x10,0x10,0x01,0x10,0x28,0x88,0x24,0x44,0x44,0x44,0x00,0x00,//温,0x40,0x00,0x27,0xF0,0x24,0x10,0x07,0xF0,0x94,0x10,0x54,0x10,0x17,0xF0,0x20,0x00,0x2F,0xFC,0xC9,0x24,0x49,0x24,0x49,0x24,0x49,0x24,0x49,0x24,0x5F,0xFE,0x40,0x00,//度,0x01,0x00,0x00,0x80,0x3F,0xFE,0x22,0x20,0x22,0x20,0x2F,0xFC,0x22,0x20,0x23,0xE0,0x20,0x00,0x27,0xF8,0x22,0x10,0x21,0x20,0x20,0xC0,0x41,0x30,0x46,0x0E,0x98,0x04,//E, 380x00,0x00,0x00,0x00,0x00,0x00,0xFE,0x00,0x63,0x00,0x6C,0x00,0x6C,0x00,0x7C,0x00,0x6C,0x00,0x6C,0x00,0x60,0x00,0x63,0x00,0x63,0x00,0xFE,0x00,0x00,0x00,0x00,0x00,//点,0x01,0x00,0x01,0x00,0x01,0xF8,0x01,0x00,0x01,0x10,0x1F,0xF8,0x10,0x10,0x10,0x10,0x10,0x10,0x1F,0xF0,0x10,0x10,0x01,0x10,0x28,0x88,0x24,0x44,0x44,0x44,0x00,0x00,//温,0x40,0x00,0x27,0xF0,0x24,0x10,0x07,0xF0,0x94,0x10,0x54,0x10,0x17,0xF0,0x20,0x00,0x2F,0xFC,0xC9,0x24,0x49,0x24,0x49,0x24,0x49,0x24,0x49,0x24,0x5F,0xFE,0x40,0x00,//度,0x01,0x00,0x00,0x80,0x3F,0xFE,0x22,0x20,0x22,0x20,0x2F,0xFC,0x22,0x20,0x23,0xE0,0x20,0x00,0x27,0xF8,0x22,0x10,0x21,0x20,0x20,0xC0,0x41,0x30,0x46,0x0E,0x98,0x04,//F, 390x00,0x00,0x00,0x00,0x00,0x00,0xFE,0x00,0x63,0x00,0x6C,0x00,0x6C,0x00,0x7C,0x00,0x6C,0x00,0x6C,0x00,0x60,0x00,0x60,0x00,0x60,0x00,0xF0,0x00,0x00,0x00,0x00,0x00,//点,0x01,0x00,0x01,0x00,0x01,0xF8,0x01,0x00,0x01,0x10,0x1F,0xF8,0x10,0x10,0x10,0x10,0x10,0x10,0x1F,0xF0,0x10,0x10,0x01,0x10,0x28,0x88,0x24,0x44,0x44,0x44,0x00,0x00,//温,0x40,0x00,0x27,0xF0,0x24,0x10,0x07,0xF0,0x94,0x10,0x54,0x10,0x17,0xF0,0x20,0x00,0x2F,0xFC,0xC9,0x24,0x49,0x24,0x49,0x24,0x49,0x24,0x49,0x24,0x5F,0xFE,0x40,0x00,//度,0x01,0x00,0x00,0x80,0x3F,0xFE,0x22,0x20,0x22,0x20,0x2F,0xFC,0x22,0x20,0x23,0xE0,0x20,0x00,0x27,0xF8,0x22,0x10,0x21,0x20,0x20,0xC0,0x41,0x30,0x46,0x0E,0x98,0x04,};/*---------------延时子程序----------------*/void delay (uint us){while(us--);}void delay1 (uint ms){uint i,j;for(i0;ims;i)for(j0;j1000;j);}//读取MAX6675*********************************/void Read_6675(){uint i;int dat_temp0;i0;dat_temp00;// CS0;delay(300);SCK0;delay(300);for(i0;i16;i){SCK1;dat_temp0dat_temp01;if(SO1) dat_temp0dat_temp0|0x01;SCK0;delay(300);}// CS1;dat_temp0dat_temp01;dat_temp0dat_temp04;dat_temp0dat_temp0/4;dat0dat_temp0;}/****************************************//**********分离 千 百 十 个 位数据********/void Displaypro(void) //温度显示{maxqdat0/1000;maxb(dat0%1000)/100;//温度最高位maxs(dat0%100)/10;maxgdat0%10;}/****************************************/void chk_busy (void) //忙检测{sr245g1;a573qc1;b573qc1;xs245g0; //数据ABxs245d1; //数据AB//GL DHP20xff;a00;wr1;rd0;while(busy1);rd1;}/****************************************/void wr_comm (uchar comm) //写命令{chk_busy();sr245g1;a573qc1;b573qc1;xs245g0; //数据BAxs245d0; //GL DLa01;rd1;data_oracomm;wr0;wr1;}/****************************************/void wr_data (uchar dat) //写数据{chk_busy ();sr245g1;a573qc1;b573qc1;xs245g0; //数据BAxs245d0; //GL DLa00;rd1;data_oradat;wr0;// delay(2);wr1;}//void wr_xd (uint dat) //写一个16 进制数据{uchar datl,dath;datldat;dathdat8;wr_data (datl); //送低八位wr_data (dath); //送高八位}//..........显示中文...显示一行状态监视............void disp_character(uchar x,uchar y,uchar x1,uchar y1,uchar x2,uchar y2,uchar code *chn)// 15 16 2 16 1 4{ // x方向 15起始位置 16字体 2字节 16字体 1行 4字uchar i,j,k,l; //x 为字节数,y 为点行数for(i0;ix2;i)//8行for(j0;jy2;j)//6列for(k0;ky1;k)//16行for(l0;lx1;l)//字节{wr_comm(0x46);//显示光标地址wr_xd(560x40*ylk*40j*x1i*y1*40);//写一个16 进制数据wr_comm(0x42);wr_data(*chn);chn;}}//..........显示中文...............void disp_character1(uchar x,uchar y,uchar x1,uchar y1,uchar x2,uchar y2,uchar code *chn)// 2起始位置 16字体 2字节 16字体 6行 4字{ //在x,y 处显示大小x1,y1 的字,显示x2 行,每行y2 个字uchar i,j,k,l; //x 为字节数,y 为点行数for(i0;ix2;i)//8行for(j0;jy2;j)//6列for(k0;ky1;k)//16行for(l0;lx1;l)//2 字节{wr_comm(0x46);//显示光标地址wr_xd(1200x40*ylk*40j*x1i*y1*40);//写一个16 进制数据wr_comm(0x42);wr_data(*chn);chn;}}//..........显示中文...............void disp_character2(uchar x,uchar y,uchar x1,uchar y1,uchar x2,uchar y2,int mm,uchar code *chn)// 2起始位置 16字体 2字节 16字体 1行 4字 96显示的阿拉伯数字地址{ //在x,y 处显示大小x1,y1 的字,显示x2 行,每行y2 个字 每32字节一个数字 96则从3显示uchar i,j,k,l; //x 为字节数,y 为点行数for(i0;ix2;i)//1行for(j0;jy2;j)//4列for(k0;ky1;k)//16行for(l0;lx1;l)//2 字节{wr_comm(0x46);//显示光标地址wr_xd(1210x40*ylk*40j*x1i*y1*40);//写一个16 进制数据wr_comm(0x42);wr_data(*(chnmm));chn;}}//..........显示中文...............void disp_character3(uchar x,uchar y,uchar x1,uchar y1,uchar x2,uchar y2,int mm,uchar code *chn)// 2起始位置 16字体 2字节 16字体 1行 4字 96显示的阿拉伯数字地址{ //在x,y 处显示大小x1,y1 的字,显示x2 行,每行y2 个字 每32字节一个数字 96则从3显示uchar i,j,k,l; //x 为字节数,y 为点行数for(i0;ix2;i)//1行for(j0;jy2;j)//4列for(k0;ky1;k)//16行for(l0;lx1;l)//2 字节{wr_comm(0x46);//显示光标地址wr_xd(1212x40*ylk*40j*x1i*y1*40);//写一个16 进制数据wr_comm(0x42);wr_data(*(chnmm));chn;}}//..........显示中文...............void disp_character4(uchar x,uchar y,uchar x1,uchar y1,uchar x2,uchar y2,int mm,uchar code *chn)// 2起始位置 16字体 2字节 16字体 1行 4字 96显示的阿拉伯数字地址{ //在x,y 处显示大小x1,y1 的字,显示x2 行,每行y2 个字 每32字节一个数字 96则从3显示uchar i,j,k,l; //x 为字节数,y 为点行数for(i0;ix2;i)//1行for(j0;jy2;j)//4列for(k0;ky1;k)//16行for(l0;lx1;l)//2 字节{wr_comm(0x46);//显示光标地址wr_xd(1214x40*ylk*40j*x1i*y1*40);//写一个16 进制数据wr_comm(0x42);wr_data(*(chnmm));chn;}}//..........显示中文...............void disp_character5(uchar x,uchar y,uchar x1,uchar y1,uchar x2,uchar y2,int mm,uchar code *chn)// 2起始位置 16字体 2字节 16字体 1行 4字 96显示的阿拉伯数字地址{ //在x,y 处显示大小x1,y1 的字,显示x2 行,每行y2 个字 每32字节一个数字 96则从3显示uchar i,j,k,l; //x 为字节数,y 为点行数for(i0;ix2;i)//1行for(j0;jy2;j)//4列for(k0;ky1;k)//16行for(l0;lx1;l)//2 字节{wr_comm(0x46);//显示光标地址wr_xd(1216x40*ylk*40j*x1i*y1*40);//写一个16 进制数据wr_comm(0x42);wr_data(*(chnmm));chn;}}//.......清屏............void lcd_clear(void){uint i,j;wr_comm(0x46); //显示光标地址//wr_xd(0x0000);wr_data(0x00);wr_data(0x00);wr_comm(0x42); //数据写入设置for(i0;i135;i)for(j0;j80;j)wr_data(0x00);}//.......初始化...........void init_lcd (void){uchar i;rst1;cs0;wr_comm(0x40); //WRITE SYSTEMSET 指令和参数for(i0;i8;i)wr_data(systab[i]);wr_comm(0x44); //WRITE SCROLL 指令和参数for(i0;i10;i)wr_data(scrtab[i]);wr_comm(0x5a); //显示画面水平移动量:00--07 点wr_data(0x00);wr_comm(0x5b); //显示属性:DM1(DM2)0,文本方式;DM1(DM2)1,图形方式;OV1,三重合成;OV0,两重合成wr_data(0x08);wr_comm(0x5d);wr_data(0x07);wr_data(0x8f);wr_comm(0x4c); //光标自动移动方向--向右wr_comm(0x59); //DISP ONwr_data(0x54);}//...............主程序...............void main(){delay(12);SP0x5f;init_lcd();lcd_clear();IT00;while(1){P10;disp_character(15,16,2,16,1,4,tab0);////在x,y 处显示大小x1,y1 的字,显示x2 行,每行y2 个字delay1(1000);disp_character1(1,16,2,16,6,4,tab);////在x,y 处显示大小x1,y1 的字,显示x2 行,每行y2 个字Read_6675();Displaypro(); //数据处理disp_character2(1,16,2,16,1,1,maxq,ascii);//disp_character3(1,16,2,16,1,1,maxb,ascii);//disp_character4(1,16,2,16,1,1,maxs,ascii);//disp_character5(1,16,2,16,1,1,maxg,ascii);////在x,y 处显示大小x1,y1 的字,显示x2 行,每行y2 个字P1254;delay1(1000);P1253;lcd_clear();}}