?? fhe.c
字號:
#include<reg51.h> /*試驗AD574采力信號并液晶顯示數據的小程序*/
#include<absacc.h> /*數據沒有處理,為AD574本身所采數據*/
#include<stdio.h> /*只對正值有效*/
#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;
uint com,dat1,dat2,state2,m1,up;
int disp_code[7]; /*液晶顯示數碼位*/
TABLE3[6]={0x4e,0x49,0x00,0x48,0x41,0x4f}; /*ni hao*/
uint collect() /*定義數據采集*/
{
LS373=0x87; /*選7501采*1信號,啟574轉換*/
AD574=AD574&0xbf; /*置A0為0,工作在12位轉換*/
while(P1_7==1); /*未完等待*/
LS373=LS373|0x40; /*啟574輸出數據*/
return(AD574*16+AD574l); //
}
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])
{
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() /*顯示函數1*/
{
chushihua();
clear();
BCDdisp();
}
void display3() /*顯示函數3*/
{
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 + -