51 單片機 +18B20顯示程序+74HC164擴展顯示數碼管
#include
#include "intrins.h" //_nop_();延時函數用
#define uchar unsigned char
#define uint unsigned int
//================18b20數據口定義===============
uint temp; // 定義一個16位變量用于COPY數據
sbit DQ = P2^6;
char flash,presence;
uint temp1,temp2; //讀出溫度暫放
uchar s1,s2,s3,s4; //顯示單元數據,共6個數據和一個運算暫用
//=======164端口定義==========
sbit ge=P2^5; //個位
sbit shi=P2^4; //十位
sbit bai=P2^3; //百位
sbit qian=P2^2; //千位
sbit clk=P2^1; //164時鐘線
sbit data1=P2^0; //164數據線
sbit a0=ACC^0; //累加器
uchar code LED[10]={ //不帶小數點的代碼表
0xC0,0xF9,0xA4,0xB0,0x99,
0x92,0x82,0xF8,0x80,0x90,};
uchar code led1[10]={ //帶小數點的代碼表
0x40,0x79,0x24,0x30,0x19,
0x12,0x2,0x78,0x0,0x10,};
//======164數據轉換程序=======
void chuanshu164(uchar data_buf)
{
uchar i;
ACC=data_buf; //數據送累加器
for(i=8;i>0;i--)
{
clk=0;
data1=a0;
clk=1;
ACC=ACC>>1;
}
clk=0;
}
/*****************延時函數*************************/
void delay(uint t)
{
for (;t>0;t--);
_nop_();
}
//========顯示4位數碼管函數===========
void xianshi(uint shu)
{
uchar ss;
for(ss=10;ss>0;ss--)
{
uint wei1,wei2,wei3,wei4;
wei1=shu/1000; //將千位分離
wei2=shu%1000/100; //將百位分離
wei3=shu%100/10; //將十位分離
wei4=shu%10; //將個位分離
chuanshu164(led[wei1]); //顯示第一位數碼管
qian=0;
delay(200);
qian=1;
chuanshu164(led[wei2]); //顯示第二位數碼管
bai=0;
delay(200);
bai=1;
chuanshu164(led1[wei3]); //顯示第三位數碼管
shi=0;
delay(200);
shi=1;
chuanshu164(led[wei4]); //顯示第四位數碼管
ge=0;
delay(200);
ge=1;
//}
}
}
//=================18b20相關函數開始==============
/****************DS18B20復位函數************************/
ow_reset(void)
{
char presence=1;
while(presence)
{
while(presence)
{
DQ=1;_nop_();_nop_(); //從高拉倒低
DQ=0;
delay(550); //550 us
DQ=1;
delay(66); //66 us
presence=DQ; //presence=0 復位成功,繼續下一步
}
delay(500); //延時500 us
presence=~DQ;
}
DQ=1; //拉高電平
}
/****************DS18B20寫命令函數************************/
void write_byte(uchar val) //向1-WIRE 總線上寫1個字節
{
uchar i;
for(i=8;i>0;i--)
{
DQ=1;_nop_();_nop_(); //從高拉倒低
DQ=0;_nop_();_nop_();_nop_();_nop_(); //5 us
DQ=val&0x01; //最低位移出
delay(66); //66 us
val=val/2; //右移1位
}
DQ=1;
delay(10);
}
//
/****************DS18B20讀1字節函數************************/
uchar read_byte(void) //從總線上取1個字節
{
uchar i;
uchar value=0;
for(i=8;i>0;i--)
{
DQ=1;_nop_();_nop_();
value>>=1;
DQ=0;_nop_();_nop_();_nop_();_nop_(); //4 us
DQ=1;_nop_();_nop_();_nop_();_nop_(); //4 us
if(DQ)value|=0x80;
delay(66); //66 us
}
DQ=1;
return(value);
}
/****************讀出溫度函數************************/
read_temp()
{
ow_reset(); //總線復位
write_byte(0xcc); //發命令
write_byte(0x44); //發轉換命令
ow_reset();
delay(1);
write_byte(0xcc); //發命令
write_byte(0xbe);
temp1=read_byte(); //讀溫度值的低字節
temp2=read_byte(); //讀溫度值的高字節
temp=(temp2*256+temp1)*0.625;
return temp; //返回溫度值
}
//=================18b20相關函數結束==============
//=================主函數=========================
void main(void)
{
ow_reset(); //開機先轉換一次
write_byte(0xcc); //Skip ROM
write_byte(0x44); //發轉換命令
while(1)
{
xianshi(read_temp());
//xianshi(read_temp());
//xianshi(read_temp());
//delay(500);
}
}
上一篇:89c51六首歌曲的音樂門鈴程序
下一篇:讀內部R/C時鐘及ID號C語言參考程序
推薦閱讀
史海拾趣
DEMMELPRODUCTS公司深知人才是企業發展的根本。因此,公司始終注重人才培養和團隊建設。通過制定科學的培訓計劃和激勵機制,公司吸引了一批優秀的研發、生產和銷售人才。同時,公司還鼓勵員工之間進行知識和經驗的分享與交流,形成了積極向上的團隊氛圍。這些優秀的人才和團隊為公司的發展提供了有力的支持。
在電子行業的發展過程中,Abbatron公司也面臨著各種挑戰和危機。某年,由于原材料價格的大幅上漲和市場競爭的加劇,公司面臨著巨大的經營壓力。然而,Abbatron公司憑借其強大的研發實力和敏銳的市場洞察力,及時調整戰略,通過優化生產流程和降低成本等措施,成功度過了危機。
面對電子行業供應鏈復雜多變的挑戰,Gem Asia積極實施供應鏈優化和數字化轉型戰略。公司引入先進的ERP系統和物聯網技術,實現了從原材料采購、生產制造到物流配送的全鏈條數字化管理。這一舉措不僅提高了生產效率和產品質量,還降低了運營成本,增強了企業的市場競爭力。同時,Gem Asia還加強了與上下游企業的合作,共同構建了一個高效協同的供應鏈生態系統。
2014年,ACAM公司迎來了一個重要的里程碑事件——被奧地利微電子股份有限公司收購。這次收購極大地增強了ACAM公司在時間數字轉換器(TDC)技術領域的實力。奧地利微電子在半導體行業有著深厚的積累和豐富的經驗,與ACAM公司的技術優勢相結合,進一步提升了ACAM公司在市場上的競爭力。
隨著業務的發展,Austek Microsystems逐漸意識到,單憑自身的力量難以在市場中取得長遠的發展。因此,公司開始積極尋求與業內知名企業的合作。通過與這些企業的深入合作,Austek Microsystems不僅獲得了更多的技術支持和市場資源,還成功將自身的產品推向了更廣闊的市場。
Austek Microsystems成立之初,便以研發創新為核心驅動力。面對競爭激烈的市場環境,公司團隊憑借深厚的技術積累,成功開發出了一款具有高性能和低功耗特點的微控制器芯片。這款芯片不僅滿足了當時市場對高效能計算的需求,也為Austek Microsystems在電子行業中贏得了初步的市場認可。
書名:MOTOROLA J, K系列廉價單片機原理及應用 作者:余永權/林偉 出版社:北京航空航天大學出版社 頁數:217 出版日期:1998-12-1 簡介:單片機在工業控制、汽車、儀器、家用電器、玩具、計算機外部設備、航空航天、交通運輸、通信等領域都有廣泛的 ...… 查看全部問答∨ |
關于“U1050: Required macro SOURCES=。。。”的錯誤 具體情況如下,我在顯示驅動代碼實現中調用背光驅動,顯示驅動代碼中導入了背光驅動的LIB文件,后面具體調用過程省略。 #include "VGAoutpch.h" #include "CH702X.h" #include "bsp_backlight.h" #pragma comment(lib,"backlight ...… 查看全部問答∨ |
小弟剛找到份工作 接到一個任務 BOSS給了塊SIM300實驗板 讓我看AT命令 還讓我用C程序實現撥通這個實驗板 其實我還不是很明白我要做什么 又該是如何實現呢 望大蝦不惜賜教~… 查看全部問答∨ |
|
本帖最后由 ddllxxrr 于 2016-1-7 17:12 編輯 本站強薦:185娛樂x城.足球x真_人.彩票齊全x手機可投x注任何游戲. 首次開戶送10元.首存送58元.信譽絕對保證185.cc … 查看全部問答∨ |
|
硬件狀況:開發板一塊,自制板卡一塊 調試情況說明:串口配置如下: USART_ClockInitStructure.USART_Clock = USART_Clock_Disable; USART_ClockInitStructure.USART_CPOL = USART_CPOL_Low; USART_ ...… 查看全部問答∨ |
|
#include <msp430g2231.h> unsigned int a=0,p=1; void delay(int x) { int i,j; for(i=0;i<=x;i++) for(j=0;j<=x;j++); } void initial() { &nb ...… 查看全部問答∨ |
printf 和scanf函數是C語言中最常用的輸入出函數,從學習C語言開始,就開始使用這兩個函數,然而當寫用C語言寫單片機程序時卻不能使用這兩個函數,總覺得單片機的C語言和一般的C語言差別很大,寫起來不大方便;其實,單片機的C語言也是標準C語言上 ...… 查看全部問答∨ |