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

📄 8952_cpld.c

📁 单片机用总线方式与CPLD系统进行通信。
💻 C
字号:
#include <AT89X51.H>
#include <math.h>
#include <intrins.h>
#include<absacc.h>
#define  uchar unsigned char
#define  uint  unsigned int

uchar reg[100];


/************************************************************
                     LCD引脚与变量定义
*************************************************************/  
#define  RS    P1_5
#define  RW    P1_6
#define  E     P1_7
#define  flag  P1_2

#define  RD       XBYTE[0xff5f]             //读操作
#define  WR       XBYTE[0xff7f]             //写操作

uchar    com,dat;            //全局变量写控制字和数据

/************************************************************
                    LCD函数函数声明
*************************************************************/  
void delay50us(uchar time);
void initialization(void);
void chk_busy(void); 
void writecom(uchar com);
void writedat(uchar dat);
void initi_chinese(void);
void Char_Set_XY(uchar x, uchar y, uchar *p);
void Delay(uint ms);

/************************************************************
                 主函数
*************************************************************/  
void  main(void)
{      
       uchar d1,d2;
	   uint d3;
	   unsigned long dat;
       initi_chinese();
       Delay(2000);
      
       Char_Set_XY(0,0,"读取数据为:");
       writecom(0x01);                  //写指令:清除显示 
       while(flag==0);   
	    d1=RD;                          //高八位数据

		d2=RD;                          //低二位数据
       d3=d1*4+d2;                     //十位数据
	   dat=(unsigned long)(d3*50000/1023);
	  
	   writecom(0x9e);                   //数据显示
      writedat((dat/10000)+0x30);
	  writedat(0x2e);
	  writedat((dat/1000%10)+0x30);
	  writedat((dat/100%10)+0x30);
	  writedat((dat/10%10)+0x30);
      writedat((dat%10)+0x30);
      
   //while(1);      //程序停在此处
}    

/*=========================LCD程序区===========================

/************************************************************
                       延时函数1:延时50us
*************************************************************/
void delay50us(uchar time)
  { 
    uchar i,j;
    for(i=0;i<time;i++)
      for(j=0;j<10;j++);        //50us
  }

/*************************************************
                    延时函数2:延时ms毫秒
*************************************************/
void Delay(uint ms)          
{
    uint j;
    for(; ms>0; ms--)
     for(j=100; j>0; j--)
      {
       _nop_();
       _nop_();
      } 
}

/************************************************************
                        测忙函数
*************************************************************/
void chk_busy(void)  
  { 
    uchar sign;
    RS=0;
    RW=1;
    E=1;
    for(;;)
       { P0=0xff;             //P1口置高,准备读数
         E=1;
         sign=P0;             //读忙信号
         E=0;                 //产生一个下降延
         if(sign<0x80)        //不忙则跳出循环
           break;
       }
    E=0;
  }  

/************************************************************
                       写控制字
*************************************************************/    
void  writecom(uchar com)
      { 
	    chk_busy();
        RS=0;
        RW=0;                     //写数据
        P0=com;                   
        E=1;
        E=0;
      }

/************************************************************
                    写数据与地址
*************************************************************/ 
void writedat(uchar dat)
  { 
    chk_busy();
    RS=1;
    RW=0;                     //写数据
    P0=dat;                   
    E=1;
    E=0;
  }  

/************************************************************
                      初始化写汉字程序 
*************************************************************/
void initi_chinese(void)
 { 
   writecom(0x30);             //写指令:功能设置 8位数据,基本指令              
   writecom(0x0c);             //写指令:显示状态 ON,游标OFF,反白OFF                
   writecom(0x01);             //写指令:清除显示              
   writecom(0x02);             //写指令:地址归位                  
   writecom(0x80);             //写指令:设置DDRAM地址
   delay50us(200);                //10ms      
 }

/*************************************************
              置x,y坐标函数___写汉字
*************************************************/
void Char_Set_XY(uchar x, uchar y, uchar *p)
{
   if(y == 0)
    writecom((0x80+x)); 
   if(y == 1)
    writecom((0x90+x));
   if(y == 2)
    writecom((0x88+x));
   if(y == 3)
    writecom((0x98+x));
   while(*p != 0)
    writedat(*p++);
}

⌨️ 快捷键说明

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