|
幫助廣大51hei論壇友人快速解決HX711傳感器的單片機(jī)電子稱的設(shè)計(jì)問(wèn)題
還帶開(kāi)題報(bào)告與完整的設(shè)計(jì)論文,畢業(yè)黨這下有救了.
制作的成品實(shí)物圖:
元件清單:
元件型號(hào) | 元件名稱 | 元件標(biāo)號(hào) | 數(shù)量 | 蜂鳴器 | Bell | B1 | 1 | 10uF | 電容 | C1 | 1 | 20pF | 電容 | C2, C3 | 2 | LCD1602 | 液晶 | LCD1 | 1 | Header 2 | 電源接口 | P1 | 1 | 9012 | 三極管 | Q5 | 1 | 2.7K | 電阻 | R1 | 1 | 10K | 電阻 | R2 | 1 | SW-PB | 按鍵 | S1, S3, S4, S5, S6, S7, S8, S9, S10, S11, S12, S13, S14, S15, S16, S17, S18 | 17 | sw-灰色 | 電源開(kāi)關(guān) | SW1 | 1 | U1 | 單片機(jī) | U1 | 1 | 12M | 晶振 | Y1 | 1 |
Altium Designer畫(huà)的原理圖和PCB圖如下:(51hei附件中可下載工程文件)
DXP格式用 Altium designer Summer 軟件打開(kāi)
protel99格式用 protel99SE 軟件打開(kāi)
PDF格式用 PDF 軟件打開(kāi)
Word格式用 Word 或用WPS 軟件打開(kāi)
4種格式的原理圖都內(nèi)容是一樣的 只是打開(kāi)方式不同
請(qǐng)看原理圖焊接,不要看仿真圖焊接。
wrod格式里面的原理圖是復(fù)制出來(lái)的,有一點(diǎn)點(diǎn)變行變形,麻煩大家注意一下,盡量看其他三種格式的圖焊接,
如果論文里面的原理圖和原理圖文件夾內(nèi)的圖不一樣的話,請(qǐng)大家以原理圖文件夾內(nèi)的為準(zhǔn),原理圖文件夾的圖是和實(shí)物配套的,可以自己截圖或復(fù)制,然后粘貼到論文里面去。
資料包含以下目錄(里面很多都有詳細(xì)的視頻教程,非常值得大家學(xué)習(xí))
Altium Designer Sunner畫(huà)圖軟件學(xué)習(xí)視頻\
Altium Designer Sunner畫(huà)圖軟件安裝視頻\
AltiumDesignerSummer9 畫(huà)圖軟件安裝包\
C語(yǔ)言視頻教程\
KEIL 軟件安裝視頻\
keil4軟件安裝包 開(kāi)發(fā)工具地址\
MCU 單片機(jī)芯片資料\
PCB圖\
Protel 99 軟件安裝包\
Protel 99 軟件安裝視頻\
Protel 99畫(huà)圖軟件學(xué)習(xí)視頻\
Proteus ISIS 仿真軟件學(xué)習(xí)視頻\
Proteus 軟件安裝包\
PROTEUS仿真軟件的安裝方法\
元件清單\
制作過(guò)程\
單片機(jī)初學(xué)者視頻教程 郭天祥老師\
單片機(jī)初學(xué)者視頻教程 霖鋒老師\
單片機(jī)程序下載軟件 STC-ISP-V4.83\
原理圖 電子稱\
原理圖 電子稱 沒(méi)有字\
參考論文\
實(shí)物照片\
工程新建 程序下載 視頻教程\
開(kāi)發(fā)工具地址 keil4軟件安裝包\
開(kāi)題報(bào)告\
操作視頻地址\
畢設(shè)答辯技巧\
焊接注意事項(xiàng)和調(diào)試講解\
程序\
答辯常見(jiàn)問(wèn)題解答\
設(shè)計(jì)資料\
使用前必讀.doc
原理圖 打開(kāi)方式.txt
基于單片機(jī)的電子秤系統(tǒng)設(shè)計(jì)任務(wù)書(shū).doc
電子秤文獻(xiàn)翻譯.doc
程序打開(kāi)方法.txt
單片機(jī)源程序如下:
- #include <reg52.h> //調(diào)用單片機(jī)頭文件
- #define uchar unsigned char //無(wú)符號(hào)字符型 宏定義 變量范圍0~255
- #define uint unsigned int //無(wú)符號(hào)整型 宏定義 變量范圍0~65535
- #define ulong unsigned long
- #include<intrins.h>
- uchar code table_num[]="0123456789abcdefg";
- sbit rs=P1^0; //寄存器選擇信號(hào) H:數(shù)據(jù)寄存器 L:指令寄存器
- sbit rw=P1^1; //寄存器選擇信號(hào) H:數(shù)據(jù)寄存器 L:指令寄存器
- sbit e =P1^2; //片選信號(hào) 下降沿觸發(fā)
- sbit hx711_dout=P2^1;
- sbit hx711_sck=P2^0;
- sbit beep = P1^3; //蜂鳴器
- long weight;
- uint temp,qi_weight;
- bit chaozhong_flag;
- bit leiji_flag;
- bit flag_300ms ;
- ulong price,z_price; //單價(jià) 總價(jià)
- uchar flag_p;
- /***************
- 刪除鍵
- 去皮
- 價(jià)格清零
- ***************/
- /******1ms延時(shí)函數(shù)***12M晶振**************/
- void delay_1ms(uint q)
- {
- uint i,j;
- for(i=0;i<q;i++)
- for(j=0;j<120;j++);
- }
- /********************************************************************
- * 名稱 : delay_uint()
- * 功能 : 小延時(shí)。
- * 輸入 : 無(wú)
- * 輸出 : 無(wú)
- ***********************************************************************/
- void delay_uint(uint q)
- {
- while(q--);
- }
- /********************************************************************
- * 名稱 : write_com(uchar com)
- * 功能 : 1602命令函數(shù)
- * 輸入 : 輸入的命令值
- * 輸出 : 無(wú)
- ***********************************************************************/
- void write_com(uchar com)
- {
- e=0;
- rs=0;
- rw=0;
- P0=com;
- delay_uint(3);
- e=1;
- delay_uint(25);
- e=0;
- }
- /********************************************************************
- * 名稱 : write_data(uchar dat)
- * 功能 : 1602寫(xiě)數(shù)據(jù)函數(shù)
- * 輸入 : 需要寫(xiě)入1602的數(shù)據(jù)
- * 輸出 : 無(wú)
- ***********************************************************************/
- void write_data(uchar dat)
- {
- e=0;
- rs=1;
- rw=0;
- P0=dat;
- delay_uint(3);
- e=1;
- delay_uint(25);
- e=0;
- }
- /***********************lcd1602上顯示這字符函數(shù)************************/
- void write_string(uchar hang,uchar add,uchar *p)
- {
- if(hang==1)
- write_com(0x80+add);
- else
- write_com(0x80+0x40+add);
- while(1)
- {
- if(*p == '\0') break;
- write_data(*p);
- p++;
- }
- }
- /***********************lcd1602初始化設(shè)置************************/
- void init_1602() //lcd1602初始化設(shè)置
- {
- write_com(0x38); //
- write_com(0x0c);
- write_com(0x06);
- delay_uint(1000);
- }
- ////////////////在指定位置顯示指定字符//////////
- void write_zifu(uchar hang,uchar add,uchar dat)
- {
- if(hang==1)
- write_com(0x80+add);
- else
- write_com(0x80+0x40+add);
- write_data(dat);
- }
- /********************************************************************
- * 名稱 : write_sfm4_price(uchar hang,uchar add,uchar date)
- * 功能 : 顯示價(jià)格
- * 輸入 : 行,列,需要輸入1602的數(shù)據(jù)
- * 輸出 : 無(wú)
- ***********************************************************************/
- void write_sfm4_price(uchar hang,uchar add,uint date)
- {
- if(hang==1)
- write_com(0x80+add);
- else
- write_com(0x80+0x40+add);
- write_data(0x30+date/1000%10);
- write_data(0x30+date/100%10);
- write_data('.');
- write_data(0x30+date/10%10);
- write_data(0x30+date%10);
- }
- /****************開(kāi)機(jī)液晶顯示函數(shù) 初始化液晶的內(nèi)容********************************/
- void init_1602_dis_csf() //初始化液晶
- {
- write_string(1,0," W:0.000kg ");
- write_string(2,0,"P:00.00 Z:00.00");
- write_zifu(2,7,0x5c); //¥
- // write_zifu(2,15,0x5c); //¥
- }
- /*******************壓力顯示程序***********************/
- void write_1602_yl(uchar hang,uchar add,uint date)
- {
- if(hang==1)
- write_com(0x80+add);
- else
- write_com(0x80+0x40+add);
- write_data(0x30+date/1000%10);
- write_data('.');
- write_data(0x30+date/100%10);
- write_data(0x30+date/10%10);
- write_data(0x30+date%10);
-
- }
- void Delay__hx711_us(void)
- {
- _nop_();
- _nop_();
- }
- ulong ReadCount(void) //增益128
- {
- ulong count,value = 0;
- uchar i;
- hx711_dout=1;
- Delay__hx711_us();
- hx711_sck=0;
- count=0;
- while(hx711_dout) ;
- for(i=0;i<24;i++)
- {
- hx711_sck=1;
- count=count<<1;
- hx711_sck=0;
- if(hx711_dout)
- count++;
- }
- hx711_sck=0;
- Delay__hx711_us();
- hx711_sck=1;
- return(count);
- }
- void get_pizhong() //獲取皮重,秤盤(pán)重量
- {
- ulong hx711_dat;
- hx711_dat=ReadCount(); //HX711AD轉(zhuǎn)換數(shù)據(jù)處理
- temp=(uint)(hx711_dat/100);
- }
- void get_weight() //獲取被測(cè)物體重量
- {
- ulong hx711_data,a;
- uint get,aa;
- hx711_data=ReadCount(); //HX711AD轉(zhuǎn)換數(shù)據(jù)處理
- get=(uint)(hx711_data/100);
- if(get>temp)
- {
- a=ReadCount();
- aa=(uint)(a/100)-temp;
- weight=(uint)((float)aa/4.9+0.05);//重量轉(zhuǎn)換函數(shù),傳感器型號(hào)不同此函數(shù)要適當(dāng)修改
- }
- }
- /************************************************/
- /* 由于稱重傳感器線性度參數(shù)的不同,而對(duì)獲得的重量數(shù)據(jù)處理,
- 此處可能會(huì)根據(jù)不同稱重傳感器,程序的代碼會(huì)有所不同 */
- /************************************************/
- /*************定時(shí)器0初始化程序***************/
- void time_init()
- {
- EA = 1; //開(kāi)總中斷
- TMOD = 0X01; //定時(shí)器0、定時(shí)器1工作方式1
- ET0 = 1; //開(kāi)定時(shí)器0中斷
- TR0 = 1; //允許定時(shí)器0定時(shí)
- }
- /********************獨(dú)立按鍵程序*****************/
- uchar key_can; //按鍵值
- void key() //獨(dú)立按鍵程序
- {
- static uchar key_new = 0, key_l;
- key_can = 20; //按鍵值還原
- P3 = 0x0f;
- if((P3 & 0x0f) != 0x0f) //按鍵按下
- {
- delay_1ms(1); //按鍵消抖動(dòng)
- if(((P3 & 0x0f) != 0x0f) && (key_new == 1))
- { //確認(rèn)是按鍵按下
- key_new = 0;
- key_l = P3 | 0xf0; //矩陣鍵盤(pán)掃描
- P3 = key_l;
- switch(P3)
- {
- case 0xee: key_can = 1; break; //得到按鍵值
- case 0xde: key_can = 4; break; //得到按鍵值
- case 0xbe: key_can = 7; break; //得到按鍵值
- case 0x7e: key_can = 10; break; //得到按鍵值
-
- case 0xed: key_can = 2; break; //得到按鍵值
- case 0xdd: key_can = 5; break; //得到按鍵值
- case 0xbd: key_can = 8; break; //得到按鍵值
- case 0x7d: key_can = 0; break; //得到按鍵值
-
- case 0xeb: key_can = 11; break; //得到按鍵值
- case 0xdb: key_can = 9; break; //得到按鍵值
- case 0xbb: key_can = 6; break; //得到按鍵值
- case 0x7b: key_can = 3; break; //得到按鍵值
-
- case 0xe7: key_can = 15; break; //得到按鍵值
- case 0xd7: key_can = 14; break; //得到按鍵值
- case 0xb7: key_can = 13; break; //得到按鍵值
- case 0x77: key_can = 12; break; //得到按鍵值
- }
- beep = 0; //蜂鳴器叫一聲
- delay_1ms(100);
- beep = 1;
- }
- }
- else
- key_new = 1;
- }
- /************按鍵控制函數(shù)*************/
- void key_with()
- {
- if(key_can <= 9) //數(shù)字鍵
- {
- if(flag_p >= 4)
- {
- flag_p = 0;
- }
- if(flag_p == 0)
- price = key_can;
- else
- {
- price = price * 10 + key_can;
- }
- write_sfm4_price(2,2,price); //顯示單價(jià)
- flag_p ++;
- }
- if(key_can == 15) //刪除鍵
- {
- if(price != 0 )
- {
- flag_p --;
- price /= 10; //刪除
- write_sfm4_price(2,2,price);//顯示單價(jià)
- }
- }
- if(key_can == 14) //去皮
- {
- get_pizhong(); //獲取皮重,秤盤(pán)重量
- }
- if(key_can == 13) //價(jià)格清零
- {
- flag_p = 0;
- price = 0;
- write_sfm4_price(2,2,price);//顯示單價(jià)
- }
- }
- /*****************主函數(shù)********************/
- void main()
- {
- beep = 0; //蜂鳴器叫一聲
- delay_1ms(100);
- P0 = P1 = P2 = P3 = 0xff; //單片機(jī)IO口初始化為1
- time_init(); //初始化定時(shí)器
- init_1602(); //lcd1602初始化
- init_1602_dis_csf(); //lcd1602初始化顯示
- ……………………
- …………限于本文篇幅 余下代碼請(qǐng)從51黑下載附件…………
復(fù)制代碼
所有資料51hei提供打包下載:
## 電子稱 16鍵 1602.rar
(12.17 MB, 下載次數(shù): 805)
2017-5-17 21:41 上傳
點(diǎn)擊文件名下載附件
|
評(píng)分
-
查看全部評(píng)分
|