程序
1 主程序設計
uint max_weight;//最大稱量
uchar dsel;//分度值
uchar dp;//小數點
float beilv;//倍率
ulong zero_save;//傳感器零位值
}bdf;
uint code num_ten[4]={1,10,100,1000};
uchar code adcount2[4]={2,4,5};//數據處理進平均次數
uchar code tab_dsel[4]={1,2,5,10};//分度值表
//0 , 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9
uchar code tab[]={0xB7,0x03,0xD6,0xC7,0x63,0xE5,0xF5,0x83,0xF7,0xE7,
//A , b , C , d , E , F , 暗, - , t , P
0xF3,0x75,0xB4,0x57,0xF4,0xF0,0x00,0x40,0x74,0xF2,
//H , L , o , J , r , n , U, =, - i
0x73,0x34,0x55,0x07,0x50,0x51,0x37,0x44,0x04,0x01};
//顯示位碼表
//0, 1, 2, 3, 4, 5, 6
uchar code digit[]={0xfe,0xdf,0xef,0xfd,0xfb,0xbf,0xF7};//顯示位碼表
sbit P_OE =P2^1;//顯示控制
sbit P_LE =P2^0;
sbit buz0 =P3^6;//蜂鳴器
sbit buz1 =P3^7;
/******************************************************/
bit b_follow;//啟動零位跟蹤標記
bit b_serial;//串口發(fā)送完標記
bit b_followdelay;//第一次不進行零位跟蹤
bit b_steady;//穩(wěn)定標記
void (* data task)(void);//函數指針變量,接受下一步要做的任務
uint idata fendushu;//分度數
uchar weight_led[6] ;//重量窗顯示緩存
uchar idata temp_var;
uchar weight_dp;//小數點位數
uchar fu_number;//負號顯示位置
uchar wdcount;//穩(wěn)定計數
uchar adup_count;//異常值計數
uchar addcount3;//累加次數
extern void key_scan(void);//按鍵掃描
extern void weight_disp(void);//重量計算,超載報警
extern void start_set(void);//單片機初始化設置
extern void adc (void);//讀取AD值
extern void ad_processor(void);//AD數據濾波處理
extern void fun_weight(void);//正常稱重狀態(tài)
extern void bd_start(void);//重量或電壓標定選擇
extern void dy_disp(void);//電壓顯示
extern void led_disp(ulong temp,uchar num);
extern uchar get_jiaoyan(uchar *address,uchar num);//計算校驗字
extern void neima(void);
void delay60ms(uchar time);//40ms延時
void fendu_val(void);//分度數運算
void check_canshu(void);//讀參數,并校驗是否正確
void ver_disp(void);//顯示版本號
void seg_check(void);//筆畫檢測
/******************************************/
void main (void)
{
start_set(); //單片機初始化
beep_time=3; //開機鳴叫
flash_num=6; //沒有閃爍位
spi_sys(); //ad芯片初始化
check_canshu(); //讀參數,并校驗是否正確
if(bdf.shuduval》2) //若是異常值,用默認值
bdf.shuduval=1;
addcount3=4;
bdf_dp_temp=bdf.dp; //保存小數點(標定修改參數時用)
bdf_dsel_temp=bdf.dsel;//保存分度值(標定修改參數時用)
key_scan(); //標定按鍵掃描
switch(key_temp) //功能鍵處理函數
case 0xc0:b_biaoding=1;task=bd_start ; break;//
default:
bdf.dp=0;
ver_disp();//顯示版本號
seg_check();//筆畫檢測
fendu_val();//分度數運算
zero_current=ad_steady;//保存當前零位值
task=fun_weight;
break;
}
評論