亚洲春色中文字幕久久久-三上亚,一吻二脱三床四吻胸,国产真实伦对白视频全集,在线毛片观看,精品成品入口黄网,国产毛aⅴ片久久久,亚洲AV色香蕉一区二区三区老师,萧皇后A级艳片,色情日本视频更新,99久久亚洲精品日本无码
標(biāo)題:
stc15w4單片機(jī)+HX711稱重傳感器+12864源程序
[打印本頁]
作者:
hzw854025403
時間:
2019-8-5 15:08
標(biāo)題:
stc15w4單片機(jī)+HX711稱重傳感器+12864源程序
這是我從網(wǎng)上一堆程序整合成的電子秤,發(fā)給大家參考參考,有什么不對的希望大家指出。
程序已經(jīng)完全調(diào)試正常,在雖然小數(shù)點的顯示不出來,但是穩(wěn)定在克是沒有什么問題的。
單片機(jī)源程序如下:
/*********************************************************************
//主時鐘在 common.H 定義
//u8,u16,u32已在"STC15Fxxxx.h"定義
//因為15W系列快89系列 6——12倍,
//時序圖上面的時間也要相應(yīng)的加倍,具體多少要具體測試
*********************************************************************/
/*
**********************************************************************
* 頭文件包含
**********************************************************************
*/
#include "common.h"
#include "LCD12864.h"
#include "HX711.h"
//使用了宏晶科技的資料及程序
/*********************************************************************
0 0 準(zhǔn)雙向口(標(biāo)準(zhǔn) 8051 單片機(jī)輸出模式),灌電流可達(dá) 20mA,拉電流典型 值為 200uA,由于制造誤差,實際為 150~270 uA。
0 1 推挽輸出,強(qiáng)上拉輸出,可達(dá) 20 mA,外加限流電阻,盡量少用
1 0 僅為輸入(高阻)
1 1 開漏,內(nèi)部上拉電阻斷開,要外接上拉電阻才可以輸出高電平。
**********************************************************************/
void port_mode(void)
{
P0M1 = 0; P0M0 = 0; //設(shè)置為準(zhǔn)雙向口
P1M1 = 0; P1M0 = 0; //設(shè)置為準(zhǔn)雙向口
P2M1 = 0; P2M0 = 0; //設(shè)置為準(zhǔn)雙向口
P3M1 = 0; P3M0 = 0; //設(shè)置為準(zhǔn)雙向口
P4M1 = 0; P4M0 = 0; //設(shè)置為準(zhǔn)雙向口
P5M1 = 0; P5M0 = 0; //設(shè)置為準(zhǔn)雙向口
P6M1 = 0; P6M0 = 0; //設(shè)置為準(zhǔn)雙向口
P7M1 = 0; P7M0 = 0; //設(shè)置為準(zhǔn)雙向口
}
/*********************************************************************
* 函 數(shù) 名 : main
* 函數(shù)功能 : 主函數(shù)
* 參數(shù)列表 : 無
* 函數(shù)輸出 : 無
*********************************************************************/
void main(void)
{
port_mode(); //設(shè)置為準(zhǔn)雙向口
Lcd12864Init(); //初始化
Lcd12864ClearScreen(); // 清屏
Lcd12864ShowStr(0,0," Holle word!");
Lcd12864FlashScreen();
delay_ms(200);
Lcd12864ClearScreen(); // 清屏
delay_ms(1);
chengzhongmain(); //顯示重量:單位G
while(1);
}
復(fù)制代碼
所有資料51hei提供下載:
stc15w4k.zip
(141.24 KB, 下載次數(shù): 114)
2019-8-5 15:07 上傳
點擊文件名下載附件
12864+hx711
下載積分: 黑幣 -5
作者:
hzw854025403
時間:
2019-8-5 15:14
12864的部分代碼
/*
**********************************************************************
* 頭文件包含
**********************************************************************
*/
#include "lcd12864.h"
#include "delay.h"
/*
**********************************************************************
* 本地全局變量
**********************************************************************
*/
sbit gLcd12864_E = P5^2; // LCD12864控制總線的使能信號
sbit gLcd12864_RW = P5^1; // LCD12864控制總線的讀寫選擇信號
sbit gLcd12864_RS = P5^0; // LCD12864控制總線的數(shù)據(jù)/命令選擇信號
sbit gLcd12864_PSB= P5^4; // PSB腳為12864-12系列的串、并通訊功能切換,PSB=1為并口,PSB=0為串口
// 顯示的圖片字模,取模軟件在光盤工具軟件目錄下的字模提取軟件
// 注意要設(shè)置為橫向取模,不要勾選字節(jié)倒序
/*
**********************************************************************
* 內(nèi)部函數(shù)原型聲明
**********************************************************************
*/
/*********************************************************************
* 函 數(shù) 名 : Lcd12864WaitNoBusy
* 函數(shù)功能 : 阻塞等待LCD12864直到不忙狀態(tài)
* 參數(shù)列表 : 無
* 函數(shù)輸出 : 無
*********************************************************************/
static void Lcd12864WaitNoBusy(void) //忙檢測函數(shù),判斷bit7是0,允許執(zhí)行;1禁止
{
u8 sta = 0;
LCD12864_DATA_PORT = 0xff;
gLcd12864_RS = 0;
gLcd12864_RW = 1;
do
{
gLcd12864_E = 1;
sta = LCD12864_DATA_PORT;
gLcd12864_E = 0; //使能,用完就拉低,釋放總線
}while(sta & 0x80);
}
/*********************************************************************
* 函 數(shù) 名 : Lcd12864WriteCmd
* 函數(shù)功能 : 按照LCD12864低層時序向LCD內(nèi)部寫入8位命令字
* 參數(shù)列表 : cmd - 待寫入的8位命令字
* 函數(shù)輸出 : 無
*********************************************************************/
static void Lcd12864WriteCmd(u8 cmd)
{
Lcd12864WaitNoBusy(); // 先等待LCD1602處于不忙狀態(tài)
gLcd12864_E = 0; // 禁止LCD
// Delay100us();
gLcd12864_RS = 0; // 選擇發(fā)送命令模式
// Delay100us();
gLcd12864_RW = 0; // 選擇寫入模式
// Delay100us();
LCD12864_DATA_PORT = cmd; // 將1字節(jié)命令字放入8位并行數(shù)據(jù)端口
Delay100us();
gLcd12864_E = 1; // 使能LED
Delay100us();
gLcd12864_E = 0; // 禁止LCD
}
/*********************************************************************
* 函 數(shù) 名 : Lcd12864WriteData
* 函數(shù)功能 : 按照LCD12864低層時序向LCD內(nèi)部寫入8位數(shù)據(jù)
* 參數(shù)列表 : dat - 待寫入的8位命令字
* 函數(shù)輸出 : 無
*********************************************************************/
static void Lcd12864WriteData(u8 dat)
{
Lcd12864WaitNoBusy(); // 先等待LCD12864處于不忙狀態(tài)
gLcd12864_E = 0; // 禁止LCD
// Delay100us();
gLcd12864_RS = 1; // 選擇發(fā)送數(shù)據(jù)模式
// Delay100us();
gLcd12864_RW = 0; // 選擇寫入模式
// Delay100us();
LCD12864_DATA_PORT = dat; // 將1字節(jié)命令字放入8位并行數(shù)據(jù)端口
Delay100us();
gLcd12864_E = 1; // 使能LED
Delay100us();
gLcd12864_E = 0; // 禁止LCD
}
/************* 上面是底層時序函數(shù),下面是高層時序函數(shù) ***************/
/*********************************************************************
* 函 數(shù) 名 : Lcd12864Init
* 函數(shù)功能 : 按照LCD12864低層時序進(jìn)行初始化序列
* 參數(shù)列表 : 無
* 函數(shù)輸出 : 無
*********************************************************************/
void Lcd12864Init(void)
{
gLcd12864_PSB = 1; // 設(shè)置為8位并行總線
Delay100us();
// 發(fā)送初始化序列
Lcd12864WriteCmd(0x30); // 0x30為基本指令集
Lcd12864WriteCmd(0x01); // 0x01為清屏指令
Lcd12864WriteCmd(0x06); // 地址自動加1
Lcd12864WriteCmd(0x0c); // 整體顯示、游標(biāo)關(guān)閉
}
/*********************************************************************
* 函 數(shù) 名 : Lcd12864ClearScreen
* 函數(shù)功能 : 清屏,即清除屏幕整個顯示內(nèi)容
* 參數(shù)列表 : 無
* 函數(shù)輸出 : 無
*********************************************************************/
void Lcd12864ClearScreen(void)
{
// 發(fā)送初始化序列
Lcd12864WriteCmd(0x01); // 0x01為清屏指令
// Lcd12864WriteCmd(0x34); // 0x34為擴(kuò)充指令集
// Lcd12864WriteCmd(0x30); // 0x30為基本指令集
}
/*********************************************************************
* 函 數(shù) 名 : Lcd12864FlashScreen3
* 函數(shù)功能 : 屏幕閃爍3次
* 參數(shù)列表 : 無
* 函數(shù)輸出 : 無
*********************************************************************/
void Lcd12864FlashScreen(void)
{
u8 time = 0;
for (time=0; time<3; time++)
{
Lcd12864WriteCmd(0x08);
Delay500ms();
Lcd12864WriteCmd(0x0c);
Delay500ms();
}
}
/****************************************************
//顯示一個字符
void Lcd12864ShowChar(u8 x, u8 y, u8 DData)
{
switch (y)
{
case 0:
x |= 0x80; break;
case 1:
x |= 0x90; break;
case 2:
x |= 0x88; break;
case 3:
x |= 0x98; break;
default:
break;
}
Lcd12864WriteCmd(x); //這里不檢測忙信號,發(fā)送地址碼
Lcd12864WriteData(DData);
}
*******************************************************/
/*********************************************************************
* 函 數(shù) 名 : Lcd12864ShowStr
* 函數(shù)功能 : 從坐標(biāo)(x, y)開始顯示字符串str,注意這個函數(shù)不能跨行
* 顯示,因為顯存地址是不連續(xù)的。
* 參數(shù)列表 : x - 橫向坐標(biāo),范圍是0-7
* y - 縱向坐標(biāo),范圍是0-3
* pStr - 指向待顯示的字符串的指針
* 函數(shù)輸出 : 無
*********************************************************************/
void Lcd12864ShowStr(u8 x, u8 y, u8 *pStr) //顯示字符串
{
switch (y)
{
case 0:
x |= 0x80; break;
case 1:
x |= 0x90; break;
case 2:
x |= 0x88; break;
case 3:
x |= 0x98; break;
default:
break;
}
Lcd12864WriteCmd(x); // 發(fā)送地址碼
while (*pStr != '\0') // 若到達(dá)字串尾則退出
{
Lcd12864WriteData(*pStr);
pStr++;
Delay100us();
}
}
/*********************************************************************
* 函 數(shù) 名 : Lcd12864ShowImage
* 函數(shù)功能 : 顯示一個128*64分辨率的2值位圖。
* 參數(shù)列表 : pData - 指向待顯示的位圖圖像數(shù)組指針
* 函數(shù)輸出 : 無
*********************************************************************/
//void Lcd12864ShowImage(u8 *pData)
//{
// u8 x = 0, y = 0, i = 0;
// u16 tmp = 0;
// //分兩屏,上半屏和下半屏,因為起始地址不同,需要分開
// for (i=0; i<9; i+=8)
// {
// for (x=0; x<32; x++)
// { //32行
// Lcd12864WriteCmd(0x34);
// Lcd12864WriteCmd(0x80 + x); // 列地址
// Lcd12864WriteCmd(0x80 + i); // 行地址,下半屏,即第三行地址0X88
// Lcd12864WriteCmd(0x30);
// for (y=0; y<16; y++)
// Lcd12864WriteData(pData[tmp+y]); // 將取數(shù)據(jù)寫入LCD
// tmp += 16;
// }
// }
// Lcd12864WriteCmd(0x36); // 擴(kuò)充功能設(shè)定
// Lcd12864WriteCmd(0x30);
//}
復(fù)制代碼
作者:
hzw854025403
時間:
2019-8-5 15:14
HX711部分代碼
#include "HX711.h"
#include "LCD12864.h"
//校準(zhǔn)參數(shù)
//因為不同的傳感器特性曲線不是很一致,因此,每一個傳感器需要矯正這里這個參數(shù)才能使測量值很準(zhǔn)確。
//當(dāng)發(fā)現(xiàn)測試出來的重量偏大時,增加該數(shù)值。
//如果測試出來的重量偏小時,減小改數(shù)值。
//該值可以為小數(shù)
#define GapValue A
u16 A = 442.8;//這是一個修正系數(shù),例如100g砝碼稱出來是99.2g,A=99.2*A/原數(shù)據(jù);
#define MEDIAN_LEN 9 //中值濾波的濾波長度,一般取奇數(shù)
#define MEDIAN 5 //中值在濾波數(shù)組中的位置
u32 buffer[MEDIAN_LEN]; //中值濾波的數(shù)據(jù)緩存
u16 medleng = 0; //一組中值濾波數(shù)據(jù)中,進(jìn)入濾波緩存的數(shù)據(jù)個數(shù)
u32 xd,xd1; //數(shù)據(jù)對比大小中間變量
//函數(shù)或者變量聲明
extern void Delay_ms(unsigned int n);
extern void Get_Maopi();
extern void Get_Weight();
extern void Scan_Key();
/*unsigned char code b[]={"0123456789.-g"}; //ZF 占兩個字符*/
u8 dat[]="0000.00G";
unsigned long HX711_Buffer = 0;
unsigned long Weight_Maopi = 0;
long Weight_Shiwu = 0;
unsigned char flag = 0;
bit Flag_ERROR = 0;
sbit KEY1 = P2^3;
sbit speak= P5^5;//板子上的測試燈
//****************************************************
//讀取HX711
//****************************************************
u32 HX711_Read(void) //增益128
{
unsigned long count;
unsigned char i;
HX711_DOUT=1;
Delay5us();
HX711_SCK=0;
count=0;
EA = 1;
while(HX711_DOUT);
EA = 0;
for(i=0;i<24;i++) //做24個脈沖
{
HX711_SCK=1;
count=count<<1;
HX711_SCK=0;
if(HX711_DOUT)
count++;
}
HX711_SCK=1;
count=count^0x800000;//第25個脈沖下降沿來時,轉(zhuǎn)換數(shù)據(jù)
Delay5us();
HX711_SCK=0;
return(count);
}
//****************************************************
//顯示稱重程序
//****************************************************
void chengzhongmain()
{
u16 i;
Get_Maopi(); //稱毛皮重量
Delay100us();
Get_Maopi(); //再次稱毛皮重量
while(1)
{
EA = 0;
Get_Weight(); //稱重
EA = 1;
Scan_Key(); //按鍵,觸發(fā)去皮
if(medleng == 0) //緩存的第1個元素,直接放入,不需要排序
{
buffer[0] = Weight_Shiwu; medleng = 1;
}
else //插入排序算法,按從小到大的順序排列
{
for(i = 0; i < medleng; i ++)
{
if( buffer[i] > Weight_Shiwu) // 輪詢到的當(dāng)前元素>AD值,則交換它們的值,xd為中間變量存放位置
{
xd = Weight_Shiwu; Weight_Shiwu = buffer[i]; buffer[i] = xd;
}
}
buffer[medleng] = Weight_Shiwu; //把輪詢出較大的數(shù)放入緩存的后面.
medleng++;
}
//顯示當(dāng)前重量
if(medleng >= MEDIAN_LEN) //ADC采樣的數(shù)據(jù)個數(shù)達(dá)到中值濾波要求的數(shù)據(jù)個數(shù)
{
Weight_Shiwu = buffer[MEDIAN]; //最終重量取中值濾波數(shù)組的中間值
medleng = 0;
if( Flag_ERROR == 1)
{
Lcd12864ClearScreen(); //清屏
Lcd12864ShowStr(2,1,"error"); //顯示錯誤
speak=0; //大于5千克時亮
delay_ms(200);
Lcd12864ClearScreen(); //清屏
}
else
{
speak=1;
Lcd12864ShowStr(0,0,"重量:"); //占三個字符
dat[0] = Weight_Shiwu/100000+'0'; //顯示千位
dat[1] = Weight_Shiwu%100000/10000+'0';
dat[2] = Weight_Shiwu%10000/1000+'0';
dat[3] = Weight_Shiwu%1000/100+'0';
dat[5] = Weight_Shiwu%100/10 + '0'; //顯示小數(shù)點后一位
dat[6] = Weight_Shiwu%10 + '0';
Lcd12864ShowStr(3,0,dat); //從第三個字符開始顯示,按中文字符算兩個
} //中文前面不能只有一個英文字符,否則會亂碼
}
}
}
//掃描按鍵
void Scan_Key() //key = P2^3
{
if(KEY1 == 0)
{
Delay_ms(5);
if(KEY1 == 0)
{
while(KEY1 == 0);
Get_Maopi(); //去皮
}
}
}
//****************************************************
//稱重:獲取被測物體重量
//****************************************************
void Get_Weight()
{
Weight_Shiwu = 100*HX711_Read(); //放大獲取小數(shù)
Weight_Shiwu = Weight_Shiwu - Weight_Maopi; //獲取凈重
if(Weight_Shiwu > 1)
{
Weight_Shiwu = (unsigned int)((float)Weight_Shiwu/GapValue); //計算實物的實際重量,重量轉(zhuǎn)換函數(shù),傳感器型號不同此函數(shù)要適當(dāng)修改(修GapValue大小)
if(Weight_Shiwu > 500000) //超重報警,5千克放大了100倍
{
Flag_ERROR = 1;
}
else
{
Flag_ERROR = 0;
}
}
else
{
Weight_Shiwu = 0;
// Flag_ERROR = 1; //負(fù)重報警
}
}
//****************************************************
//獲取毛皮重量,秤盤重量
//****************************************************
void Get_Maopi()
{
/*u32 hx711_dat;
u16 i;
for(i=0;i<MEDIAN_LEN;i++)
{
hx711_dat=HX711_Read(); //HX711AD轉(zhuǎn)換數(shù)據(jù)處理
if(medleng == 0) //緩存的第1個元素,直接放入,不需要排序
{
buffer[0] = hx711_dat; medleng = 1;
}
else //插入排序算法,按從小到大的順序排列
{
for(i = 0; i < medleng; i ++)
{
if( buffer[i] > hx711_dat) // 輪詢到的當(dāng)前元素>AD值,則交換它們的值,xd為中間變量存放位置
{
xd = hx711_dat; hx711_dat = buffer[i]; buffer[i] = xd;
}
}
buffer[medleng] = hx711_dat; //把輪詢出較大的數(shù)放入緩存的后面.
medleng++;
}
if(medleng >= MEDIAN_LEN) //ADC采樣的數(shù)據(jù)個數(shù)達(dá)到中值濾波要求的數(shù)據(jù)個數(shù)
{
hx711_dat = buffer[MEDIAN]; //最終重量取中值濾波數(shù)組的中間值
medleng = 0;
}
}*///去掉上面這個可以加快速度,但精度有所降低,如果不顯示小數(shù),加不加無所謂
Weight_Maopi = 100*HX711_Read(); //放大獲取小數(shù)
}
復(fù)制代碼
作者:
方建昌
時間:
2019-8-8 17:39
這是用的51還是?
作者:
petertang
時間:
2019-8-16 20:39
學(xué)習(xí)中,希望一次調(diào)試通過。
歡迎光臨 (http://www.denmoz.com/bbs/)
Powered by Discuz! X3.1