📄 ad574.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 + -