找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

搜索
查看: 5383|回復(fù): 5
收起左側(cè)

我也玩液晶~~~NOKIA 3310 [附帶程序]

[復(fù)制鏈接]
ID:37685 發(fā)表于 2013-6-17 03:40 | 顯示全部樓層 |閱讀模式
5_84980_5042fefe24964a5.jpg 5_84980_8bbe88a76b815ed.jpg 03年買(mǎi)的NOKIA3310,現(xiàn)在退休了.屏用來(lái)做個(gè)多功能溫度計(jì).鬧鐘

可以給其他電器定時(shí)啟動(dòng),延時(shí)關(guān)閉,
還可以設(shè)置溫控報(bào)警.[用來(lái)燒水也可以.]

......

不說(shuō)了,無(wú)圖無(wú)真相,上圖.

現(xiàn)在將程序原理圖附上.程序是仿水銀溫度計(jì)的界面.

就是圖2的照片




5_84980_28466b0b0c5115b.jpg



5_84980_33de54ec4f91cf3.jpg



5_84980_f9985410f3d9165.jpg



5_84980_c99d5cb9a52d6e3.jpg



5_84980_4d35e9d6547e690.jpg



5_84980_045d126f8d2f7f9.jpg



5_84980_28a2337b84b6dfb.jpg


5_84980_f375d12009080f6.jpg



5_84980_e25010e29e93354.jpg



5_84980_74a61dd7cff3604.jpg



5_84980_9fa26d1b479cbfb.jpg



5_84980_61e2a1fd1acb1eb.jpg



5_84980_0119d473aa18cb8.jpg
5_84980_04705be321dca5d.jpg


3310溫度計(jì)[程序 原理圖].rar (140.19 KB, 下載次數(shù): 135)


回復(fù)

使用道具 舉報(bào)

ID:1 發(fā)表于 2013-6-17 03:47 | 顯示全部樓層
下面是主程序:
#include <config.h>

//外部函數(shù)
//-------------------delay.c--------------------------------
extern void delay(unsigned int delay_time);   //延時(shí)子程序
//------------------LPH7366.c--------------------------------
#define COM  0  //指令
#define DAT  1  //數(shù)據(jù)
#define STR  1  //字符
extern void LPH7366_init();  //LPH7366初始化
extern void LPH7366_flash(unsigned int delay_time);  //LPH7366閃屏函數(shù)
extern void LPH7366_write(unsigned char type,unsigned char in_data);  //LPH7366寫(xiě)函數(shù)
extern void LPH7366_clr();  //顯示屏幕清屏
extern void LPH7366_write_str(unsigned char line,unsigned char row,unsigned char str); 
extern void LPH7366_write_han(unsigned char symbol_line,unsigned char symbol_row,unsigned char han);
extern void LPH7366_write_doc(unsigned char symbol_line,unsigned char symbol_row,unsigned char doc); 
extern void data_tick(unsigned char i_data);  //數(shù)據(jù)拆分函數(shù)
extern unsigned char row(unsigned char stye,unsigned char i);  //計(jì)算屏幕的列地址   類(lèi)型 
extern unsigned char ge,shi;  //數(shù)據(jù)拆分
extern bit data_flag;  //是否動(dòng)態(tài)顯示數(shù)據(jù)標(biāo)志位 0:不動(dòng)態(tài)  1:動(dòng)態(tài)
//------------------------time.c--------------------------------
extern void time_init();  //時(shí)間初始化
extern struct time
{ 
  unsigned char hour;
  unsigned char minute;
  unsigned char second;
}local_time,alarm_time,temp_time;
extern bit second_flag;   //秒信號(hào)標(biāo)志
//------------------------溫度圖.c------------------------------
extern void pic_temp();    //溫度主畫(huà)面
extern void pic_temp_face_move();  //臉部表情選擇
extern unsigned char face_flag;  //人臉表情標(biāo)志位 1:笑臉 2:閉嘴 3:苦惱 4:講話 5:傷心 6:驚訝 7:沉默
//-------------DS18B20.C-------------------
extern void DS18B20_init();  //DS18B20初始化
extern void DS18B20_send(unsigned char in_data); //DS18B20發(fā)送數(shù)據(jù)
extern void ReadTemperature();  //DS18B20讀取溫度轉(zhuǎn)換好的數(shù)據(jù)
extern void temp_data_turn(float in_data); //DS18B20讀取溫度轉(zhuǎn)換
extern bit T_sign;   //溫度正負(fù)符號(hào)
extern float temp;  //轉(zhuǎn)換好的溫度數(shù)值
extern unsigned char t_bai,t_shi,t_ge,t_feng; //溫度轉(zhuǎn)換好的各個(gè)位
extern signed char temp_TH,temp_TL;  
//------------DS18B20控制命令-----------------------------
#define T_CONVER 0x44  //開(kāi)始溫度轉(zhuǎn)換
#define T_CONFIG 0x5f  //11位轉(zhuǎn)換
#define T_READ 0xbe    //讀暫存器
#define T_WRITE 0x4e   //寫(xiě)暫存器
#define T_ROM_JMP 0xcc  //忽略64ROM地址
#define T_COPY_E2 0x48  //將溫度上下限數(shù)值寫(xiě)到E2ROM
#define T_RECALL_E2 0xb8  //將E2中存儲(chǔ)的溫度上下限數(shù)值復(fù)制到上下限寄存器中。
#define T_cont  0.0625  //溫度轉(zhuǎn)換常數(shù)
//---------------keyB.c---------------------------
extern key_main();  //主鍵盤(pán)
//------------------------------------------------
//內(nèi)部函數(shù)
void time_move(); //時(shí)間部分動(dòng)畫(huà)
void temp_move(); //溫度部分動(dòng)畫(huà) 
void temp_display(); //溫度顯示
void temp_bar_move(); //溫度條部分動(dòng)畫(huà)
void data_clr();  //行33-58清零函數(shù)
void tick_time_temp();  //檢查設(shè)置參數(shù)
bit sign_cross=0; //正負(fù)符號(hào)交叉標(biāo)志位
bit ring_flag=1;
unsigned char alarm_tick_time=0;
sbit LED=P1^5;
sbit SPK=P1^6;
unsigned char temp_bar[]={0x80,0xc0,0xe0,0xf0,0xf8,0xfc,0xfe,0xff}; 



void main()
{
   LPH7366_init();  //顯示屏幕初始化
   LPH7366_clr();  //屏幕白屏
   time_init();   //定時(shí)器0初始化
  
    pic_temp();
    
    LPH7366_write_str(1,4,'j');
    LPH7366_write_str(1,5,'i');
    LPH7366_write_str(1,6,'a');
    LPH7366_write_str(1,7,'n');
    LPH7366_write_str(1,8,'h');
    LPH7366_write_str(1,9,'u');
    LPH7366_write_str(1,10,'i');
    LPH7366_write_han(2,1,0);
    LPH7366_write_han(2,2,1);
    LPH7366_write_doc(4,25,0x36); 
    LPH7366_write_doc(4,26,0x36);

    time_init();  //定時(shí)器0初始化
		
    while(1)  //溫度圖動(dòng)畫(huà)部分
   { 
     data_flag=1; 

	 pic_temp_face_move();  //人臉表情
     
	 time_move();  //時(shí)間部分動(dòng)畫(huà)

	 temp_move();  //溫度部分動(dòng)畫(huà)

	 temp_bar_move();  //溫度條部分動(dòng)畫(huà)

	 key_main();  //主鍵盤(pán)

	 tick_time_temp();  //查詢(xún)各個(gè)參數(shù)是否到了設(shè)定數(shù)值
     
	 if(temp_TL<temp&&temp<temp_TH)
	{ 

      face_flag=1;
	}
   }
}


void time_move()
{
     data_tick(local_time.hour);
     LPH7366_write_str(6,1,(shi+16));
	 LPH7366_write_str(6,2,(ge+16));

     if(second_flag==1)
     LPH7366_write_str(6,3,26);  //
	 else
     LPH7366_write_str(6,3,0);  // 

     data_tick(local_time.minute);
     LPH7366_write_str(6,4,(shi+16));
	 LPH7366_write_str(6,5,(ge+16));

     if(second_flag==1)
     LPH7366_write_str(6,6,26);  
	 else
     LPH7366_write_str(6,6,0);  // 

	 data_tick(local_time.second);
     LPH7366_write_str(6,7,(shi+16));
	 LPH7366_write_str(6,8,(ge+16));

     if(ring_flag==1)
	 {
	  LPH7366_write_str(6,9,0x00);
      LPH7366_write_str(6,10,10);  
	 }
     else
	 {
	  LPH7366_write_str(6,9,0x00); 
      LPH7366_write_str(6,10,0); 
	 }

}


void temp_move()  
{
  data_flag=1;  //動(dòng)態(tài)顯示

  ReadTemperature();  //讀溫度	   	 

  temp_data_turn(temp); //轉(zhuǎn)換溫度數(shù)值

  temp_display();
} 


void temp_display()
{
   if(T_sign==0)   //正數(shù)
 {  
    if(sign_cross==1)
	{
	 data_clr();
	 sign_cross=0;
	}
    if(t_bai!=0)
  { 
	  LPH7366_write_str(4,5,(t_bai+16));
	  LPH7366_write_str(4,6,(t_shi+16));
	  LPH7366_write_str(4,7,(t_ge+16));
	
	LPH7366_write_doc(4,46,0x01);  //C
    LPH7366_write_doc(4,47,0x3c);
    LPH7366_write_doc(4,48,0x42);
    LPH7366_write_doc(4,49,0x42);
    LPH7366_write_doc(4,50,0x42);
  }
 
    else
  { 
    LPH7366_write_str(4,5,(t_shi+16));
    LPH7366_write_str(4,6,(t_ge+16));
  	LPH7366_write_doc(4,39,0x80);  //小數(shù)點(diǎn)
    LPH7366_write_str(4,7,(t_feng+16));

	LPH7366_write_doc(4,46,0x01);  //C
    LPH7366_write_doc(4,47,0x3c);
    LPH7366_write_doc(4,48,0x42);
    LPH7366_write_doc(4,49,0x42);
    LPH7366_write_doc(4,50,0x42);
  }
 }

   else    //是負(fù)數(shù)
 {  
   if(sign_cross==0)
	{
	 data_clr();
	 sign_cross=1;
	}
   if(t_bai!=0)
  { 

	  LPH7366_write_str(4,5,13); //負(fù)號(hào)
      LPH7366_write_str(4,6,(t_bai+16));
      LPH7366_write_str(4,7,(t_shi+16));
      LPH7366_write_str(4,8,(t_ge+16));


	LPH7366_write_doc(4,52,0x01);  //C
    LPH7366_write_doc(4,53,0x3c);
    LPH7366_write_doc(4,54,0x42);
    LPH7366_write_doc(4,55,0x42);
    LPH7366_write_doc(4,56,0x42);
  }
 
    else
  {  
	 
     LPH7366_write_str(4,5,13);  //負(fù)號(hào)
     LPH7366_write_str(4,6,(t_shi+16));
     LPH7366_write_str(4,7,(t_ge+16));
 	 LPH7366_write_doc(4,45,0x80);  //小數(shù)點(diǎn)
     LPH7366_write_str(4,8,(t_feng+16));   

	LPH7366_write_doc(4,52,0x01);  //C
    LPH7366_write_doc(4,53,0x3c);
    LPH7366_write_doc(4,54,0x42);
    LPH7366_write_doc(4,55,0x42);
    LPH7366_write_doc(4,56,0x42);
  }
 }
}


void temp_bar_move()
{
  unsigned char k,i,n,j,l;
  k=(unsigned char)temp;
  i=k/8;  //幾行
  n=k%8;  //幾小行

   if(i>=0&&i<=5)
  { if(i>0)
   {for(j=5;j>(5-i);j--)
    {
    LPH7366_write_doc(j,80,temp_bar[7]);  //正行全顯
	for(l=1;l<=(5-i);l++)  //清除上面不顯示的,主要是為了清楚以前殘留顯示
	LPH7366_write_doc(l,80,0x00);
    }
   }
   if(n>0)   //一行顯示都不到
   LPH7366_write_doc((5-i),80,temp_bar[n-1]);
  }

   LPH7366_write_doc(1,80,0x04);
}


void data_clr()
{
 unsigned char i;
 for(i=33;i<59;i++)
 {
  LPH7366_write_doc(4,i,0x00);
 }
}

void tick_time_temp()
{
  if(ring_flag==1)
 { if(alarm_time.hour==local_time.hour) 
  {
    if(alarm_time.minute==local_time.minute)
	{
	  if(local_time.second<30)
	  {
	   SPK=~SPK;
	   face_flag=4;
	  }
	  else
	  SPK=0;
	}
  }
 }

  if(temp_time.hour==local_time.hour)
  {
    if(temp_time.minute==local_time.minute)
	{
	  temp_move(); 
	  face_flag=7; 
	}
  }

  if(temp>(temp_TH+0.5)) 
  {
    alarm_tick_time++;
	if(alarm_tick_time==10)
    {
	 alarm_tick_time=0;
	 LED=0;
	 face_flag=6;
	}
  }

  if(temp<(temp_TL-0.5))
  { 
    alarm_tick_time++;
	if(alarm_tick_time==10)
    {
	 alarm_tick_time=0;
     LED=~LED;
	 face_flag=3;
     delay(2000);
	}
  }

}


回復(fù)

使用道具 舉報(bào)

ID:55875 發(fā)表于 2013-10-13 04:03 | 顯示全部樓層
看看
回復(fù)

使用道具 舉報(bào)

ID:61876 發(fā)表于 2014-9-2 16:16 | 顯示全部樓層
真乃神人也。
回復(fù)

使用道具 舉報(bào)

ID:66181 發(fā)表于 2014-9-15 12:28 | 顯示全部樓層
謝謝分享
回復(fù)

使用道具 舉報(bào)

ID:51348 發(fā)表于 2014-9-17 09:10 | 顯示全部樓層
還沒(méi)看,應(yīng)該很好
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表