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

📄 ad574.c

📁 数据没有处理
💻 C
字号:
#include<reg51.h>   /*试验AD574采力信号并液晶显示数据的小程序*/
#include<absacc.h>  /*数据没有处理,为AD574本身所采数据*/
#include<stdio.h>   /*不受力时显示2048为零值*/
#include<string.h>

#define uint unsigned int

#define send XBYTE[0xdfff]    /*液晶片选地址*/
#define AD574 XBYTE[0xbffe]   /*574的片选*/
#define AD574l XBYTE[0xbfff]  /*574采的低4位数据单元地址*/
#define LS373 XBYTE[0xffff]   /*373片选*/

sbit P1_7=P1^7;     /*574工作状态标准位*/
sbit P1_4=P1^4;     /*液晶指令/数据控制位*/

sbit ACC_0=ACC^0;    /*定义液晶标准位*/
sbit ACC_1=ACC^1;
sbit ACC_2=ACC^2;
sbit ACC_3=ACC^3;
sbit ACC_5=ACC^5;
sbit ACC_6=ACC^6;

uint com,dat1,dat2,state2,m1,up;
int disp_code[7];   /*液晶显示数码位*/

TABLE3[6]={0x4e,0x49,0x00,0x48,0x41,0x4f};  /*ni hao*/

uint collect()  /*定义数据采集*/
{
 LS373=0x97;         /*选7501采*1信号,启574转换*/
 AD574=AD574&0xbf;   /*置A0为0,工作在12位转换*/
 while(P1_7==1);     /*未完等待*/
 LS373=0xd7;   /*启574输出*/
 return(AD574*16+AD574l/16);   /*返回采集的数据*/
}

void delay()
{
 uint i,j;
 i=0;
 j=0;
 for(i=0;i<1000;i++)     /*7s状态改变一次*/
 {
  for(j=0;j<500;j++);
 }
}

void delay1()
{
 uint i,j;
 i=0;
 j=0;
 for(i=0;i<100;i++)     /*0.28s状态改变一次*/
 {
  for(j=0;j<200;j++);
 }
}

void sta01()   /*状态位写指令和写数据的准备判断*/
{
 P1_4=1;
 do
 {
  ACC=send;
 }
 while(ACC_0==0||ACC_1==0||ACC_5==0);
}

void sta3()     /*自动写数据的状态位判断*/
{
 P1_4=1;
 do
 {
  ACC=send;
 }
 while(ACC_3==0||ACC_5==0);
}

void write1()   /*无参数指令写入*/
{
 sta01();
 send=com;
 P1_4=1;
}

void write2()   /*单字节参数指令写入*/
{
 sta01();
 P1_4=0;
 send=dat2;
 write1();
}

void write3()   /*双字节参数指令写入*/
{
 sta01();
 P1_4=0;
 send=dat1;
 write2();
}

void chushihua()  /*初始化*/
{
 dat1=0x00;   /*设文本显示区域首地址*/
 dat2=0x00;
 com=0x40;
 write3();
 dat1=0x28;   /*设文本显示区域宽度*/
 dat2=0x00;
 com=0x41;
 write3();
 dat1=0x00;   /*设图形显示区域宽度*/
 dat2=0x08;
 com=0x42;
 write3();
 dat1=0x28;   /*设图形显示区域宽度*/
 dat2=0x00;
 com=0x43;
 write3();
 com=0x80;    /*显示方式设置*/
 write1();
 com=0x9c;    /*显示开关设置*/
 write1();
}

void clear()   /*清显示屏*/
{
 uint i;
 dat1=0x00;
 dat2=0x00;
 com=0x24;    /*设置显示地址*/
 write3();
 com=0xb0;    /*设置自动写方式*/
 write1();
 for(i=0;i<8200;i++)  /*清屏8200个点阵字符*/
 {
  sta3();
  P1_4=0;
  send=0x00;
 }
 com=0xb2;    /*结束自动写方式*/
 write1();
}

void BCDdisp()   /*定义液晶显示采集的数据*/
{
 uint i;
 disp_code[0]=m1/1000;    /*千位*/
 disp_code[4]=m1%1000;    /*余数*/
 disp_code[1]=disp_code[4]/100;   /*百位*/
 disp_code[5]=disp_code[4]%100;
 disp_code[2]=disp_code[5]/10;    /*十位*/
 disp_code[6]=disp_code[5]%10;
 disp_code[3]=disp_code[6];       /*个位*/
 dat1=0x8c;
 dat2=0x00;
 com=0x24;    /*设置显示地址*/
 write3();
 com=0xb0;    /*设置自动写方式*/
 write1();
 for(i=0;i<4;i++)
 {
  switch(disp_code[i])   /*显示4位数据*/
  {
   case 1:up=0x11;break;
   case 2:up=0x12;break;
   case 3:up=0x13;break;
   case 4:up=0x14;break;
   case 5:up=0x15;break;
   case 6:up=0x16;break;
   case 7:up=0x17;break;
   case 8:up=0x18;break;
   case 9:up=0x19;break;
   case 0:up=0x10;break;
  }
  sta3();
  P1_4=0;
  send=up;    /*选液晶字符集的相应数字*/
 }
 com=0xb2;    /*结束自动写方式*/
 write1();
}

void display33()   /*显示ni hao*/
{
 int i=0;
 dat1=0x8C;
 dat2=0x00;
 com=0x24;   /*设置显示位置*/
 write3();
 for(i=0;i<6;i++)
 {
  dat2=TABLE3[i];
  com=0xc0;   /*写数据*/
  write2();
 }
}

void display1()    /*显示函数BCD数字码*/
{
 chushihua();
 clear();
 BCDdisp();
}

void display3()    /*显示函数ni hao*/
{
 chushihua();
 clear();
 display33();
}

void main()
{
 display3();  /*显示ni hao*/
 delay();
 while(1)        /*不停的采*/
 {
  m1=collect();  /*采力信号*/
  display1();
  delay1();      /*延时0.28秒*/
 }
}

⌨️ 快捷键说明

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