|
求大神康康代碼怎么改(基于51單片機(jī)的電子秤用數(shù)碼管顯示),硬是看了一天還是不懂...
1.數(shù)字電子秤具備去皮、單價(jià)1輸入、單價(jià)2輸入、總價(jià)計(jì)算和刪除單價(jià)、超量程提示等相應(yīng)的功能,數(shù)碼管能夠?qū)崟r(shí)顯示當(dāng)前輸入單價(jià)信息、稱(chēng)重信息及總價(jià)信息;2.去皮即通過(guò)按鍵設(shè)置,觸發(fā)程序減去電子秤托盤(pán)的重量,放上待測(cè)物品后得到的物品的凈重,凈重測(cè)量范圍0 999,當(dāng)超過(guò)999時(shí),數(shù)碼管則顯示“- - -- --- -”,提示超量程。
3.能夠通過(guò)4x4鍵盤(pán)輸入物品的單價(jià),能夠?qū)崿F(xiàn)0^99.99的單價(jià)范圍內(nèi)輸入,并通過(guò)按鍵實(shí)現(xiàn)總價(jià)的計(jì)算及刪除;
數(shù)碼管顯示格式為: XXXX- XXX,前四位顯示輸入單價(jià),后三位顯示凈重,當(dāng)按下“總價(jià)”按鈕時(shí),則顯示當(dāng)前的總價(jià),具體顯示格式不做要求,但人機(jī)操作界面需簡(jiǎn)單易懂及數(shù)碼管不得閃爍。
硬件(看相片);
這是代碼;(不懂怎么改了……………………)
#include "STC15W408AS.H"
#include "HT1621.H"
#include "HX711.h"
#include "math.h"
//校準(zhǔn)參數(shù)
//因?yàn)椴煌膫鞲衅魈匦郧(xiàn)不是很一致,因此,每一個(gè)傳感器需要矯正這里這個(gè)參數(shù)才能使測(cè)量值很準(zhǔn)確。
//當(dāng)發(fā)現(xiàn)測(cè)試出來(lái)的重量偏大時(shí),增加該數(shù)值。
//如果測(cè)試出來(lái)的重量偏小時(shí),減小改數(shù)值。
//該值可以為小數(shù)
#define GapValue 21500
unsigned char wei[] = {0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};
unsigned char duan[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7f,0x6F,0x00};
sbit wei_a = P2^6;
sbit duan_b = P2^7; //數(shù)碼管顯示
sbit key1 = P3^2; //按鍵
sbit cxyg=P5^5; //定義場(chǎng)效應(yīng)管
float Weight; //重量
float Weight_Maopi; //毛皮
unsigned char q=0;
#define FOSC 11059200 //jingzhen 晶振
#define T1MS (65536-FOSC/12/1000) //12T模式
sbit INT0=P3^2;
void Get_Maopi();
//-----------------------------------------
//中斷服務(wù)程序
void exint0() interrupt 0 //INT0中斷入口
{
Get_Maopi();
cxyg=0;
write_com(LCDON); //打開(kāi)LCD偏壓
//P32 = !P32; //將測(cè)試口取反
while(P32==0);
q=0;
}
//****************************************************
//MS延時(shí)函數(shù)(12M晶振下測(cè)試)
//****************************************************
void delay_ms(unsigned int n)
{
unsigned int i,j;
for(i=0;i<n;i++)
for(j=0;j<123;j++);
}
//void delay_ms(unsigned int ms) //延時(shí)函數(shù)防抖
//{
// unsigned char i, j;
// while(ms--)
// {
// i = 2;
// j = 199;
// do
// {
// while (--j);
// } while (--i);
//
// }
//}
//****************************************************
//獲取毛皮重量
//****************************************************
void Get_Maopi()
{
unsigned long Weight_Maopi_0=0,Weight_Maopi_1=0;//毛皮臨時(shí)變量
float Weight_Maopi_temp0=0,Weight_Maopi_temp1=0;//計(jì)算毛皮臨時(shí)變量
mm:Weight_Maopi_0=HX711_Read(); //第一次讀取毛皮數(shù)據(jù)
delay_ms(1000); //延時(shí)一段時(shí)間
Weight_Maopi_1=HX711_Read(); //第二次讀取毛皮數(shù)據(jù)
Weight_Maopi_temp0=Weight_Maopi_0/GapValue; //換算第一次讀取毛皮重量
Weight_Maopi_temp1=Weight_Maopi_1/GapValue; //換算第二次讀取毛皮重量
if(fabs(Weight_Maopi_temp1-Weight_Maopi_temp0)>0.1)//當(dāng)兩次讀取毛皮重量絕對(duì)值大于0.1以上時(shí)重新測(cè)量
goto mm;
Weight_Maopi=Weight_Maopi_1; //讀取成功則返回第一次讀取值
}
//****************************************************
//稱(chēng)重
//****************************************************
void Get_Weight()
{
unsigned long HX711_Buffer = 0;
HX711_Buffer=HX711_Read();//讀取重量
if(HX711_Buffer>Weight_Maopi)
{
Weight=(float)((HX711_Buffer-Weight_Maopi)/GapValue);
}
}
void Timer1Init(void) //50毫秒@11.0592MHz
{
AUXR &= 0xBF; //定時(shí)器時(shí)鐘12T模式
TMOD &= 0x0F; //設(shè)置定時(shí)器模式
TL1 = 0x00; //設(shè)置定時(shí)初值
TH1 = 0x4C; //設(shè)置定時(shí)初值
TF1 = 0; //清除TF1標(biāo)志
TR1 = 1; //定時(shí)器1開(kāi)始計(jì)時(shí)
ET1=1;
}
void main()
{
cxyg=0;//低電平導(dǎo)通
port_mode(); //IO口初始化
init_HT1621(); //初始化液晶屏
screen_clear(); //清空整屏顯示內(nèi)容
delay_nms(1000);
Get_Maopi();
IT0 = 0;
// IT0 = 1;
Timer1Init();
// IT1 = 1;
// EX1 = 1;
EX0 = 1;
EA = 1;
AUXR |= 0x40; //定時(shí)器1為1T模式
LCD_display_float(Weight);//顯示浮點(diǎn)數(shù)
while(1)
{
Get_Weight();//稱(chēng)重
LCD_display_float(Weight);//顯示浮點(diǎn)數(shù)
if(Weight>0.5)q=0;//如果稱(chēng)重?cái)?shù)據(jù)大于兩克,定時(shí)器等于0
q++;
if(q>100)
{
write_com(TONEON); //打開(kāi)聲音
delay_nms(1000); //延時(shí)一下
write_com(TONEOFF);//關(guān)閉聲音
write_com(LCDOFF); //關(guān)閉LCD偏壓
cxyg=1;
PCON = 0x02; //MCU掉電模式
// _nop_(); //掉電模式被喚醒后,首先執(zhí)行此語(yǔ)句,然后再進(jìn)入中斷服務(wù)程序
// _nop_();
}
}
}
void tm1_isr() interrupt 3 using 1
{
unsigned char i;
TL1 = 0x00; //初始化計(jì)時(shí)值
TH1 =0x4C >> 8; //1s
if(i++==100) // 20*50=1000ms
{
i=0;
q+=1; //將測(cè)試口取反
}
}
|
|