電子稱設計,主要用于菜市場的電子稱,可以設置價格,根據價格和重量計算出金額,該設計采用了Proteus仿真軟件,采用AT89C51為主控,采用ADC0832芯片來進行ADC的轉換,采用LCD1602顯示屏顯示,同時設計了矩陣鍵盤用于輸入價格。設計難度3顆星(滿星為5顆)。
首先設計電路圖,由于模塊不多,所以接口可以隨意分配,電路仿真圖如下圖1。
設計時需要一步一步進行設計,一般設計開始盡量將人機交互的模塊優先級調高。這里呢就優先對LCD1602進行設計,驅動程序如下:
void wrc(uint8 c)
{
delay(1);
rs=0;
rw=0;
e=0;
P0=c;
e=1;
delay(1);
e=0;
}
void wrd(uint8 dat)
{
delay(1);
rs=1;
rw=0;
e=0;
P0=dat;
e=1;
delay(1);
e=0;
rs=0;
}
void init()
{
delay(1);
wrc(0x38);
wrc(0x38);
wrc(0x38);
wrc(0x06);
wrc(0x0c);
wrc(0x01);
}
屏幕顯示有了,就可以對其他模塊進行設計,按鍵和ADC優先級差不多,所以可以隨意的選擇,這里優先對ADC0832模塊進行設計,代碼如下:
unsigned char A_D(unsigned char CH) //AD函數
{
unsigned char i,adval,test; //定義局部變量并初始化
adval=0x00;
test=0x00;
Clk=0; //clk低電平
DI=1; //DI初始高電平在第一個時鐘脈沖的下降沿前保持高電平,表示啟動信號
_nop_();
CS=0; //片選
_nop_();
Clk=1; //clk上升沿,起始位寫入
_nop_();
if(CH==0x00) //選擇通道0
{
Clk=0; //clk低電平
DI=1;
_nop_();
Clk=1; //clk上升沿,通道0的第一位寫入
_nop_();
Clk=0;
DI=1;
_nop_();
Clk=1; //clk上升沿,通道0的第二位寫入
_nop_();
}
else
{
Clk=0;
DI=1;
_nop_();
Clk=1; //clk上升沿,通道1的第一位寫入
_nop_();
Clk=0;
DI=1;
_nop_(); //clk上升沿,通道1的第二位寫入
Clk=1;
_nop_();
}
Clk=0;
DI=1;
for(i=0;i<8;i++)? ? ? ? ? //從高位向低位讀取八位AD值
{
_nop_();
adval<<=1;
Clk=1;
_nop_();
Clk=0;
if(DO)
adval|=0x01;
else
adval|=0x00;
}
for(i=0;i<8;i++)
{
test>>=1; //從低位向高位讀取八位AD值
if(DO)
test|=0x80;
else
test|=0x00;
_nop_();
Clk=1;
_nop_();
Clk=0;
}
if(adval==test) dat=test; //判斷兩個讀取值是否相等相等就把讀取的數賦值給DAT
_nop_();
CS=1;
DO=1;
Clk=1;
return dat;
}
最后來對矩陣鍵盤進行設計,這個也是比較簡單的,一般學過單片機的都了解,代碼如下:
uint8 keyscan() //按鍵掃描程序
{
uint8 h,l,value;
P1=0x0f;
h=P1&0x0f;
if(h!=0x0f)
{
delay(1);
if(h!=0x0f)
{
h=P1&0x0f;
l=P1|0xf0;
P1=l;
l=P1&0xf0;
h=P1&0x0f;
value=h+l;
}
return value;
}
}
驅動都由了,最后就是實現邏輯了,由于邏輯代碼有點多,這里就不貼出來了,最后來看一看效果吧!
審核編輯:湯梓紅
聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。
舉報投訴
-
AT89C51
+關注
關注
27文章
543瀏覽量
81184 -
電子稱
+關注
關注
1文章
26瀏覽量
12261 -
LCD1602
+關注
關注
14文章
607瀏覽量
52576 -
adc0832
+關注
關注
3文章
83瀏覽量
28398
發布評論請先 登錄
相關推薦
lcd1602+ADC0832電子稱程序和仿真圖
本帖最后由 gk320830 于 2015-3-4 14:22 編輯
lcd1602+ADC0832電子稱程序和仿真圖
發表于 06-03 21:48
基于89C51+LCD1602+PCF8591有毒氣體濃度報警器仿真與源程序
基于89C51+LCD1602+PCF8591有毒氣體濃度報警器
內涵 實物圖 原理圖 源程序
發表于 01-11 17:31
?23次下載
使用51單片機和ADC0832設計LCD1602顯示數字電壓表的電路圖和程序
本文檔的主要內容詳細介紹的是使用51單片機和ADC0832設計LCD1602顯示數字電壓表的電路圖和程序資料合集免費下載。
發表于 08-07 08:00
?96次下載
使用89C51單片機實現LCD1602和LCD12864的顯示電路原理圖
本文檔的主要內容詳細介紹的是使用89C51單片機實現LCD1602和LCD12864的顯示電路原理圖。
發表于 03-05 08:00
?23次下載
使用51單片機和ADC0832應用LCD1602的程序和仿真資料
本文檔的主要內容詳細介紹的是使用51單片機和ADC0832應用LCD1602的程序和仿真資料。
發表于 06-30 17:34
?60次下載
LCD1602和DS18B20及ADC0832的程序和仿真工程文件免費下載
本文檔的主要內容詳細介紹的是LCD1602和DS18B20及ADC0832的程序和仿真工程文件免費下載。
發表于 07-24 17:30
?31次下載
51單片機驅動LCD1602顯示原理及例程
①LCD1602A 可以顯示兩行字符,一行顯示16個;②只能顯示數字和字母(5X7的點陣)不能顯示漢字;③每個字符之間有間隔;④引腳圖2.LCD1602A中文手冊 下載3.LCD1602A接線4.
發表于 11-10 19:51
?149次下載
51單片機采用ADC0808檢測ADC_LCD1602顯示
51單片機采用ADC0808檢測ADC_LCD1602顯示系統整體設計具體實現如下代碼系統整體設計1)本設計的控制器采用
發表于 11-17 16:06
?38次下載
51單片機多路測溫報警系統(AT89C51、多個DS18B20、LCD1602)
51單片機多路測溫報警系統(AT89C51、多個DS18B20、LCD1602)一、簡介** 此系統主要由AT89C51、多個DS18B20溫度模塊和
發表于 11-21 11:06
?19次下載
單片機液晶滾動顯示(AT89C51、LCD1602)
單片機液晶滾動顯示(AT89C51、LCD1602)一、簡介此電路由AT89C51最小系統和LCD1602液晶模塊組成??蓪崿F上線垂直滾動、左右滾動和播放暫停。二、執行效果上下滾動左右
發表于 11-23 16:51
?43次下載
STC89C52_51單片機_LCD1602液晶
STC89C52_51單片機_LCD1602液晶簡單顯示實例顯示:Pretty Girl i Love u#include<reg52.h>#define
發表于 11-23 17:06
?20次下載
評論