|
#include "ATC12C5A60S2.h"
#include <intrins.h>
sbit ADDO = P4^2;
sbit ADSK = P4^3;
void delayms(char ms);
void send_char(char txd);
void send_Achar(char *string);
void get_weight();
void init();
long a,weight;
char c[5],a1,a2,a3;
char tab[]="0123456789";
long ReadCount(void);
main()
{
delayms(500);
init();
while(1)
{
get_weight();
}
}
void init()
{
TMOD = 0x20; // 定時器1工作于8位自動重載模式, 用于產生波特率
TH1 = 0xFD; // 波特率9600
TL1 = 0xFD;
SCON = 0x50; // 設定串行口工作方式
PCON &= 0xef; // 波特率不倍增
TR1 = 1; // 啟動定時器1
IE = 0x0; //禁止任何中斷
}
void send_char(char txd)
// 傳送一個字符
{
SBUF = txd;
while(!TI); // 等特數據傳送
TI = 0; // 清除數據傳送標志
}
/**********************發送一個字符串******************************/
void send_Achar(char *string)
{
while(*string!='\0')
{
send_char(*string);
string++;
}
}
void delayms(char ms) // 延時子程序
{
char i;
while(ms--)
{
for(i = 0; i < 120; i++);
}
}
long ReadCount(void)
{
long Count;
char i;
ADSK=0; //使能AD(PD_SCK 置低)
Count=0;
while(ADDO); //AD轉換未結束則等待,否則開始讀取
for (i=0;i<24;i++)
{
ADSK=1; //PD_SCK 置高(發送脈沖)
Count=Count<<1; //下降沿來時變量Count左移一位,右側補零
ADSK=0; //PD_SCK 置低
if(ADDO) Count++;
}
ADSK=1; //第25個脈沖到來
_nop_(); //延長一個機器周期
ADSK=0; //第25個脈沖結束
return(Count);
}
void get_weight() //獲取被測物體重量
{
long count=0;
long sum=0;
for (count=0;count<5;count++)
{
a=ReadCount();
a=a>>8;
sum+=a;
}
a=sum/5;
// a1=a&0xff;//a低8位賦值給a1
// a2=a>>8;//a右移8位后再把此時的a的低八位賦值給a2
// send_char(a2); //串口輸出a2
// send_char(a1);//串口輸出a1
// send_char(0xab);//串口輸出AB
weight=(long)((float)(a-791)*0.0378);//重量轉換函數,傳感器型號不同此函數要適當修改
c[0] = tab[weight/10000];
c[1] = tab[weight%10000/1000];
c[2] = tab[weight%1000/100];
c[3] = tab[weight%100/10];
c[4] = tab[weight%10];
// c[0] = tab[a/10000];
// c[1] = tab[a%10000/1000];
// c[2] = tab[a%1000/100];
// c[3] = tab[a%100/10];
// c[4] = tab[a%10];
if(c[0]==0x30)
{
send_char(0x20);
}
else
{
send_char(c[0]);
}
if((c[1]==0x30)&&(c[0]==0x30))
{
send_char(0x20);
}
else
{
send_char(c[1]);
}
if((c[2]==0x30)&&(c[1]==0x30)&&(c[0]==0x30))
{
send_char(0x20);
}
else
{
send_char(c[2]);
}
if((c[3]==0x30)&&(c[2]==0x30)&&(c[1]==0x30)&&(c[0]==0x30))
{
send_char(0x20);
}
else
{
send_char(c[3]);
}
send_char(c[4]);
send_char(0x20);
send_char(0x67);
send_Achar("\r\n");
}
/************************************************/
/* 由于稱重傳感器線性度參數的不同,而對獲得的重量數據處理,
此處可能會根據不同稱重傳感器,程序的代碼會有所不同 */
/************************************************/
|
|