#include
#include
sbit RST = P2^0;
sbit CLK = P2^1;
sbit DQ = P2^2;
sbit TSOR = P2^3;
sbit ALERT =P2^4;
sbit RS = P2^7;
sbit RW = P2^6;
sbit EN = P2^5;
/*------------------------------------------全局變量-------------------------------------------------------*/
statIC unsigned char temp1,temp2; //溫度值的整數(shù)部分、小數(shù)部分
static unsigned char pos,posset; //數(shù)字電位器電位值、設(shè)定值
static unsigned char min,sec; //分鐘、秒
static unsigned char count; //Timer0中斷計(jì)數(shù)
static unsigned char minset; //設(shè)定的分鐘數(shù)
static unsigned char status1,status2; //狀態(tài)標(biāo)志
bit stop,timeover; //定時(shí)停止、結(jié)束
static char line0[] =" 00:00 ";
static char line1[] =" . C W";
/*-------------------------------------------------------------------------------------------------------------*/
void InitInterupt();
void KeyboardDelay();
/*-------------------------------------------LCD驅(qū)動(dòng)函數(shù)------------------------------------------------*/
void DelayL();
void DelayS();
void WriteCommand(unsigned char c);
void WritEDAta(unsigned char c);
void ShowChar(unsigned char pos,unsigned char c);
void ShowString(unsigned char line,char *ptr);
void InitLcd();
/*----------------------------------------------鍵盤-程序--------------------------------------------------*/
unsigned char GetKey();
/*---------------------------------------------數(shù)字溫度計(jì)驅(qū)動(dòng)-------------------------------------------*/
void ChangePos(bit sel,unsigned char pos1,unsigned char pos2);
/*------------------------------------------溫度傳感器驅(qū)動(dòng)----------------------------------------------*/
void Delay15();
void Delay60();
void Delay100ms();
void Write0TS();
void Write1TS();
bit ReaDTS();
void ResetTS();
void WriteByteTS(unsigned char byte);
unsigned char ReadByteTS();
void InitTS();
void GetTempTS();
/*-------------------------------------------------主程序---------------------------------------------------*/
void main (void) {
char code str1[] =" Hello World! ";
char code str2[] =" 2002-10-20 ";
unsigned char i;
SP=0x50;
ALERT=0; //報(bào)警燈滅
TSOR=1; //1-wire總線釋放
DelayL();
InitLcd(); //初始化LCD
DelayL();
ShowString(0,str1); //啟動(dòng)畫面
ShowString(1,str2);
for(i=0;i<15;i++)
Delay100ms();
InitInterupt(); //初始化中斷設(shè)置
minset=10; //缺省定時(shí)10分鐘
posset=0; //缺省電位器值0
min=minset; //初始化數(shù)據(jù)
pos=posset;
sec=0;
count=0;
P1=0xF0;
status1=0;
status2=0;
stop=1;
timeover=0;
ChangePos(0,255-pos,255-pos); //設(shè)置電位器
InitTS(); //初始化溫度計(jì)
while(1) //循環(huán)顯示溫度值
{
GetTempTS();
line1[0]=0x20;
i=temp1;
if(i>39) //超過40攝氏度,告警燈亮
ALERT=1;
if(i>99) //超過100攝氏度,顯示溫度的百位
{
line1[0]=0x31;
i-=100;
}
line1[1]=i/10+0x30; //顯示溫度的十位
line1[2]=i%10+0x30; //顯示個(gè)位
line1[4]=temp2+0x30; //顯示小數(shù)位
if(timeover) //若定時(shí)結(jié)束,則電位器緩慢復(fù)0
{
for(;pos>0;pos--)
{
ChangePos(0,255-pos,255-pos);
_nop_();
_nop_();
}
timeover=0;
posset=0;
}
if(pos>posset) //若按鍵修改電位器位置
{
for(;pos>posset;pos--) //則緩變到設(shè)定值
{
ChangePos(0,255-pos,255-pos);
_nop_();
_nop_();
}
ChangePos(0,255-pos,255-pos);
}
else if(pos
for(;pos
ChangePos(0,255-pos,255-pos);
_nop_();
_nop_();
}
ChangePos(0,255-pos,255-pos);
}
i=pos;
line1[9]=0x20; //顯示電位器等級(jí)值
if(i>99)
{
line1[9]=i/100+0x30;
i=i%100;
}
line1[10]=i/10+0x30;
line1[11]=i%10+0x30;
ShowString(1,line1);
line0[5]=min/10+0x30; //顯示時(shí)間
line0[6]=min%10+0x30;
line0[8]=sec/10+0x30;
line0[9]=sec%10+0x30;
ShowString(0,line0);
Delay100ms();
}
}
void InitInterupt()
{
TMOD=0x21; //初始化中斷設(shè)置
TL1=0xFD;
TH1=0xFD;
PX0=1;
EA=1;
ES=1;
PCON=0;
TR1=1;
SCON=0x50;
TL0=0x00; //定時(shí)0.05m
TH0=0x4C;
ET0=1;
EX0=1;
IT0=1;
}
void KeyboardDelay() //按鍵中斷延時(shí)
{
unsigned char i,j;
i=0x40;
j=0xFF;
while(i--)
while(j--);
}
/*--------------------------------------------中斷處理-----------------------------------------------------*/
Int0_process() interrupt 0 using 0
{
unsigned char key;
unsigned char keycode[]= "TP";
unsigned char step[3]={1,2,5};
EA=0;
key=GetKey(); //獲得按鍵值
switch(key)
{
case 0:
stop=!stop;
min=minset;
sec=0;
break;
case 1:
case 2:
case 3:
if(stop)
{
minset+=step[key-1];
if(minset>60)
minset=0;
min=minset;
}
break;
case 5:
case 6:
case 7:
if(stop)
{
minset-=step[key-5];
if(minset>60)
minset=0;
min=minset;
}
break;
case 9:
case 10:
case 11:
posset+=step[key-9];
break;
case 13:
case 14:
case 15:
posset-=step[key-13];
break;
default:
break;
}
TR0=!stop;
KeyboardDelay();
P1=0xF0;
EA=1;
}
Timer0_process() interrupt 1 using 0
{
EA=0;
TR0=0;
TL0=0x00;
TH0=0x4C;
count++;
if(count==20) //如果到累計(jì)定時(shí)到達(dá)1s
{
if(sec==0) //定時(shí)處理
{
if(min==0) //總定時(shí)到,則置結(jié)束標(biāo)志
timeover=1;
else
{
min--;
sec=59;
}
}
else
sec--;
count=0;
}
TR0=1;
EA=1;
}
/*--------------------------------------LCD驅(qū)動(dòng)子程序--------------------------------------------------*/
void DelayL()
{unsigned char i,j;
i=0xF0;
j=0xFF;
while(i--)
while(j--);
}
void DelayS()
{
unsigned char i;
i=0x1F;
while(i--);
}
void WriteCommand(unsigned char c)
{
DelayS();
EN=0;
RS=0;
RW=0;
_nop_();
EN=1;
P0=c;
EN=0;
}
void WriteData(unsigned char c)
{
DelayS();
EN=0;
RS=1;
RW=0;
_nop_();
EN=1;
P0=c;
EN=0;
RS=0;
}
void ShowChar(unsigned char pos,unsigned char c)
{
unsigned char p;
if(pos>=0x10)
p=pos+0xB0;
else
p=pos+0x80;
WriteCommand(p);
WriteData(c);
}
void ShowString(unsigned char line,char *ptr)
{
unsigned char l,i;
l=line<<4;
for(i=0;i<16;i++)
ShowChar(l++,*(ptr+i));
}
void InitLcd()
{
DelayL();
WriteCommand(0x38);
WriteCommand(0x38);
WriteCommand(0x06);
WriteCommand(0x0C);
WriteCommand(0x01);
WriteCommand(0x80);
}
/*---------------------------------------------鍵盤子程序-------------------------------------------------*/
unsigned char GetKey()
{
unsigned k,t,i,j;
k=P1;
k=k&0xF0;
i=0;
while((k&0x10)&&i<4)
{
i++;
k=k>>1;
}
k=0x01;
j=0;
while(j<4)
{
P1=0xFF^k;
_nop_();
t=P1;
t=t^0xFF;
t=t&0xF0;
if(t)
break;
j++;
k=k<<1;
}
k=j*4+i;
return k;
}
/*-----------------------------------------數(shù)字溫度計(jì)驅(qū)動(dòng)子程序--------------------------------------*/
void ChangePos(bit sel,unsigned char pos1,unsigned char pos2)
{ unsigned char i;
RST=0;
DQ=0;
CLK=0;
RST=1;
DQ=sel;
_nop_();
CLK=1;
_nop_();
CLK=0;
for(i=0;i<8;i++)
{
if(pos1&0x80)
DQ=1;
else
DQ=0;
_nop_();
CLK=1;
_nop_();
CLK=0;
pos1=pos1<<1;
}
for(i=0;i<8;i++)
{
if(pos2&0x80)
DQ=1;
else
DQ=0;
_nop_();
CLK=1;
_nop_();
CLK=0;
pos2=pos2<<1;
}
RST=0;
}
/*------------------------------------------溫度傳感器子程序-------------------------------------------*/
void Delay100ms() //延時(shí)100ms
{
unsigned char i,j,k;
for(i=0;i<8;i++)
for(j=0;j<25;j++)
for(k=0;k<250;k++);
}
void Delay15() //延時(shí)15us
{
unsigned char i;
for(i=0;i<8;i++);
}
void Delay60() //延時(shí)60us
{
unsigned char i;
for(i=0;i<30;i++);
}
void Write0TS() //寫bit 0
{
TSOR=1;
TSOR=0;
Delay15();
Delay15();
Delay15();
Delay15();
TSOR=1;
_nop_();
_nop_();
}
void Write1TS() //寫bit 1
{
TSOR=1;
TSOR=0;
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
TSOR=1;
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
Delay15();
Delay15();
Delay15();
}
bit ReadTS()
{
bit b;
TSOR=1;
TSOR=0;
_nop_();
_nop_();
_nop_();
_nop_();
TSOR=1;
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
b=TSOR;
Delay15();
Delay15();
Delay15();
_nop_();
_nop_();
return b;
}
void ResetTS() //復(fù)位
{unsigned char i;
TSOR=1;
TSOR=0;
for(i=0;i<8;i++)
Delay60();
TSOR=1;
while(TSOR);
for(i=0;i<8;i++)
Delay60();
}
void WriteByteTS(unsigned char byte) //寫一個(gè)字節(jié)(byte)
{unsigned char i;
for(i=0;i<8;i++)
{
if(byte&0x01)
Write1TS();
else
Write0TS();
byte=byte>>1;
}
}
unsigned char ReadByteTS() //讀一個(gè)字節(jié)(byte)
{
unsigned char i,j;
bit b;
j=0;
for(i=0;i<8;i++)
{
b=ReadTS();
if(b)
j+=1;
j=_cror_(j,1);
}
return j;
}
void InitTS() //初始化溫度轉(zhuǎn)換
{
ResetTS();
WriteByteTS(0xCC);
WriteByteTS(0x4E);
WriteByteTS(0x64);
WriteByteTS(0x8A);
WriteByteTS(0x1F);
}
void GetTempTS() //獲取溫度
{
ResetTS();
WriteByteTS(0xCC);
WriteByteTS(0x44);
Delay100ms();
ResetTS();
WriteByteTS(0xCC);
WriteByteTS(0xBE);
temp2=ReadByteTS();
temp1=ReadByteTS();
ReadByteTS();
ReadByteTS();
ReadByteTS();
ReadByteTS();
ReadByteTS();
ReadByteTS();
ReadByteTS();
temp1=temp1<<4;
temp1+=(temp2&0xF0)>>4;
temp2=(temp2&0x0F)?5:0;
}
液晶顯示溫度計(jì)程序
上一篇:單片機(jī)與PC機(jī)串口通訊程序
下一篇:PCF8563時(shí)鐘程序
推薦閱讀
史海拾趣
福祿克公司成立于1948年,初期專注于電氣測試工具的研發(fā)與生產(chǎn)。創(chuàng)始人敏銳地察覺到,隨著戰(zhàn)后全球工業(yè)化的加速,對(duì)高質(zhì)量電氣測試工具的需求將急劇增長。公司投入大量資源于技術(shù)研發(fā),成功推出了首款高精度數(shù)字萬用表,這一創(chuàng)新產(chǎn)品迅速在市場上占據(jù)一席之地,為福祿克奠定了技術(shù)創(chuàng)新的基石。此后,福祿克不斷推出新品,如熱成像儀、絕緣電阻測試儀等,持續(xù)引領(lǐng)行業(yè)技術(shù)潮流。
隨著半導(dǎo)體行業(yè)的競爭加劇,價(jià)格戰(zhàn)和技術(shù)更新速度不斷加快。CSDC面臨著巨大的市場壓力。為了應(yīng)對(duì)這些挑戰(zhàn),公司決定調(diào)整戰(zhàn)略,專注于高端市場的開發(fā)。通過加大研發(fā)投入,提升產(chǎn)品質(zhì)量和性能,CSDC逐漸在高端市場站穩(wěn)了腳跟,實(shí)現(xiàn)了業(yè)務(wù)的穩(wěn)步增長。
Daewoo公司最初由金宇中于1967年創(chuàng)建,起始于一個(gè)規(guī)模不大的紡織廠。然而,金宇中并不滿足于紡織業(yè)的局限,他敏銳地察覺到了韓國經(jīng)濟(jì)快速發(fā)展的機(jī)遇。于是,Daewoo公司逐漸擴(kuò)展業(yè)務(wù)領(lǐng)域,70年代側(cè)重發(fā)展化學(xué)工業(yè),80年代后更是進(jìn)軍汽車、電子和重工業(yè)領(lǐng)域,并積極參與國外資源的開發(fā)。這種前瞻性的戰(zhàn)略布局,為Daewoo公司的快速發(fā)展奠定了基礎(chǔ)。
隨著技術(shù)的不斷成熟和產(chǎn)品的市場推廣,F(xiàn)ractus逐漸獲得了業(yè)界的廣泛認(rèn)可。公司在多個(gè)國際展會(huì)上展示了其創(chuàng)新的天線技術(shù),并贏得了多項(xiàng)重要獎(jiǎng)項(xiàng),包括歐洲聯(lián)盟IST獎(jiǎng)項(xiàng)的特等獎(jiǎng)等。這些榮譽(yù)不僅提升了Fractus的品牌知名度,也進(jìn)一步鞏固了其在天線技術(shù)領(lǐng)域的領(lǐng)先地位。
本人下載了VIVI,現(xiàn)在疑問,它是在什么IDE編譯的。我系統(tǒng)是XP的,我用ADS或者M(jìn)DK也可以編譯它吧。 我的目的是想自己編譯出boot 的bin文件下載到nandflash中去。 請(qǐng)高手指點(diǎn)一二,小弟將不勝感激… 查看全部問答∨ |
|
好像IE把windows目錄設(shè)置為cache了,下載大的mp3/rar文件出現(xiàn)空間不足。其實(shí)我外部有SD卡 修改了registry,設(shè)置cache為外部,還是不行 … 查看全部問答∨ |
|
I2C_Config IIC_Configt ={ 0,//主模式 0, (20-5),//scl low time (20-5), 1, 0,  ...… 查看全部問答∨ |
MSP430FG461X系列的20位地址指針在C語言中如何實(shí)現(xiàn)? 我把一個(gè)20位的地址0x10000,賦值給一個(gè)指針變量時(shí),總是提示超出了0~0xFFFF的范圍。 在匯編中這是可以做到的,因?yàn)镸SP430X提供了MOVA等帶A的指令,且工作寄存器都是20位的,可以用于20位的地址傳輸。就是不知道C語言中怎么實(shí)現(xiàn)。 不知是不是有 ...… 查看全部問答∨ |
請(qǐng)教定時(shí)器中斷的問題(一直都查不到資料,麻煩高手指點(diǎn)) 問題1:一般在主函數(shù)中裝定時(shí)器初值,有必要嗎?我好像試了,不裝也能正常運(yùn)行。 問題2:如果在定時(shí)器1中關(guān)閉了定時(shí)器0,用TR0=1再次打開定時(shí)器0時(shí),需要重新裝定時(shí)器0的初值嗎?還是TR0=1直接就進(jìn)入定時(shí)器0的中斷函數(shù)從頭開始執(zhí)行。我試過兩次不 ...… 查看全部問答∨ |
FPGA的IO量很大,如果不是特殊用途的話,很多IO都基本是一致的,在FPGA與存儲(chǔ)器等等外圍芯片連接的時(shí)候,為了方便布線,會(huì)對(duì)IO管腳的分配進(jìn)行調(diào)整,這種調(diào)整大家是怎么做的呢?大家用的是啥PCB工具呢?… 查看全部問答∨ |
請(qǐng)您幫我看看這個(gè)電路中的兩個(gè)疑問 謝謝 大家有誰知道發(fā)射級(jí)的電感作用是什么?另外,還請(qǐng)高手賜教一下這個(gè)調(diào)幅電路的放大倍數(shù)應(yīng)該是多少,我是新手 這方面還請(qǐng)大家多多給予指導(dǎo)幫助,謝謝您。… 查看全部問答∨ |
設(shè)計(jì)資源 培訓(xùn) 開發(fā)板 精華推薦
- Microchip 升級(jí)數(shù)字信號(hào)控制器(DSC)產(chǎn)品線 推出PWM 分辨率和 ADC 速度業(yè)界領(lǐng)先的新器件
- 意法半導(dǎo)體STM32MP23x:突破成本限制的工業(yè)AI應(yīng)用核心
- 意法半導(dǎo)體推出用于匹配遠(yuǎn)距離無線微控制器STM32WL33的集成的匹配濾波芯片
- ESP32開發(fā)板連接TFT顯示屏ST7789跳坑記
- 如何讓ESP32支持analogWrite函數(shù)
- LGVL配合FreeType為可變字體設(shè)置字重-ESP32篇
- 使用樹莓派進(jìn)行 ESP32 Jtag 調(diào)試
- ESP32怎么在SPIFFS里面存儲(chǔ)html,css,js文件,以及網(wǎng)頁和arduino的通訊
- ESP32 freeRTOS使用測試
- 上汽大眾:汽車網(wǎng)絡(luò)安全漏洞防護(hù)
- 恩智浦推出全新電池控制IC系列 助力新能源解決方案發(fā)展
- 全球首條GWh級(jí)新型固態(tài)電池生產(chǎn)線樣件下線
- 總投資455億元!三大動(dòng)力電池項(xiàng)目齊刷進(jìn)度條
- 現(xiàn)代汽車韓國建氫燃料電池廠,2028年投產(chǎn)
- 6月融資一覽:智能汽車芯片、第三代半導(dǎo)體、機(jī)器人成資本焦點(diǎn)
- 艙駕一體“點(diǎn)燃”新戰(zhàn)事
- 汽車智能化2.0引爆「萬億蛋糕」,誰在改寫游戲規(guī)則?
- 2025研華智能系統(tǒng)產(chǎn)業(yè)伙伴峰會(huì)成功舉辦
- 意法半導(dǎo)體公布2025年第二季度財(cái)報(bào)和電話會(huì)議時(shí)間安排
- ADI有獎(jiǎng)下載活動(dòng)之2——太陽能光伏發(fā)電解決方案
- 【EEWORLD第三十七屆】2012年04月社區(qū)明星人物揭曉!
- 高性能手機(jī)設(shè)計(jì)如何實(shí)現(xiàn)?手機(jī)高校評(píng)估研討會(huì)為您揭曉答案!
- 關(guān)注 PI 最新 SCALE-iDriver IC產(chǎn)品系列 答題有好禮!
- 月度原創(chuàng)精選評(píng)選2018年2月(總第2期)
- 免費(fèi)申請(qǐng)TI 樣片, 曬訂單贏好禮!
- 報(bào)名有禮:【TI C2000在實(shí)時(shí)控制系統(tǒng)中的新特性】網(wǎng)絡(luò)直播誠邀您參與!
- 報(bào)名直播贏【手環(huán)、攝像頭、雨傘、手機(jī)支架】羅德與施瓦茨USB 3.2一致性測試
- 有獎(jiǎng)直播|英飛凌OBC解決方案深度詳解 報(bào)名中!
- Qorvo 電源技術(shù)站 來了!方案、應(yīng)用一站下載!
- 最全iPhone12系列規(guī)格售價(jià)匯總
- 我國首臺(tái)芯片與操作系統(tǒng)全自研的國產(chǎn)計(jì)算機(jī)成功下線
- 榮耀兩款新機(jī)都搭載天璣800,發(fā)布會(huì)為何只字未提
- 法國表示:不會(huì)完全禁用華為5G網(wǎng)絡(luò)設(shè)備
- 工業(yè)富聯(lián)計(jì)劃斥資5.6億元購買鼎捷軟件15.19%股份
- 三星物聯(lián)網(wǎng)一年投140億美元 讓連接設(shè)備都實(shí)現(xiàn)智能化
- 推動(dòng)物聯(lián)網(wǎng)產(chǎn)業(yè)縱深發(fā)展的要素
- 三相步進(jìn)電機(jī)驅(qū)動(dòng)電路
- 51單片機(jī)16*16LED點(diǎn)陣滾動(dòng)顯示
- CES 2018來了!最酷炫的物聯(lián)網(wǎng)解決方案就在Qorvo展臺(tái)
- 華大單片機(jī)深度休眠時(shí)RTC與LPUART同時(shí)工作設(shè)置方法
- 這個(gè)電路圖中的電容代表什么類型的電容
- Holtek 推出話中插撥信號(hào)接收器
- EPSON R310的對(duì)管C5888 A2099能用什么三極管代換?
- 哈!今天意法打我電話了,說有個(gè)快遞要給我,是我申請(qǐng)的
- 關(guān)于氙氣燈啟動(dòng)的幾個(gè)疑惑
- 9.9新dspf28335漢遠(yuǎn)旗艦出手
- 哪位大哥有MPC8548 VxWorks下的BSP包
- 繼續(xù)放RealTouch資料,這次精致很多
- windbg 中 如何自動(dòng)使用 sxe 命令?