⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 12864zkb.bak

📁 STC89C58+DS18B20原代码.并将温度显示在128*64的液晶显示屏上
💻 BAK
字号:
/*
**长沙太阳人电子有限公司SMG12864ZK并行接口参考程序
**电话:  0731-4167806,4167808
**E-mail: www@sunman.cn
**Create by :谭超  E-mail: tanchao_1@126.com
**最后修改 :  2005年8月25日
*/
//#include "STC89C51RC.h"
#include <reg51.h>
#include <intrins.h>
#define uchar unsigned char
#define uint unsigned int
//#include "d1820.h"
//float Read_Temperature(void);
 //unsigned char Temp_a,Temp_b; //温度值
//union char_float
//{
 //   unsigned char TempChar[2];
//    float TempFloat;
//}CharFloat;
 /*
sbit RS = P3^0;
sbit RW = P3^3;
sbit E = P3^4;
sbit PSB = P3^1;          //串并口选择
sbit RES = P3^5;
           */
//sbit RW = P2^1;
//sbit RS = P2^0;

//sbit E = P2^7;
//sbit CS_DS12C887=P2^3;
//sbit BEEP = P1^6;
//sbit CS_KEY_WR = P2^4;
//sbit CS_KEY_RD = P2^2;
 #define LCD P0

uchar LCDdata;
sbit RS=P3^3;
sbit RW=P3^5;
sbit E=P3^7;
sbit RST=P3^6;

//sfr AUXR = 0x8e;

//sbit PSB = P3^1;          //串并口选择
//sbit RES = P3^5;

#define FIRST_ADDR 0       //定义字符/汉字显示起始位置
//void delay(int useconds) {
//int s;
//for (s=0; s<useconds;s++);
//}
void delay(unsigned int t)
{  unsigned int i,j;
   for(i=0;i<t;i++)
      for(j=0;j<10;j++)
         ;
}

//测忙
void chk_busy()
{ unsigned char State;
   RS=0;
   RW=1;
   E=1;
 //  while((P0&0x80)==0x80);
delay(0);
    E=0;
}

//读数据
unsigned char lcdrd()
{  unsigned char i;
   P3=0xFB;
   _nop_();
   E=1;
   delay(5);
   i=P0;
   _nop_();
   E=0;
   return i;
}

//写数据
void lcdwd(unsigned char dispdata)
{  chk_busy();
   _nop_();
   RS=1;
   RW=0;
   E=1;
   P0=dispdata;
   delay(5);
   _nop_();
   E=0;
   _nop_();
   P0=0xff;
}

//写指令代码
void lcdwc(unsigned char cmdcode)
{  chk_busy();
   _nop_();
   RS=0;
   RW=0;
   E=1;
   P0=cmdcode;
   delay(5);
   _nop_();
   E=0;
   _nop_();
   P0=0xff;
}

//初始化
void lcdreset()
{  delay(2000);
   lcdwc(0x30);       //选择基本指令集
   lcdwc(0x30);       //选择8bit数据流
   delay(5);
   lcdwc(0x0c);       //开显示(无游标、不反白)
   delay(5);
   lcdwc(0x01);       //清除显示,并且设定地址指针为00H
   delay(5);
   lcdwc(0x06);       //指定在资料的读取及写入时,设定游标的移动方向及指定显示的移位
}

void hzkdis(unsigned char code *s)
{  while(*s>0)
   {  lcdwd(*s);
      s++;
      delay(500);
   }
}

void hzklib()
{
  unsigned char TempString[16];
//  sprintf(TempString,"温度:%f,",26.45);
   lcdwc(0x80+FIRST_ADDR);
   hzkdis(TempString);

   lcdwc(0x80+FIRST_ADDR);
   hzkdis("温度:Read_Temperature() ,");
   lcdwc(0x90+FIRST_ADDR);
   hzkdis("乡音无改鬓毛衰。");
   lcdwc(0x88+FIRST_ADDR);
   hzkdis("儿童相见不相识,");
   lcdwc(0x98+FIRST_ADDR);
   hzkdis("笑问客从何处来。");
}

//整屏显示
//当ii=0时显示上面128×32
//当ii=8时显示下面128×32
void lcdfill(unsigned char disdata)
{  unsigned char x,y,ii;
   for(ii=0;ii<9;ii+=8)
      for(y=0;y<0x20;y++)
         for(x=0;x<8;x++)
         {  lcdwc(0x36);
            lcdwc(y+0x80);        //行地址
            lcdwc(x+0x80+ii);     //列地址
            lcdwc(0x30);
            lcdwd(disdata);
            lcdwd(disdata);
         }
}

//当ii=0时显示上面128×32
//当ii=8时显示下面128×32
void lcdfill_upright(unsigned char disdata)
{  unsigned char x,y,ii;
   unsigned char i,f,k;
   for(ii=0;ii<9;ii+=8)
      for(y=0;y<4;y++)
      {  f=disdata;
         for(i=0;i<8;i++)
         {  if((f&1)==1)
               k=0xff;
            else
               k=0;
            for(x=0;x<8;x++)
            {  lcdwc(0x36);
               lcdwc(y*8+i+0x80);
               lcdwc(x+0x80+ii);
               lcdwc(0x30);
               lcdwd(k);
               lcdwd(k);
            }
            f>>=1;
         }
      }
}

main()
{
unsigned char i,t1;
//float t1;
// Read_Temperature();


/*union char_int
{
   unsigned char TempChar[2];
   UINT TempInt;
}CharInt;*/


 AUXR =0;
//  BEEP = 0;
 // CS_KEY_RD =1;
 // CS_KEY_WR =1;
 i=0x55;
//   RES=0;
 _nop_();
 //  RES=1;
   while(1)
   { // PSB=1;
     /* E =0;
      E= 1;
      E = 0;
      RW=1;
      RW=0;
      RS=0;
      RS=1;
      P0 = 0xAA;*/
    //  CS_DS12C887=1;

      lcdreset();       //初始化LCD屏
      lcdwc(0x01);
      delay(1000);
     lcdfill(0xff);
      delay(6000);
      lcdfill(i);               //显示竖条
      delay(6000);
      lcdfill_upright(i);       //显示横条
      delay(6000);
      lcdfill(0);
      lcdwc(0x01);
      delay(1000);
      hzklib();
      delay(4000);
      i=~i;
       for(;;){}
   }
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -