本文目錄一覽:
- 1、求講解51單片機電子秤的程序,分模塊詳細點
- 2、求一個會編寫關於電子秤的C語言源程序!!!!!!
- 3、高手,請問電子秤,置零是怎麼樣實現的,麻煩你提供個思路,急急!!,謝謝了。
- 4、C語言題目,高分求解,最好帶一點注釋
- 5、問一段單片機的c語言程序。
求講解51單片機電子秤的程序,分模塊詳細點
如果想知道更多的東西,建議看一本書:吳鑒鷹單片機實戰精講,網上能找到,代碼我給你了。
/******************************************************
*程序:吳鑒鷹基於單片機的電子秤的設計程序
** 這一講的主要內容: 電子稱是什麼,講的專業點就是:
利用物體的重力作用來確定物體質量的測量儀器,也可用來確定與物體質量相關的其他量的大小,
參數,或特性用我們自己話講就是測重量的。
** 功能描述:
** 輸 入:
** 內容:
** 輸 出:
**
** 全局變量:
** 調用模塊:
**
** 作 者: 吳鑒鷹
** 日 期: 14.02.22
備註:有什麼錯誤的地方,歡迎各大燒友指正
O(∩_∩)O~
*******************************************************/
#include reg51.h
#include intrins.h
#includestdlib.h
#includemath.h
#define uchar unsigned char //宏的定義變量類型 uchar 代替 unsigned char
#define uint unsigned int //宏的定義變量類型 uint 代替 unsigned int
#define delay_time_max 50 //按鍵去抖動延時閥值
sbit RS = P2^0;
sbit RW = P2^1;
sbit SCLK = P2^2;
sbit LCDRST = P2^3;
sbit ST=P3^6; //啟動信號
sbit EOC=P3^3; //轉換結束信號,連到外部中斷1口,轉換結束後進入外部中斷
sbit OE=P3^7; //輸出使能
uchar KEY_VALUE;
uchar key_data;
uchar dis_buf; //顯示緩存
uchar temp;
uchar key; //鍵順序碼
uchar result;
uint f;
void delay(uchar x); //x*0.14MS
// 此表為 LED 的字模 0 1 2 3 4 5 6 7 8 9 a b c d e f
unsigned char code LED7Code[] = {~0x3F,~0x06,~0x5B,~0x4F,~0x66,~0x6D,~0x7D,~0x07,~0x7F,~0x6F,~0x77,~0x7C,~0x39,~0x5E,~0x79,~0x71};
unsigned char ADC0809[],KONGBVAI[],DANJIA[];
void ADC0809_change();
/*************************************************************************************
** 函數名稱: delayms
** 功能描述: 譯碼功能,將需要顯示的數字轉成相應的七段譯碼錶
如要顯示的字符為「0」,則為7e —0111 1111,就中間的一個LED不亮
** 輸 入: ms:需要延時的長度
**
**
** 輸 出:
**
** 全局變量:
** 調用模塊:
**
** 作 者: 吳鑒鷹
** 日 期: 14.02.22
**———————————————————————————–
** 修改人:吳鑒鷹
** 日 期:
**———————————————————————————-
****************************************************************************************/
void delayms(uint ms)
{
uchar i;
while(ms–) for(i=0;i120;i++);
}
/*********************************************************************************
** 函數名稱: SendByte
** 功能描述: 串口給液晶發送數據
** 輸 入: Dbyte
**
**
** 輸 出:
** 全局變量:
** 調用模塊:
**
** 作 者: 吳鑒鷹
** 日 期: 14.02.28
************************************************************************************/
void SendByte(uchar Dbyte)
{
uchar i;
for(i=0;i8;i++)
{
SCLK = 0;
Dbyte=Dbyte1; //左移一位
RW = CY; //移出的位給RW
SCLK = 1;
SCLK = 0;
}
}
/***********************************************************************************
** 函數名稱: TransferCom
** 功能描述: 串口給液晶發送命令
** 輸 入: data0
**
**
** 輸 出:
** 全局變量:
** 調用模塊:
**
** 作 者: 吳鑒鷹
** 日 期: 14.02.28
**********************************************************************************/
void TransferCom(uchar data0)
{
RS=1;
SendByte(0xf8); //11111ABC,RW(0),RS(1),0
SendByte(0xf0data0); //高四位
SendByte(0xf0data04); //低四位(先執行)
RS=0;
}
/*******************************************************************************
** 函數名稱: lcd_mesg
** 功能描述: 寫數據,
** 輸 入: data1
**
**
** 輸 出:
** 全局變量:
** 調用模塊:
**
** 作 者: 吳鑒鷹
** 日 期: 14.02.28
*****************************************************************************/
void TransferData(uchar data1)
{
RS=1;
SendByte(0xfa); //11111ABC,RW(0),RS(1),0
SendByte(0xf0data1); //高四位
SendByte(0xf0data14); //低四位(先執行)
RS=0;
}
求一個會編寫關於電子秤的C語言源程序!!!!!!
#includemsp430x14x.h
#include “HX711.h”
//****************************************************
//延時函數
//****************************************************
void Delay_hx711_us(uint t)
{
//_nop_();
//_nop_();
while(t–);
}
// I/O配置
void PORT_Init(void)
{
P1SEL =~ (BIT1+BIT2);
P1DIR =~ BIT2;//SDA
P1DIR |= BIT1;//SCK
}
//****************************************************
//讀取HX711
//****************************************************
unsigned long HX711_Read(void) //增益128
{
unsigned long count;
unsigned char i;
P1OUT |= BIT2; //SDA
Delay_hx711_us(4);
P1OUT =~ BIT1;//SCK
count=0;
while( P1INBIT2 ); //SDA
for(i=0;i24;i++)
{
P1OUT |= BIT1; //SCK
count=count1;
P1OUT =~ BIT1;//SCK
if(P1INBIT2)//SDA
count++;
}
P1OUT |= BIT1; //SCK
Delay_hx711_us(4);
P1OUT =~ BIT1;//SCK
return(count);
}
高手,請問電子秤,置零是怎麼樣實現的,麻煩你提供個思路,急急!!,謝謝了。
所謂的置零是給CPU一個基準信號
因為稱的傳感器的使用過程中可能要發生變化,以及秤在使用過程中也要有些操作:如去皮等會使秤有些時候不在零點上所以要置零
實現的手段就是給單片機一個腳一個電平信號,一般用微動開關
C語言題目,高分求解,最好帶一點注釋
#include bits/stdc++.h
using namespace std;
double num[35][35];
int main()
{
for(int i=1;i=29;i++)
for(int j=1;j=i;j++)
cinnum[i][j];
for(int i=1;i=29;i++)
for(int j=1;j=i;j++)
{
num[i+1][j]+=num[i][j]/2;
num[i+1][j+1]+=num[i][j]/2;
}
double maxn=-1;
double minn=0x3f3f3f;
for(int i=1;i=30;i++)
{
if(maxnnum[30][i]) maxn=num[30][i];
if(minnnum[30][i]) minn=num[30][i];
}
printf(“%lf”,maxn*2086458231/minn);
}
問一段單片機的c語言程序。
我也接觸到了這段代碼。是HX711ad轉換讀數函數用到的
我來解釋兩點:
1、Count=Count^0x800000,最高位取反。把正負方向的電壓轉換ad全部變成正的數值。例如24位2進制可以表示的數值為-8388608~8388607,沒有負載時為0;
最高位取反後表示數值為0~16777215,沒有負載時候顯示為8388608,這樣做的目的是避免出現負數,方便計算。如果你做電子秤的話,我建議就不要這句了。一般不會有負數的。
2、有的代碼後面還跟了一段
/* if((Count 0x800000) == 0x800000)
{
Count = ~(Count – 1);
} */
表示負數補碼還原成正值
原創文章,作者:XRTE,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/142824.html
微信掃一掃
支付寶掃一掃