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

📄 myprojc.c

📁 暑假为学生培训写的51相关接口的所有源码及项目代码
💻 C
字号:
#include <reg52.h>
#include <asc5x8e.h>
typedef unsigned char BYTE;  

sbit CS1=P2^5;
sbit CS2=P2^6;
sbit RST=P2^7;
sbit RS=P2^2 ;
sbit RW=P2^1;
sbit E=P2^0;
 
BYTE X=0;
BYTE Y=0;
sbit DQ=P3^5;                       //ds18b20总线
BYTE xdata *p8255;
char icmd[2]={0x28,0x02};
char temp[9]={0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};
void recvdata(BYTE icmd[] );
void sendbyte(BYTE icnt);
void delay(BYTE ms,BYTE us);
void display() ;               //显示数据
void reset(void);
void ready();
void delay(BYTE ms,BYTE us)
{
    BYTE m,n,k;
    for(m=0;m<ms;m++)
        for(n=0;n<us;n++)
            for(k=0;k<250;k++);
}
void display()                //显示数据
{  
    *p8255=icmd[0];
    delay(5,250);
    *p8255=icmd[1];
    delay(5,250);
}

bit Busy()
{
  bit busy;
  RS=0;
  RW=1;
  E=1;
  busy=(bit)(P0&0x80);
  E=0;
  return busy ;
}



void WRI(BYTE cmd)
{
  while(Busy());
  RS=0;
  RW=0;
  E=0;
  P0=cmd ;
  E=1;
  delay(1,5);
  E=0;
 }

void WRD(BYTE dat)
{
   while(Busy());
   RS=1;
   RW=0;
   E=0;
   P0=dat ;
   E=1;
   delay(1,5);
   E=0;
 }

void SetPos(BYTE s,BYTE posX,BYTE posY)
{
    if(s==0)
    {
        CS1=1;
        CS2=0;
    }
    else if(s==1)
    {
        CS1=0;
        CS2=1;
    }
    WRI(posY|0x40);
    WRI(posX|0xB8);
}

void Clr(BYTE s)
{
    BYTE i,j;    
    for(i=0;i<8;i++)
    {
        SetPos(s,i,0);
        for(j=0;j<64;j++)
            WRD(0x00);
    }
}

void Rst()
{
   RST=0;
   RST=1;
}

void ExChange()
{
    BYTE tmpL,tmpH;
    if(icmd[1]&0xf8)
        temp[0]=0xd;//负号
    else
        temp[0]=0xb;//正号
    tmpH=icmd[1]&0x07;
    tmpH=tmpH<<4;
    tmpL=icmd[0]&0xf0;
    tmpL=tmpL>>4;
    tmpH=tmpH|tmpL;
    temp[1]=tmpH/100+0x10;
    tmpH=tmpH%100;
    temp[2]=tmpH/10+0x10;
    tmpH=tmpH%10;
    temp[3]=tmpH+0x10;
    temp[4]=0xE;
    tmpH=icmd[0]&0x0f;
    tmpH*=10;
    tmpL=tmpH&0xf0;
    temp[5]=(tmpL>>4)+0x10;
    tmpH=tmpH&0x0f;
    tmpH*=10;
    tmpL=tmpH&0xf0;
    temp[6]=(tmpL>>4)+0x10;
    tmpH=tmpH&0x0f;
    tmpH*=10;
    tmpL=tmpH&0xf0;
    temp[7]=(tmpL>>4)+0x10;
    tmpH=tmpH&0x0f;
    tmpH*=10;
    tmpL=tmpH&0xf0;
    temp[8]=(tmpL>>4)+0x10;
    tmpH=tmpH&0x0f;
}

void main()
{
    int i,j;
    Rst();
    Clr(2);
    WRI(0xC0);
    WRI(0x3F);

    p8255=0x9ffb;
    *p8255=0x81;
    p8255=0x9ff8;
    DQ=0x01;
     while(1)
    {
        ready();
        display();
        ExChange();
        SetPos(0,0,0);
        for(i=0;i<9;i++)
            for(j=0;j<6;j++)
                WRD(nAsciiDot[temp[i]*6+j]);
    }
}
void ready()
{
    reset();
    
    sendbyte(0xcc);             //跳过匹配
    
    sendbyte(0x44);             //启动转化
    
    //delay(20,250);                 //延时550毫秒
   
    reset();
    sendbyte(0xcc);             //跳过匹配
    
    sendbyte(0xbe);             //读取数据
     
    recvdata(icmd);             //接收数据    
}
void reset(void)
{
    BYTE i=600;
    DQ=0x01;
    DQ=0x00;
    while(i--);           //延时30微秒
    DQ=0x01;
    while(DQ);
    i=200;
    while(i--);     //延时200微秒
    DQ=0x01;
     
}
void sendbyte(BYTE icnt)                        //发送数据
{
     BYTE i,m;
    for(i=0;i<8;i++)
    {
       DQ=0x01;
       DQ=0x00;
       for(m=0;m<5;m++);                    //延时大约10微秒      
       icnt=icnt>>1;
       DQ=CY;
       for(m=0;m<30;m++);                   //延时60微秒
       DQ=0x01;   
    }
    
}
void recvdata(BYTE icmd[] )                 //接收数据
{
     BYTE i,j,m=4,icm=0x00,icnt=0x00;
    for(i=0;i<8;i++)
     {
            DQ=0x01;
            DQ=0x00;
            DQ=0x01;
            icm>>=1;
            if(DQ)
            icm|=0x80;
            for(m=0;m<25;m++);
     } 
        icmd[0]=icm;
       for(j=0;j<8;j++)
     {
               DQ=0x01;
               DQ=0x00;
               DQ=0x01;
               icnt>>=1;
               if(DQ)
               icnt|=0x80;
               for(m=0;m<25;m++);                          //延时60微秒
     }  
     icmd[1]=icnt;
}

⌨️ 快捷键说明

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