新聞中心

EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 51hei開發(fā)板+手機(jī)TFT彩屏+1302時(shí)鐘+溫度

51hei開發(fā)板+手機(jī)TFT彩屏+1302時(shí)鐘+溫度

作者: 時(shí)間:2012-08-24 來源:網(wǎng)絡(luò) 收藏

時(shí)間:2011年3月26號(hào)

芯片:STC12C5A60S2, 當(dāng)采用stc89c52這類標(biāo)準(zhǔn)速度單片機(jī)的時(shí)候需要修改程序中的延時(shí)值

時(shí)鐘芯片:DS1302

傳感器:18B20

TFT彩屏:320X240 26萬色 8位數(shù)據(jù) 不帶觸摸控制器-ILI9325  

功能:只是簡(jiǎn)單的時(shí)間和顯示,適合初學(xué)者學(xué)習(xí)彩屏顯示。

點(diǎn)擊瀏覽下一頁

以上是本程序在51hei-5單片機(jī)開發(fā)板上的顯示效果,2.4寸的tft手機(jī)彩屏是直接插入板子12864接口的,要注意12864是20pin ,而我們生產(chǎn)的彩屏是18pin的,第一pin對(duì)第一pin故左邊會(huì)多出2個(gè)腳,大家千萬不要插錯(cuò)位了不然會(huì)燒毀的,由于篇幅有限以下僅僅列出主程序本程序完整代碼及hex文件下載:http://www.51hei.com/f/caip11.rar

主函數(shù):#include "STC.h"#include"18B20.h"#include"ILI9325.h"http://#include"anjian.h"#include"1302.h"http://======定義彩屏顯示的顏色,可以不定義,直接寫入16進(jìn)制代碼========////0xF800  //紅//0x07E0  //綠//0x001F  //藍(lán)//0xFFE0  //黃//0x0000  //黑//0xFFFF  //白//0xF81F  //紫紅色//0x7FFF  //青色//0x051F  //青藍(lán)//====================主函數(shù)=========================//void  main(void){   CS=1;delayms(10);RES=0;delayms(10);RES=1;delayms(10); ILI9325_Initial(); //彩屏初始化   ClearScreen(0x001F);   //清屏 while(1)       {       LCD_PutString(10+0, 10+40,  "",      0xFFE0,0x001F);    LCD_PutChar  (10+60,10+40,  '.',         0xFFE0,0x001F);       LCD_PutString(10+85,10+40,  "℃",        0xFFFF,0x001F);  LCD_PutString(10+0, 10,     "時(shí)間",      0xFFE0,0x001F);LCD_PutString(10+0, 10+20,  "日期",      0xFFE0,0x001F);Write_DS1302Init(); Run_DS1302(); //經(jīng)過調(diào)試,必須將溫度程序加入1302程序中,才能正常測(cè)溫。    // if((a==qian)(b==bai)(c==shi)(d==ge)(miao21)) { bi(500); }  //設(shè)定報(bào)警,響10秒鐘結(jié)束。  }  }    時(shí)鐘程序:#include "STC.h"#includeintrins.h>#define uchar unsigned char#define uint  unsigned intsbit T_CLK = P1^6; /*實(shí)時(shí)時(shí)鐘時(shí)鐘線引腳 */sbit T_IO = P3^5; /*實(shí)時(shí)時(shí)鐘數(shù)據(jù)線引腳 */sbit T_RST = P1^7; /*實(shí)時(shí)時(shí)鐘復(fù)位線引腳 */sbit ACC0 = ACC^0;sbit ACC7 = ACC^7;/********************************************************************* 名稱 :  v_RTInputByte()* 功能 :  往DS1302寫入1Byte數(shù)據(jù)* 輸入 :  ucDa 寫入的數(shù)據(jù)* 輸出 :  無***********************************************************************/void v_RTInputByte(uchar ucDa){uchar i;ACC = ucDa;T_RST = 1;for(i=8; i>0; i--){T_IO = ACC0;T_CLK = 1;T_CLK = 0;ACC = ACC >> 1;}}/********************************************************************* 名稱  :   uc_RTOutputByte()* 功能  :   從DS1302讀取1Byte數(shù)據(jù)* 輸入  : 無* 返回值:   ACC***********************************************************************/uchar uc_RTOutputByte(void) {uchar i;T_RST = 1;for(i=8; i>0; i--){ACC = ACC >>1;T_IO=1;ACC7 = T_IO;T_CLK = 1;T_CLK = 0;}return(ACC);}/********************************************************************* 名稱   :   v_W1302(uchar ucAddr, uchar ucDa)* 功能   :   往DS1302寫入數(shù)據(jù)* 輸入   :   ucAddr: DS1302地址, ucDa: 要寫的數(shù)據(jù)* 返回值 :   無***********************************************************************/void v_W1302(uchar ucAddr, uchar ucDa){T_RST = 0;T_CLK = 0;T_RST = 1;v_RTInputByte(ucAddr);   // 寫地址 _nop_();_nop_();v_RTInputByte(ucDa);     // 寫1Byte數(shù)據(jù)T_CLK = 1;T_RST = 0;}/********************************************************************* 名稱   :  uc_R1302(uchar ucAddr)* 功能   :  讀取DS1302某地址的數(shù)據(jù)* 輸入   :  ucAddr: DS1302地址* 返回值 :  ucDa :讀取的數(shù)據(jù)***********************************************************************/uchar uc_R1302(uchar ucAddr){uchar ucDa;T_RST = 0;T_CLK = 0;T_RST = 1;v_RTInputByte(ucAddr);    //寫地址,命令_nop_();_nop_();ucDa = uc_RTOutputByte(); //讀1Byte數(shù)據(jù)T_CLK = 1;T_RST = 0;return(ucDa);}/********************************************************************* 名稱   :  v_BurstW1302T* 功能   :  往DS1302寫入時(shí)鐘數(shù)據(jù)(多字節(jié)方式)* 輸入   :  pSecDa: 時(shí)鐘數(shù)據(jù)地址 格式為: 秒 分 時(shí) 日 月 星期 年 控制*          8Byte (BCD碼) 1B 1B 1B 1B 1B 1B  1B  1B* 返回值 :  無***********************************************************************/void v_BurstW1302T(uchar *pSecDa){uchar i;v_W1302(0x8e, 0x00);          //控制命令,WP=0,寫操作T_RST = 0;T_CLK = 0;T_RST = 1;v_RTInputByte(0xbe);          //0xbe:時(shí)鐘多字節(jié)寫命令for(i=8; i>0; i--)            //8Byte = 7Byte 時(shí)鐘數(shù)據(jù) + 1Byte 控制{v_RTInputByte(*pSecDa);   //寫1Byte數(shù)據(jù)pSecDa++;}T_CLK = 1;T_RST = 0;}/********************************************************************* 名稱   :  v_BurstR1302T(uchar *pSecDa)* 功能   :  讀取DS數(shù)據(jù)* 輸入   :  pSecDa: 時(shí)鐘數(shù)據(jù)地址 格式為: 秒 分 時(shí) 日 月 星期 年*             7Byte (BCD碼) 1B 1B 1B 1B 1B 1B   1B* 返回值 :  ucDa :讀取的數(shù)據(jù)***********************************************************************/void v_BurstR1302T(uchar *pSecDa){uchar i;T_RST = 0;T_CLK = 0;T_RST = 1;v_RTInputByte(0xbf);               //0xbf:時(shí)鐘多字節(jié)讀命令for(i=8; i>0; i--){*pSecDa = uc_RTOutputByte();   //讀1Byte數(shù)據(jù)pSecDa++;}T_CLK = 1;T_RST = 0;}/********************************************************************* 名稱   :  v_BurstW1302R(uchar *pReDa)* 功能   :  往DS1302寄存器數(shù)寫入數(shù)據(jù)(多字節(jié)方式)* 輸入   :  pReDa: 寄存器數(shù)據(jù)地址* 返回值 :  無***********************************************************************/void v_BurstW1302R(uchar *pReDa){uchar i;v_W1302(0x8e,0x00);         //控制命令,WP=0,寫操作T_RST = 0;T_CLK = 0;T_RST = 1;v_RTInputByte(0xfe);       //0xbe:時(shí)鐘多字節(jié)寫命令for(i=31; i>0; i--)        //31Byte 寄存器數(shù)據(jù){v_RTInputByte(*pReDa); //寫1Byte數(shù)據(jù)pReDa++;}T_CLK = 1;T_RST = 0;}/********************************************************************* 名稱   :  v_BurstR1302R(uchar *pReDa)* 功能   :  讀取DS1302寄存器數(shù)據(jù)* 輸入   :  pReDa: 寄存器數(shù)據(jù)地址* 返回值 :  無***********************************************************************/void v_BurstR1302R(uchar *pReDa){uchar i;T_RST = 0;T_CLK = 0;T_RST = 1;v_RTInputByte(0xff);            //0xbf:時(shí)鐘多字節(jié)讀命令for(i=31; i>0; i--)             //31Byte 寄存器數(shù)據(jù){*pReDa = uc_RTOutputByte(); //讀1Byte數(shù)據(jù)pReDa++;}T_CLK = 1;T_RST = 0;}/********************************************************************* 名稱  :  v_Set1302(uchar *pSecDa)* 功能  :  設(shè)置初始時(shí)間* 輸入  :  pSecDa: 初始時(shí)間地址。初始時(shí)間格式為: 秒 分 時(shí) 日 月 星期 年*            7Byte (BCD碼) 1B 1B 1B 1B 1B 1B  1B* 返回值: 無***********************************************************************/void v_Set1302(uchar *pSecDa){uchar i;uchar ucAddr = 0x80;v_W1302(0x8e, 0x00);            //控制命令,WP=0,寫操作for(i=7; i>0; i--){v_W1302(ucAddr, *pSecDa);   // 秒 分 時(shí) 日 月 星期 年pSecDa++;ucAddr += 2;}v_W1302(0x8e, 0x80);            //控制命令,WP=1,寫保護(hù)}/********************************************************************* 名稱   : v_Get1302(uchar ucCurtime[])* 功能   : 讀取DS1302當(dāng)前時(shí)間* 輸入   : ucCurtime: 保存當(dāng)前時(shí)間地址。當(dāng)前時(shí)間格式為: 秒 分 時(shí) 日 月 星期 年*                                         7Byte (BCD碼) 1B 1B 1B 1B 1B  1B  1B* 返回值 : 無***********************************************************************/void v_Get1302(uchar ucCurtime[]){uchar i;uchar ucAddr = 0x81;for(i=0; i7; i++){ucCurtime[i] = uc_R1302(ucAddr);    //格式為: 秒 分 時(shí) 日 月 星期 年ucAddr += 2;}}/********************************************************************* 名稱 : dectobcd(uchar dec)* 功能 : DEC碼轉(zhuǎn)換為BCD碼* 輸入 : dec碼* 輸出 : bcd碼***********************************************************************/uchar dectobcd(uchar dec){uchar bcd;bcd = 0;while(dec >= 10){              dec -= 10;                         bcd++;} bcd = 4;bcd |= dec;return bcd;}/********************************************************************* 名稱 : bcdtodec(uchar bcd)* 功能 : BCD碼轉(zhuǎn)換為DEC碼* 輸入 : bcd碼* 輸出 : dec碼***********************************************************************/uchar bcdtodec(uchar bcd){uchar data1;data1 = bcd  0x0f;     //取BCD低4位bcd = bcd  0x70;       //剔除BCD的最高位和低4位。data1 += bcd >> 1;data1 += bcd >> 3;      //用位移代替乘法運(yùn)算return data1;}/********************************************************************* 名稱 : Write_DS1302Init()* 功能 : 往DS1302中寫入數(shù)據(jù)。最開始顯示的數(shù)據(jù)就是在這里設(shè)置的。* 輸入 : 無* 輸出 : 無***********************************************************************/void Write_DS1302Init(void){v_W1302(0x8e,0);v_W1302(0x80,0x50); //寫入秒v_W1302(0x8e,0);v_W1302(0x82,0x59); //寫入分v_W1302(0x8e,0);v_W1302(0x84,0x07); //寫入小時(shí)v_W1302(0x8e,0);v_W1302(0x86,0x08); //寫入日v_W1302(0x8e,0);v_W1302(0x88,0x08); //寫入月v_W1302(0x8e,0);v_W1302(0x8a,0x05); //寫入星期v_W1302(0x8e,0);v_W1302(0x8c,0x08); //寫入年 }/********************************************************************* 名稱 : Run_DS1302(void)* 功能 : 讀出DS1302中的數(shù)據(jù),并在液晶1602上進(jìn)行顯示* 輸入 : 無* 輸出 : 無***********************************************************************/void Run_DS1302(void){uchar sec, min, hour, day, month, year;while(1){v_W1302(0x8f, 0);sec = bcdtodec(uc_R1302(0x81));    //讀出DS1302中的秒v_W1302(0x8f, 0);min = bcdtodec(uc_R1302(0x83));    //讀出DS1302中的分v_W1302(0x8f, 0);hour = bcdtodec(uc_R1302(0x85));   //讀出DS1302中的小時(shí)v_W1302(0x8f, 0);day = bcdtodec(uc_R1302(0x87));    //讀出DS1302中的日v_W1302(0x8f, 0);month = bcdtodec(uc_R1302(0x89));  //讀出DS1302中的月v_W1302(0x8f, 0);year = bcdtodec(uc_R1302(0x8d));   //讀出DS1302中的年LCD_PutChar  (10+40,  10,    hour/10%10  +'0',  0xFFE0,0x001F);  //LCD_PutChar  (10+50,  10,    hour%10     +'0',  0xFFE0,0x001F);  //顯示DS1302中的時(shí)LCD_PutChar  (10+60,  10,                 ':',  0xFFE0,0x001F);LCD_PutChar  (10+70,  10,    min/10%10   +'0',  0xFFE0,0x001F);  //LCD_PutChar  (10+80,  10,    min%10      +'0',  0xFFE0,0x001F);  //顯示DS1302中的分LCD_PutChar  (10+90,  10,                 ':',  0xFFE0,0x001F);    LCD_PutChar  (10+100, 10,    sec/10%10   +'0',  0xFFE0,0x001F);  //LCD_PutChar  (10+110, 10,    sec%10      +'0',  0xFFE0,0x001F);  //顯示DS1302中的秒 LCD_PutChar  (10+40,  10+20,             +'2',  0xFFE0,0x001F);  //獨(dú)立顯示年LCD_PutChar  (10+50,  10+20,             +'0',  0xFFE0,0x001F);  //獨(dú)立顯示年LCD_PutChar  (10+60,  10+20, year/10%10  +'0',  0xFFE0,0x001F);  //LCD_PutChar  (10+70,  10+20, year%10     +'0',  0xFFE0,0x001F);  //顯示DS1302中的年LCD_PutChar  (10+80,  10+20,              ':',  0xFFE0,0x001F);LCD_PutChar  (10+90,  10+20, month/10%10 +'0',  0xFFE0,0x001F);  //LCD_PutChar  (10+100, 10+20, month%10    +'0',  0xFFE0,0x001F);  //顯示DS1302中的月LCD_PutChar  (10+110, 10+20,              ':',  0xFFE0,0x001F);LCD_PutChar  (10+120, 10+20, day/10%10   +'0',  0xFFE0,0x001F);  //LCD_PutChar  (10+130, 10+20, day%10      +'0',  0xFFE0,0x001F);  //顯示DS1302中的日ReadTemperature();    //讀取溫度轉(zhuǎn)換后的值LCD_PutChar  (10+40,10+40,   temp/10+'0', 0xFFE0,0x001F);   //顯示溫度十位LCD_PutChar  (10+50,10+40,   temp%10+'0', 0xFFE0,0x001F);  //顯示溫度個(gè)位LCD_PutChar  (10+70,10+40,   xs%10+'0',   0xFFE0,0x001F);  //顯示溫度小數(shù)位}  }
溫濕度控制器相關(guān)文章:溫濕度控制器原理


評(píng)論


相關(guān)推薦

技術(shù)專區(qū)

關(guān)閉