久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 4065|回復(fù): 4
打印 上一主題 下一主題
收起左側(cè)

單片機溫度計報警機制程序 320x240TFT屏幕上顯示有溫度條,超過設(shè)定值會報警 蜂鳴...

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:114350 發(fā)表于 2016-4-15 10:43 | 只看該作者 |只看大圖 回帖獎勵 |正序瀏覽 |閱讀模式
如標(biāo)題,屏幕上顯示有溫度條,超過設(shè)定溫度會報警,就是蜂鳴器會響


部分源碼如下(完整版本請下載附件):
  1. /*===================================================================================================  
  2. 工程名稱:  Ex1
  3. 功能描述:        控制TFT實現(xiàn)溫度計的顯示,以及使用獨立按鍵控制最高溫度、最低溫度,并在TFT上顯示最高溫度最低溫度及當(dāng)前溫度值
  4. 硬件連接:  查看和修改接口定義在NBCTFT.C中,請仔細檢查接口連線。
  5.       ----------------------------------------
  6.      |     --------TFT控制接線----------      |
  7.      |                                              |
  8.      |                D10~D17   接   P0             |
  9.      |          RS        接   P2^5;              |
  10.      |                        RW             接   P2^4;          |
  11.      |                        RD        接   P2^3;          |
  12.      |                    CS        接   P2^2;              |
  13.      |                        RES       接   P2^1;              |
  14.      |                                              |
  15.      |                        LE        接   P2^0;          |
  16.      |                                        |
  17.      |     --------電源供電接線---------      |
  18.      |                GND       接   電源負極       |
  19.      |                VIN       接   電源正極(5V)   |
  20.      |----------------------------------------|
  21.      | 如果在NBC開發(fā)板上使用,以上線不需用飛  |
  22.      | 線連接,直接插接在開發(fā)板上的12864接口  |
  23.       ----------------------------------------
  24. 硬件連接:  用1位杜邦線將J8_7與J17_18b20連接;
  25.             用1位杜邦線將J8_6與J18_BZ連接;
  26.             用5位杜邦線將J9_7與J7_s17、J9_6與J7_s18、J9_5與J7_s19、J9_4與J7_s20、J9_3與J7_s21連接;
  27. 維護記錄:  2015-11-22
  28. ====================================================================================================*/

  29. //******************包含頭文件***************************

  30. #include"reg51.h"    //包含單片機頭文件
  31. #include"intrins.h"   //_nop_();延時函數(shù)用
  32. #include"NBCTFT.h"   //包含TFT驅(qū)動頭文件
  33. //#include"aaaaaaaa.h"

  34. #define uchar unsigned char
  35. #define uint  unsigned int

  36. //******************全局變量***************************

  37. #define White          0xFFFF   //LCD color
  38. #define Black          0x0000
  39. #define Blue           0x001F
  40. #define Blue2          0x051F
  41. #define Red            0xF800
  42. #define Magenta        0xF81F
  43. #define Green          0x07E0
  44. #define Cyan           0x7FFF
  45. #define Yellow         0xFFE0

  46. unsigned char idata var=0;
  47. uchar idata kbuf=0;
  48. uchar idata kval=0;
  49. uchar idata kcnt=0;


  50. unsigned int Device_code;      //TFT控制IC型號

  51. sbit DQ=P1^7;    //溫度控制口
  52. sbit rs=P1^5;    //命令/數(shù)據(jù)選擇
  53. sbit rw=P1^4;   //讀寫口
  54. sbit e=P1^3;   //鎖存控制

  55. sbit bz=P1^6;            //定義蜂鳴器控制IO

  56. sbit s17=P3^7;           //定義S17按鍵控制IO
  57. sbit s18=P3^6;           //定義S18按鍵控制IO
  58. sbit s19=P3^5;           //定義S19按鍵控制IO
  59. sbit s20=P3^4;           //定義S20按鍵控制IO
  60. sbit s21=P3^3;           //定義S21按鍵控制IO

  61. uchar data dis0[16]={'T','h','e',' ','t','e','m','p',' ','n','o','w',' ','i','s',':',};  //LCD第1行
  62. uchar data dis[10]={' ',' ',' ',0x00,0x00,0x00,'.',0x00,0xeb,'C'};                       //LCD第2行

  63. //uchar keyValue;          //定義掃描結(jié)果參數(shù)

  64. //***********************************************************************************************
  65. //精確延時函數(shù)
  66. //***********************************************************************************************

  67. void delay(uint t)
  68. {

  69. while(--t);

  70. }

  71. //**************************************************************************************************
  72. //延時函數(shù)
  73. //**************************************************************************************************

  74. delay1(uint time)  //int數(shù)據(jù)位16位,所以max=65535

  75. {

  76. uint   i,j;
  77. for(i=0;i<time;i++)   //循環(huán)50*time次
  78.     for(j=0;j<50;j++);//循環(huán)50次
  79. }



  80. //**************************************************************************************************
  81. //向LCD寫一命令
  82. //**************************************************************************************************

  83. wcode(uchar t)
  84. {

  85.   rs=0;
  86.   rw=0;
  87.   e=1;
  88.   P0=t;
  89.   delay1(20);
  90.   e=0;
  91. }

  92. //**************************************************************************************************
  93. //向LCD寫一數(shù)據(jù)
  94. //**************************************************************************************************

  95. wdata(uchar t)
  96. {

  97.   rs=1;
  98.   rw=0;
  99.   e=1;
  100.   P0=t;
  101.   delay1(20);
  102.   e=0;
  103. }

  104. //**************************************************************************************************
  105. //LCD顯示
  106. //**************************************************************************************************

  107. show()
  108. {
  109.   uchar i;
  110.   wcode(0x80);
  111.   for(i=0;i<16;i++)
  112.   {
  113.    wdata(dis0[i]);
  114.   }

  115.   wcode(0xc6);
  116.   for(i=0;i<10;i++)
  117.   {
  118.    wdata(dis[i]);
  119.   }
  120. }

  121. //**************************************************************************************************
  122. //LCD初始化
  123. //**************************************************************************************************

  124. InitLCD()
  125. {
  126. wcode(0x01);
  127. wcode(0x06);
  128. wcode(0x0e);
  129. wcode(0x38);
  130. }

  131. //**************************************************************************************************
  132. //傳感器初始化
  133. //**************************************************************************************************

  134. init_18b20()
  135. {
  136. uchar flag;
  137. DQ=1;
  138. delay(10);
  139. DQ=0;
  140. delay(500);
  141. DQ=1;
  142. delay(200);
  143. flag=DQ;
  144. delay(10);
  145. }

  146. //**************************************************************************************************
  147. //寫一個字節(jié)函數(shù)
  148. //**************************************************************************************************

  149. write_byte(uchar t)
  150. {
  151. uchar i;
  152. for(i=0;i<8;i++)
  153. {
  154.    DQ=0;
  155.    delay(10);
  156.    DQ=t&0x01;
  157.    delay(50);
  158.    DQ=1;
  159.    t=t>>1; //右移一位

  160. }
  161. }

  162. //**************************************************************************************************
  163. //讀一個字節(jié)函數(shù)
  164. //**************************************************************************************************
  165. uchar read_byte()
  166. {
  167.   uchar i,value=0;
  168.   for(i=0;i<8;i++)
  169.   {
  170.     value=value>>1;
  171.         DQ=0;
  172.         delay(10);
  173.         DQ=1;
  174.         delay(10);
  175.         if(DQ==1)value=value|0x80;
  176.         delay(50);
  177.   }
  178. return(value);
  179. }

  180. //**************************************************************************************************
  181. //數(shù)據(jù)處理子函數(shù)
  182. //**************************************************************************************************

  183. uint chuli(uint temperature)
  184. {
  185. float t;
  186. if(temperature&0x8000)
  187.   {
  188.    temperature=~temperature+1;
  189.    dis[3]=0xb0;
  190.   }
  191. else
  192.   {
  193.   dis[3]=0x2b;
  194.   }

  195.   t=temperature*0.0625+0.05;

  196.   temperature=t*10;

  197.   dis[7]=temperature%10;
  198.   dis[4]=temperature/10;
  199.   dis[5]=temperature%100/10;

  200.   //m=dis[4]*10+dis[5];
  201.   return t;
  202. }


  203. //**************************************************************************************************
  204. //溫度采集函數(shù)
  205. //**************************************************************************************************

  206. uint get_temp()
  207. {
  208.   uint dat;
  209.   uchar wenl,wenh;
  210.   init_18b20();
  211.   write_byte(0xcc);
  212.   write_byte(0x44);
  213.   init_18b20();
  214.   write_byte(0xcc);
  215.   write_byte(0xbe);
  216.   wenl=read_byte();
  217.   wenh=read_byte();
  218.   dat=(wenh<<8)+wenl;
  219.   return(dat);
  220. }

  221. void delay5(uint z)
  222. {
  223.    uint i,j;
  224.    for(i=z;i>0;i--)
  225.       for(j=z;j>0;j--);
  226. }

  227. //**************************************************************************************************
  228. //1*5按鍵掃描函數(shù)
  229. //**************************************************************************************************
  230. keyScan()                             
  231. {
  232. /*  var=P3|0xff;
  233.    if(var==kbuf)
  234.         {
  235.          if(kcnt<100)
  236.           { kcnt++;
  237.          if(kcnt==10)
  238.             {
  239.              kval=kbuf;
  240.                 //return(kval);
  241.                 }
  242.           }
  243.         }
  244.    else
  245.         {
  246.          kbuf=0xfffff;
  247.          kcnt=0;
  248.         }
  249. // else{kbuf=var;kcnt=0;}
  250. */
  251.    P3=P3|0xff;                //P3高5位置1,設(shè)置為輸入
  252.    if((P3&0xff)!=0xff)        //判斷是否有按鍵按下
  253.     {
  254.      delay1(10);               //延時肖抖
  255.      if((P3&0xff)!=0xff)      //再次判斷是否有按鍵按下
  256.        kval=(P3&0xff);    //讀取掃描結(jié)果
  257.          }
  258.     else {return kval=0;}
  259. }

  260. //***************************************************

  261. //****************************************************
  262. fm()
  263. {
  264.             bz=0;                 //關(guān)閉蜂鳴器
  265.         //delay1(1000);          //延時
  266.         bz=1;                 //打開蜂鳴器
  267.         delay1(100);          //延時
  268.      }

  269. //**************************************************************************************************
  270. //主函數(shù)
  271. //**************************************************************************************************

  272. main()
  273. {
  274. //var=P3|0xf8;
  275.    unsigned char tempchar[]={'0','1','2','3','4','5','6','7','8','9'};
  276.    uint temp,m,m1,n,n1,i,s,max,min;
  277.    uchar temp222,g,g1;
  278.    uchar *temp111;
  279.    Device_code=0x9320;
  280.    TFT_Initial();
  281.    Show_RGB(0,240,0,320,Yellow);

  282.         temp=get_temp();
  283.             for(i=300;i>14;i--){ Put_pixel(48,i,Black);}
  284.                 for(i=48;i<64;i++){ Put_pixel(i,300,Black);}
  285.                 for(i=300;i>14;i--){ Put_pixel(64,i,Black);}

  286.         //        Show_RGB(49,63,20,140,Red);
  287.         //        Show_RGB(49,63,140,180,Green);
  288.         //        Show_RGB(49,63,180,299,Blue2);

  289.         temp222=tempchar[0];
  290.                 temp111=&temp222;
  291.                 for(i=52;i<293;i=i+80){ LCD_PutString(40,i,temp111,Black,Yellow);}
  292.         temp222=tempchar[1];
  293.                 temp111=&temp222;
  294.                 for(i=252;i<293;i=i+40){ LCD_PutString(32,i,temp111,Black,Yellow);}
  295.         temp222=tempchar[2];
  296.                 temp111=&temp222;
  297.                 for(i=172;i<213;i=i+40){ LCD_PutString(32,i,temp111,Black,Yellow);}
  298.                 temp222=tempchar[3];
  299.                 temp111=&temp222;
  300.                 for(i=92;i<133;i=i+40){ LCD_PutString(32,i,temp111,Black,Yellow);}
  301.                 temp222=tempchar[4];
  302.                 temp111=&temp222;
  303.                 for(i=12;i<53;i=i+40){ LCD_PutString(32,i,temp111,Black,Yellow);}
  304.                 temp222=tempchar[5];
  305.                 temp111=&temp222;
  306.                 for(i=12;i<253;i=i+80){ LCD_PutString(40,i,temp111,Black,Yellow);}


  307.         /*for(i=20;i<300;i=i+8)
  308.           {
  309.             Put_pixel(49,i,Black);
  310.             Put_pixel(50,i,Black);
  311.                         Put_pixel(51,i,Black);
  312.           }
  313.                 Put_pixel(52,20,Black);
  314.         Put_pixel(52,140,Black);
  315.                 Put_pixel(52,180,Black);
  316.                 Put_pixel(52,320,Black);*/
  317.                 LCD_PutString(100,108,"max:",Black,Yellow);        
  318.                 LCD_PutString(100,132,"min:",Black,Yellow);

  319.                 LCD_PutString(92,208,"當(dāng)前室溫:",Black,Green);
  320.                 LCD_PutString(164,240,"度",Black,Yellow);

  321.          max=27;min=11;

  322. while(1)
  323.   {
  324.     temp=get_temp();
  325.         m=chuli(temp);

  326.         g=m/10;
  327.         g1=tempchar[g];
  328.         temp111=&g1;
  329.         LCD_PutString(148,240,temp111,Black,Yellow);
  330.         g=m%10;
  331.         g1=tempchar[g];
  332.         temp111=&g1;
  333.         LCD_PutString(156,240,temp111,Black,Yellow);

  334.     g=max/10;
  335.         g1=tempchar[g];
  336.         temp111=&g1;
  337.         LCD_PutString(132,108,temp111,Black,Yellow);
  338.         g=max%10;
  339.         g1=tempchar[g];
  340.         temp111=&g1;
  341.         LCD_PutString(140,108,temp111,Black,Yellow);

  342.         g=min/10;
  343.         g1=tempchar[g];
  344.         temp111=&g1;
  345.         LCD_PutString(132,132,temp111,Black,Yellow);
  346.         g=min%10;
  347.         g1=tempchar[g];
  348.         temp111=&g1;
  349.         LCD_PutString(140,132,temp111,Black,Yellow);

  350.         n=380-(m/1*8);
  351.         Show_RGB(49,63,n,299,Red);
  352.         Show_RGB(49,63,14,n-1,Yellow);
  353.    
  354.         for(i=49;i<64;i++){ Put_pixel(i,n,Green);}
  355.         Put_pixel(50,n+1,White);Put_pixel(50,n-1,Green);
  356.         Put_pixel(51,n+2,White);Put_pixel(51,n-2,Green);
  357.         Put_pixel(52,n+3,White);Put_pixel(52,n-3,Green);

  358.         //delay5(300);

  359.                 //Show_RGB(49,63,20,140,Red);
  360.                 //Show_RGB(49,63,141,180,Green);
  361.                 //Show_RGB(49,63,180,299,Blue2);
  362.             for(i=20;i<300;i=i+8)
  363.           {
  364.             Put_pixel(49,i,Black);
  365.             Put_pixel(50,i,Black);
  366.                         Put_pixel(51,i,Black);
  367.           }
  368.                 for(i=20;i<300;i=i+40)
  369.                   {
  370.                     Put_pixel(52,i,Black);
  371.                         Put_pixel(53,i,Black);
  372.                   }


  373.      //max=29;min=18;

  374.             keyScan();            //按鍵掃描
  375.         switch(kval)         
  376.           {
  377.             case 0x7f:           //如果S17按鍵按下  
  378.                                 {
  379.                  min=min+1;         
  380.                  break;         
  381.                 }
  382.             case 0xbf:           //如果S18按鍵按下
  383.                                 {
  384.                  max=max-1;        
  385.                  break;
  386.                 }
  387.             case 0xdf:           //如果S19按鍵按下
  388.                                 {                  
  389.                  break;
  390.                 }
  391.             case 0xef:           //如果S20按鍵按下
  392.                                 {
  393.                  max=max+1;        
  394.                  break;
  395.                 }
  396.             case 0xf7:           //如果S21按鍵按下
  397.                                 {
  398.                  min=min-1;        
  399.                  break;
  400.                 }
  401.             default:
  402.                                         break;
  403.           }         

  404.          n=380-(max*8);
  405.      for(i=49;i<64;i++){ Put_pixel(i,n,Red);}
  406.          n=380-(min*8);
  407.      for(i=49;i<64;i++){ Put_pixel(i,n,Blue2);}

  408.      delay5(600);

  409.          if(m/1>=max||m/1<=min)     
  410.          fm();            
  411.    
  412.   }

  413. }

復(fù)制代碼

tft程序:
  1. /*===================================================================================================  
  2. 文件功能描述:320x240TFT驅(qū)動程序,控制TFT實現(xiàn)漢字,字符顯示,畫點功能。
  3. ====================================================================================================*/
  4. //******************包含頭文件***************************
  5. #include"NBCTFT.h"
  6. #include"reg52.h"

  7. //**************控制端口定義********************
  8. #define DataPort P0     //數(shù)據(jù)口使用DataPort

  9. sbit RS    =P2^5;                //數(shù)據(jù)/命令選擇
  10. sbit RW    =P2^4;       //寫數(shù)據(jù)/命令
  11. sbit nRD   =P2^3;       //讀控制
  12. sbit CS    =P2^2;                //片選
  13. sbit RES   =P2^1;                //復(fù)位

  14. sbit LE    =P2^0;       //74HC573鎖存控制
  15. //**************聲明外部函數(shù)和變量**************

  16. extern unsigned int Device_code;

  17. //================================================================================================
  18. //        實現(xiàn)功能:        延時
  19. //        輸入?yún)?shù):        count 設(shè)置延時時間
  20. //================================================================================================
  21. void delayms(unsigned int count)
  22. {
  23.     int i,j;                                                                                
  24.     for(i=0;i<count;i++)                                                                    
  25.        {
  26.              for(j=0;j<255;j++);
  27.        }                                                                                    
  28. }

  29. //================================================================================================
  30. //        實現(xiàn)功能:        寫命令
  31. //        輸入?yún)?shù):  DH 需要輸入16bits命令的高8位
  32. //              DL 需要輸入16bits命令的低8位
  33. //================================================================================================
  34. void Write_Cmd(unsigned char DH,unsigned char DL)
  35. {
  36.         CS=0;
  37.         RS=0;
  38.     nRD=1;
  39.     RW=0;

  40.     //注意:當(dāng)使用8位數(shù)據(jù)口驅(qū)動16位數(shù)據(jù)模式時,使用74HC573作為IO擴展,程序如下
  41.     DataPort=DL;            //送高8位命令給573待鎖存
  42.     LE=1;                   //鎖存位
  43.     LE=0;                   //斷開鎖存,位選573的Q7~Q0仍保持

  44.         DataPort=DH;            //送低8位命令給TFT

  45.         /*
  46.     //如果使用16位數(shù)據(jù)口驅(qū)動16位數(shù)據(jù)模式,則無需IO擴展,直接將數(shù)據(jù)送到數(shù)據(jù)口即可
  47.     DataPort_L=DL;
  48.     DataPort_H=DH;
  49.         */

  50.         RW=1;
  51.         CS=1;
  52. }

  53. //================================================================================================
  54. //        實現(xiàn)功能:        寫數(shù)據(jù)(2*8bits)
  55. //        輸入?yún)?shù):  DH 需要輸入16bits數(shù)據(jù)的高8位
  56. //              DL 需要輸入16bits數(shù)據(jù)的低8位
  57. //================================================================================================
  58. void Write_Data(unsigned char DH,unsigned char DL)
  59. {
  60.        
  61.         CS=0;
  62.         RS=1;

  63.     //注意:當(dāng)使用8位數(shù)據(jù)口驅(qū)動16位數(shù)據(jù)模式時,使用74HC573作為IO擴展,程序如下
  64.         DataPort=DL;            //送高8位數(shù)據(jù)給573待鎖存
  65.     LE=1;                   //鎖存位
  66.     LE=0;                   //斷開鎖存,位選573的Q7~Q0仍保持

  67.         DataPort=DH;            //送低8位數(shù)據(jù)給TFT

  68.         /*
  69.     //如果使用16位數(shù)據(jù)口驅(qū)動16位數(shù)據(jù)模式,則無需IO擴展,直接將數(shù)據(jù)送到數(shù)據(jù)口即可
  70.     DataPort_L=DL;
  71.     DataPort_H=DH;
  72.         */

  73.         RW=0;
  74.         RW=1;
  75.         CS=1;
  76. }

  77. //================================================================================================
  78. //        實現(xiàn)功能:        寫數(shù)據(jù)(16位)
  79. //        輸入?yún)?shù):  y 需要輸入16bits數(shù)據(jù)
  80. //================================================================================================
  81. void  Write_Data_U16(unsigned int y)
  82. {
  83.         unsigned char m,n;
  84.         m=y>>8;
  85.         n=y;
  86.         Write_Data(m,n);
  87. }

  88. //================================================================================================
  89. //        實現(xiàn)功能:        向x寄存器寫入y數(shù)據(jù)
  90. //        輸入?yún)?shù):  x 需要輸入的命令 16位
  91. //              y 需要輸入的數(shù)據(jù) 16位
  92. //================================================================================================
  93. void  Write_Cmd_Data (unsigned char x,unsigned int y)
  94. {
  95.         unsigned char m,n;
  96.         m=y>>8;
  97.         n=y;
  98.         Write_Cmd(0x00,x);
  99.         Write_Data(m,n);
  100. }

  101. //================================================================================================
  102. //        實現(xiàn)功能:        TFT清屏
  103. //        輸入?yún)?shù):        bColor 清屏所使用的背景色
  104. //================================================================================================
  105. void CLR_Screen(unsigned int bColor)
  106. {
  107. unsigned int i,j;
  108. LCD_SetPos(0,240,0,320);//320x240
  109. for (i=0;i<320;i++)
  110.         {
  111.            for (j=0;j<240;j++)
  112.                Write_Data_U16(bColor);
  113.         }
  114. }

  115. //================================================================================================
  116. //        實現(xiàn)功能:        顯示Ascii字符
  117. //  輸入?yún)?shù):  x 橫坐標(biāo)
  118. //              y 縱坐標(biāo)
  119. //                        c 需要顯示的字符
  120. //                        fColor 字符顏色
  121. //                        bColor 字符背景顏色
  122. //================================================================================================
  123. #include "Ascii_8x16.h"
  124. void LCD_PutChar(unsigned short x, unsigned short y, char c, unsigned int fColor, unsigned int bColor)
  125. {
  126. unsigned int i,j;
  127. LCD_SetPos(x,x+8-1,y,y+16-1);                    //設(shè)置字符顯示位置
  128. for(i=0; i<16;i++) {                             //循環(huán)寫入16字節(jié),一個字符為16字節(jié)
  129.                 unsigned char m=Font8x16[(c-0x20)*16+i];  //提取c字符的第i個字節(jié)以,c減去0x20是由于Ascii碼庫中的0~1f被去掉
  130.                 for(j=0;j<8;j++) {                        //循環(huán)寫入8位,一個字節(jié)為8位
  131.                         if((m&0x80)==0x80) {                  //判斷最高位是否為1
  132.                                 Write_Data_U16(fColor);           //最高位為1,寫入字符顏色
  133.                                 }
  134.                         else {
  135.                                 Write_Data_U16(bColor);           //最高位為0,寫入背景顏色
  136.                                 }
  137.                         m<<=1;                                //左移1位,準備寫下一位
  138.                         }
  139.                 }
  140. }

  141. //================================================================================================
  142. //        實現(xiàn)功能:        顯示16x16漢字
  143. //  輸入?yún)?shù):  x 橫坐標(biāo)
  144. //              y 縱坐標(biāo)
  145. //                        g 需要顯示的字符編碼
  146. //                        fColor 字符顏色
  147. //                        bColor 字符背景顏色
  148. //================================================================================================
  149. #include "chinese.h"        //包含16*16漢字字模

  150. void Put16x16(unsigned short x, unsigned short  y, unsigned char g[2], unsigned int fColor,unsigned int bColor)
  151. {
  152.         unsigned int i,j,k;

  153.         LCD_SetPos(x,  x+16-1,y, y+16-1);                       //設(shè)置漢字顯示位置

  154.         for (k=0;k<64;k++)                                      //循環(huán)64次,查詢漢字字模位置
  155.         {
  156.           if ((ch16[k].GBK[0]==g[0])&&(ch16[k].GBK[1]==g[1]))   //判斷第k個漢字的編碼是否與輸入漢字g[2]相等
  157.           {
  158.             for(i=0;i<32;i++)                                   //如果相等,既已找到待顯示字模位置,循環(huán)寫入32字節(jié)
  159.                 {
  160.                   unsigned short m=ch16[k].hz16[i];                 //讀取32字節(jié)中的第i字節(jié)
  161.                   for(j=0;j<8;j++)                                  //循環(huán)寫入8位數(shù)據(jù)
  162.                    {                                                
  163.                          if((m&0x80)==0x80) Write_Data_U16(fColor);     //判斷最高位是否為1,最高位為1,寫入字符顏色
  164.                          else              Write_Data_U16(bColor);      //最高位為0,寫入背景顏色
  165.                      m<<=1;                                         //左移1位,準備寫下一位
  166.                }
  167.                 }
  168.           }  
  169.     }       
  170. }

  171. //================================================================================================
  172. //        實現(xiàn)功能:        顯示中英文字符串
  173. //  輸入?yún)?shù):  x 橫坐標(biāo)
  174. //              y 縱坐標(biāo)
  175. //                        *s 待顯示的字符串,例如LCD_PutString(24,16,"123藍芯",White,Blue);即把"123藍芯"的第一個字符地址賦給指針變量s.
  176. //                        bColor 字符背景顏色
  177. //================================================================================================
  178. void LCD_PutString(unsigned short x, unsigned short y, unsigned char *s, unsigned int fColor, unsigned int bColor)
  179. {
  180.          unsigned char l=0;                            //顯示屏位置增量
  181.      while(*s)
  182.          {
  183.                 if( *s < 0x80)                             //判斷s指向的字符串中的某字符的編碼值是否小于128,如果小于,即為ASCII字符
  184.                     {
  185.                          LCD_PutChar(x+l*8,y,*s,fColor,bColor);//顯示該字符
  186.                      s++;l++;                              //指針加1,位置加1
  187.                         }
  188.                 else
  189.                     {
  190.                          Put16x16(x+l*8,y,(unsigned char*)s,fColor,bColor);//顯示該漢字
  191.                      s+=2;l+=2;                                        //因為漢字為編碼為2字節(jié),指針加2,顯示16x16所以位置加2
  192.                         }
  193.          }
  194. }

  195. //================================================================================================
  196. //        實現(xiàn)功能:        指定位置顯示RGB顏色
  197. //  輸入?yún)?shù):  x0,y0 起始坐標(biāo)
  198. //              x1,y1 結(jié)束坐標(biāo)
  199. //                        Color  背景顏色
  200. //================================================================================================

  201. void Show_RGB (unsigned int x0,unsigned int x1,unsigned int y0,unsigned int y1,unsigned int Color)
  202. {
  203.         unsigned int i,j;
  204.         LCD_SetPos(x0,x1,y0,y1);      //設(shè)置顯示位置
  205.         for (i=y0;i<=y1;i++)
  206.         {
  207.            for (j=x0;j<=x1;j++)
  208.                Write_Data_U16(Color);
  209.         }
  210. }

  211. //================================================================================================
  212. //        實現(xiàn)功能:        TFT初始化
  213. //================================================================================================
  214. void TFT_Initial(void)
  215. {  

  216.     RES = 1;   
  217.         delayms(1);                    // Delay 1ms
  218.         RES = 0;  
  219.         delayms(10);                   // Delay 10ms            
  220.         RES = 1;  
  221.         delayms(50);                   // Delay 50 ms  
  222.   
  223.         if(Device_code==0x9320)
  224.      {

  225.     //************* Start Initial Sequence **********//
  226.         Write_Cmd_Data(0x00,0x0001);   //Set the OSC bit as ‘1’ to start the internal oscillator
  227.     Write_Cmd_Data(0x01,0x0100);   // set SS and SM bit
  228.         Write_Cmd_Data(0x02,0x0700);   // set 1 line inversion
  229.         Write_Cmd_Data(0x03,0x1030);   //set GRAM Write direction and BGR=1
  230.     Write_Cmd_Data(0x04,0x0000);   // Resize register
  231.         Write_Cmd_Data(0x08,0x0202);   // set the back porch and front porch
  232.     Write_Cmd_Data(0x09,0x0000);   // set non-display area refresh cycle ISC[3:0]
  233.     Write_Cmd_Data(0x0A,0x0000);   // FMARK function
  234.     Write_Cmd_Data(0x0C,0x0000);   // RGB interface setting
  235.         Write_Cmd_Data(0x0D,0x0000);   // Frame marker Position
  236.     Write_Cmd_Data(0x0F,0x0000);   // RGB interface polarity
  237.     delayms(30);
  238.         //*************Power On sequence ****************//
  239.         Write_Cmd_Data(0x10, 0x16b0);   // SAP, BT[3:0], AP, DSTB, SLP, STB
  240.         delayms(30);
  241.         Write_Cmd_Data(0x11, 0x0007);   //Write final user’s setting values to VC bit
  242.         Write_Cmd_Data(0x12, 0x013a);   // set Internal reference voltage
  243.         Write_Cmd_Data(0x13, 0x1a00);   // VDV[4:0] for VCOM amplitude
  244.     delayms(30);
  245.     Write_Cmd_Data(0x29, 0x000c);   // Set VCM[5:0] for VCOMH
  246.         delayms(30); // Delay 50ms

  247.         // ----------- Adjust the Gamma Curve ----------//
  248.         Write_Cmd_Data(0x0030, 0x0000);
  249.         Write_Cmd_Data(0x0031, 0x0505);
  250.         Write_Cmd_Data(0x0032, 0x0304);
  251.         Write_Cmd_Data(0x0035, 0x0006);
  252.         Write_Cmd_Data(0x0036, 0x0707);
  253.         Write_Cmd_Data(0x0037, 0x0105);
  254.         Write_Cmd_Data(0x0038, 0x0002);
  255.         Write_Cmd_Data(0x0039, 0x0707);
  256.         Write_Cmd_Data(0x003C, 0x0704);
  257.         Write_Cmd_Data(0x003D, 0x0807);

  258.         //------------------ Set GRAM area ---------------//
  259.         Write_Cmd_Data(0x0050, 0x0000); // Horizontal GRAM Start Address
  260.         Write_Cmd_Data(0x0051, 0x00EF); // Horizontal GRAM End Address
  261.         Write_Cmd_Data(0x0052, 0x0000); // Vertical GRAM Start Address
  262.         Write_Cmd_Data(0x0053, 0x013F); // Vertical GRAM Start Address
  263.         Write_Cmd_Data(0x0060, 0x2700); // Gate Scan Line
  264.         Write_Cmd_Data(0x0061, 0x0001); // NDL,VLE, REV
  265.         Write_Cmd_Data(0x006A, 0x0000); // set scrolling line
  266.     Write_Cmd_Data(0x20, 0x0000);   // GRAM horizontal Address
  267.         Write_Cmd_Data(0x21, 0x0000);   // GRAM Vertical Address

  268.         //-------------- Partial Display Control ---------//
  269.         Write_Cmd_Data(0x0080, 0x0000);
  270.         Write_Cmd_Data(0x0081, 0x0000);
  271.         Write_Cmd_Data(0x0082, 0x0000);
  272.         Write_Cmd_Data(0x0083, 0x0000);
  273.         Write_Cmd_Data(0x0084, 0x0000);
  274.         Write_Cmd_Data(0x0085, 0x0000);

  275.         //-------------- Panel Control ---------//
  276.     Write_Cmd_Data(0x90,0x0010);   //Frame Cycle Contral
  277.         Write_Cmd_Data(0x92,0x0000);   //Panel Interface Contral
  278.         Write_Cmd_Data(0x93,0x0003);   //Panel Interface Contral 3.
  279.         Write_Cmd_Data(0x95,0x0110);   //Frame Cycle Contral
  280.         Write_Cmd_Data(0x97,0x0000);   //
  281.         Write_Cmd_Data(0x98,0x0000);   //Frame Cycle Contral.     

  282.         //-------------- Display on ---------//
  283.     Write_Cmd_Data(0x07,0x0173);

  284.         }

  285.         else if(Device_code==0x1505 )
  286.      {

  287.     //************* Start Initial Sequence **********//
  288.         Write_Cmd_Data(0x00,0x0001);   //Set the OSC bit as ‘1’ to start the internal oscillator
  289.     Write_Cmd_Data(0x01,0x0100);   // set SS and SM bit
  290.         Write_Cmd_Data(0x02,0x0700);   // set 1 line inversion
  291.         Write_Cmd_Data(0x03,0x1030);   //set GRAM Write direction and BGR=1
  292.     Write_Cmd_Data(0x04,0x0000);   // Resize register
  293.         Write_Cmd_Data(0x08,0x0202);   // set the back porch and front porch
  294.     Write_Cmd_Data(0x09,0x0000);   // set non-display area refresh cycle ISC[3:0]
  295.     Write_Cmd_Data(0x0A,0x0000);   // FMARK function
  296.     Write_Cmd_Data(0x0C,0x0000);   // RGB interface setting
  297.         Write_Cmd_Data(0x0D,0x0000);   // Frame marker Position
  298.     Write_Cmd_Data(0x0F,0x0000);   // RGB interface polarity
  299.     delayms(30);
  300.         //*************Power On sequence ****************//
  301.         Write_Cmd_Data(0x10, 0x16b0);   // SAP, BT[3:0], AP, DSTB, SLP, STB
  302.         delayms(30);
  303.         Write_Cmd_Data(0x11, 0x0007);   //Write final user’s setting values to VC bit
  304.         Write_Cmd_Data(0x12, 0x013a);   // set Internal reference voltage
  305.         Write_Cmd_Data(0x13, 0x1a00);   // VDV[4:0] for VCOM amplitude
  306.     delayms(30);
  307.     Write_Cmd_Data(0x29, 0x000c);   // Set VCM[5:0] for VCOMH
  308.         delayms(30); // Delay 50ms

  309.         // ----------- Adjust the Gamma Curve ----------//
  310.         Write_Cmd_Data(0x0030, 0x0000);
  311.         Write_Cmd_Data(0x0031, 0x0505);
  312.         Write_Cmd_Data(0x0032, 0x0304);
  313.         Write_Cmd_Data(0x0035, 0x0006);
  314.         Write_Cmd_Data(0x0036, 0x0707);
  315.         Write_Cmd_Data(0x0037, 0x0105);
  316.         Write_Cmd_Data(0x0038, 0x0002);
  317.         Write_Cmd_Data(0x0039, 0x0707);
  318.         Write_Cmd_Data(0x003C, 0x0704);
  319.         Write_Cmd_Data(0x003D, 0x0807);

  320.         //------------------ Set GRAM area ---------------//
  321.         Write_Cmd_Data(0x0050, 0x0000); // Horizontal GRAM Start Address
  322.         Write_Cmd_Data(0x0051, 0x00EF); // Horizontal GRAM End Address
  323.         Write_Cmd_Data(0x0052, 0x0000); // Vertical GRAM Start Address
  324.         Write_Cmd_Data(0x0053, 0x013F); // Vertical GRAM Start Address
  325.         Write_Cmd_Data(0x0060, 0x2700); // Gate Scan Line
  326.         Write_Cmd_Data(0x0061, 0x0001); // NDL,VLE, REV
  327.         Write_Cmd_Data(0x006A, 0x2700); // set scrolling line
  328.     Write_Cmd_Data(0x20, 0x0000);   // GRAM horizontal Address
  329.         Write_Cmd_Data(0x21, 0x0000);   // GRAM Vertical Address

  330.         //-------------- Partial Display Control ---------//
  331.         Write_Cmd_Data(0x0080, 0x0000);
  332.         Write_Cmd_Data(0x0081, 0x0000);
  333.         Write_Cmd_Data(0x0082, 0x0000);
  334.         Write_Cmd_Data(0x0083, 0x0000);
  335.         Write_Cmd_Data(0x0084, 0x0000);
  336.         Write_Cmd_Data(0x0085, 0x0000);

  337.         //-------------- Panel Control ---------//
  338.     Write_Cmd_Data(0x90,0x0010);   //Frame Cycle Contral
  339.         Write_Cmd_Data(0x92,0x0000);   //Panel Interface Contral
  340.         Write_Cmd_Data(0x93,0x0003);   //Panel Interface Contral 3.
  341.         Write_Cmd_Data(0x95,0x0110);   //Frame Cycle Contral
  342.         Write_Cmd_Data(0x97,0x0000);   //
  343.         Write_Cmd_Data(0x98,0x0000);   //Frame Cycle Contral.     

  344.         //-------------- Display on ---------//
  345.     Write_Cmd_Data(0x07,0x0173);

  346.         }

  347.     else if(Device_code==0x9328)
  348.      {

  349.     //************* Start Initial Sequence **********//
  350.          Write_Cmd_Data(0x0001,0x0100);   //set SS and SM bit //設(shè)置掃描方向
  351.     Write_Cmd_Data(0x0002,0x0700);   //EOR=1 and B/C=1 to set the line inversion  //設(shè)置行反轉(zhuǎn)
  352.     Write_Cmd_Data(0x0003,0x1030);   //set Entry Mode  //設(shè)置進入模式   
  353.     Write_Cmd_Data(0x0004,0x0000);   //
  354.     Write_Cmd_Data(0x00A4,0x0001);
  355.     Write_Cmd_Data(0x0008,0x0202); // set the back porch and front porch
  356.     Write_Cmd_Data(0x0009,0x0000); // set non-display area refresh cycle ISC[3:0]
  357.     Write_Cmd_Data(0x000A,0x0000); // FMARK function
  358.     Write_Cmd_Data(0x000C,0x0000); // RGB interface setting
  359.     Write_Cmd_Data(0x000D, 0x0000); // Frame marker Position
  360.     Write_Cmd_Data(0x000F, 0x0000); // RGB interface polarity



  361. //*************Power On sequence ****************//
  362.     Write_Cmd_Data(0x0010, 0x0000); // SAP, BT[3:0], AP, DSTB, SLP, STB
  363.     Write_Cmd_Data(0x0011, 0x0007); // DC1[2:0], DC0[2:0], VC[2:0]
  364.     Write_Cmd_Data(0x0012, 0x0000); // VREG1OUT voltage
  365.     Write_Cmd_Data(0x0013, 0x0000); // VDV[4:0] for VCOM amplitude
  366.     delayms(30);
  367.     Write_Cmd_Data(0x0010, 0x1690); // SAP, BT[3:0], AP, DSTB, SLP, STB
  368.     Write_Cmd_Data(0x0011, 0x0227); // R11h=0x0221 at VCI=3.3V, DC1[2:0], DC0[2:0], VC[2:0]
  369.     delayms(30);
  370.     Write_Cmd_Data(0x0012, 0x001C); // External reference voltage= Vci;
  371.     delayms(30);
  372.     Write_Cmd_Data(0x0013, 0x1800); // R13=1200 when R12=009D;VDV[4:0] for VCOM amplitude
  373.     Write_Cmd_Data(0x0029, 0x001C); // R29=000C when R12=009D;VCM[5:0] for VCOMH
  374.     Write_Cmd_Data(0x002B, 0x000D); // Frame Rate = 91Hz
  375.     delayms(30);   
  376.     Write_Cmd_Data(0x0020, 0x0000); // GRAM horizontal Address
  377.     Write_Cmd_Data(0x0021, 0x0000); // GRAM Vertical Address
  378. // ----------- Adjust the Gamma Curve ----------//                  
  379.         Write_Cmd_Data(0x0030, 0x0007);
  380.         Write_Cmd_Data(0x0031, 0x0302);
  381.     Write_Cmd_Data(0x0032, 0x0105);
  382.         Write_Cmd_Data(0x0035, 0x0206);
  383.     Write_Cmd_Data(0x0036, 0x0808);                  
  384.     Write_Cmd_Data(0x0037, 0x0206);
  385.     Write_Cmd_Data(0x0038, 0x0504);
  386.     Write_Cmd_Data(0x0039, 0x0007);
  387.     Write_Cmd_Data(0x003C, 0x0105);
  388.     Write_Cmd_Data(0x003D, 0x0808);
  389. //------------------ Set GRAM area ---------------//
  390.     Write_Cmd_Data(0x0050, 0x0000); // Horizontal GRAM Start Address
  391.     Write_Cmd_Data(0x0051, 0x00EF); // Horizontal GRAM End Address
  392.     Write_Cmd_Data(0x0052, 0x0000); // Vertical GRAM Start Address
  393.         delayms(30);
  394.     Write_Cmd_Data(0x0053, 0x013F); // Vertical GRAM Start Address
  395.         delayms(30);
  396.     Write_Cmd_Data(0x0060, 0xA700); // Gate Scan Line
  397.     Write_Cmd_Data(0x0061, 0x0001); // NDL,VLE, REV  
  398.     Write_Cmd_Data(0x006A, 0x0000); // set scrolling line
  399. //-------------- Partial Display Control ---------//
  400.     Write_Cmd_Data(0x0080, 0x0000);
  401.     Write_Cmd_Data(0x0081, 0x0000);
  402.     Write_Cmd_Data(0x0082,0x0000);
  403.     Write_Cmd_Data(0x0083,0x0000);
  404.     Write_Cmd_Data(0x0084,0x0000);
  405.     Write_Cmd_Data(0x0085,0x0000);
  406. //-------------- Panel Control -------------------//        
  407.     Write_Cmd_Data(0x0090, 0x0010);
  408.     Write_Cmd_Data(0x0092, 0x0000);
  409.     Write_Cmd_Data(0x0093, 0x0003);
  410.     Write_Cmd_Data(0x0095, 0x0110);
  411.     Write_Cmd_Data(0x0097, 0x0000);
  412.     Write_Cmd_Data(0x0098, 0x0000);
  413.     Write_Cmd_Data(0x0007, 0x0133); // 262K color and display ON

  414.         }
  415. }

  416. //================================================================================================
  417. //        實現(xiàn)功能:        設(shè)置坐標(biāo)
  418. //  輸入?yún)?shù):  x0,y0 起始坐標(biāo)
  419. //              x1,y1 結(jié)束坐標(biāo)
  420. //================================================================================================
  421. void LCD_SetPos(unsigned int x0,unsigned int x1,unsigned int y0,unsigned int y1)
  422. {

  423.   Write_Cmd_Data(0x50,x0);  // Horizontal GRAM Start Address
  424.   Write_Cmd_Data(0x51,x1);  // Horizontal GRAM End Address
  425.   Write_Cmd_Data(0x52,y0);  // Vertical GRAM Start Address
  426.   Write_Cmd_Data(0x53,y1);  // Vertical GRAM Start Address
  427.   Write_Cmd_Data(0x20,x0);  // GRAM horizontal Address
  428.   Write_Cmd_Data(0x21,y0);  // GRAM Vertical Address
  429.   Write_Cmd (0x00,0x22);    // 0x0022,Start to Write Data to GRAM
  430. }

  431. //================================================================================================
  432. //        實現(xiàn)功能:        畫點
  433. //  輸入?yún)?shù):  x,y 需要畫點坐標(biāo)
  434. //              color 點的顏色
  435. //================================================================================================
  436. void Put_pixel(unsigned int x,unsigned int y,unsigned int color)
  437. {
  438.         LCD_SetPos(x,x,y,y);        //設(shè)置待畫點坐標(biāo)
  439.         Write_Data_U16(color);      //在指定點寫入顏色數(shù)據(jù)
  440. }


復(fù)制代碼

ds1302程序:
  1. #include <reg51.h>
  2. #include"intrins.h"      //_nop_();延時函數(shù)用
  3. #define uchar unsigned char
  4. #define uint unsigned int

  5. sbit DS1302_SCLK =P1^0;  //時鐘
  6. sbit DS1302_IO   =P1^1;  //數(shù)據(jù)輸入輸出
  7. sbit DS1302_RST  =P1^2;  //復(fù)位/片選線

  8. struct S_TIME
  9.         {
  10.                 uchar SEC;                        //00~59
  11.                 uchar MIN;                        //00~59
  12.                 uchar HR;                        //00-23
  13.                 uchar DATE;                        //00-31
  14.                 uchar MONTH;                //01-12
  15.                 uchar DAY;                        //01-07
  16.                 uchar YEAR;                        //00-99
  17.         }TIME={0x01,0x01,0x01,0x07,0x05,0x05,0x10};//初始化時間參數(shù)

  18. uchar dtime[7][2]={            
  19.                      {0x20,0x20},        //秒 十位和個位
  20.                                          {0x20,0x20},        //分 十位和個位
  21.                                          {0x20,0x20},        //時 十位和個位
  22.                                          {0x20,0x20},        //日 十位和個位
  23.                                          {0x20,0x20},        //月 十位和個位
  24.                                          {0x20,0x20},        //周 十位和個位
  25.                                          {0x20,0x20}        //年 十位和個位
  26.                          };
  27. /********************************************************************
  28. //函數(shù)名稱: DS1302_WByte
  29. //函數(shù)功能: 往DS1302 寫入 1 Byte 數(shù)據(jù)
  30. //輸入值:   ndata: 寄存器的數(shù)據(jù)或地址
  31. //返回值:   無
  32. ***********************************************************************/
  33.   void DS1302_WByte(uchar ndata)
  34. {  
  35.   uchar i;
  36.   for(i=8; i>0; i--)                   //循環(huán)8次寫入8位數(shù)據(jù)
  37.   {
  38.     DS1302_IO = (bit)(ndata&0x01);     //取最低位數(shù)據(jù),從0位至7位依次傳送
  39.     DS1302_SCLK = 1;                   //給一個脈沖,將數(shù)據(jù)寫入1302                 
  40.     _nop_();
  41.     DS1302_SCLK = 0;                  
  42.     ndata>>=1;                         //即ndata = ndata >> 1;
  43.   }
  44. }
  45. /********************************************************************
  46. //函數(shù)名稱: DS1302_RByte
  47. //函數(shù)功能: 從DS1302讀取 1 Byte數(shù)據(jù)
  48. //輸入值:   無
  49. //返回值:   ndata:讀取的數(shù)據(jù)
  50. ***********************************************************************/
  51.   uchar DS1302_RByte(void)
  52. {
  53.    uchar i;
  54.    uchar ndata=0;
  55.    for(i=8;i>0;i--)                 //循環(huán)8次讀出8位數(shù)據(jù)
  56.         {
  57.          DS1302_IO=1;                   //初始化數(shù)據(jù)IO
  58.          ndata>>=1;                                 //即ndata = ndata >> 1;
  59.          if(DS1302_IO) ndata|=0x80;     //從數(shù)據(jù)口讀取1位數(shù)據(jù)
  60.      DS1302_SCLK = 1;               //給一個脈沖
  61.      _nop_();
  62.      DS1302_SCLK = 0;                     

  63.          }
  64.      return (ndata);                //返回結(jié)果
  65. }
  66. /********************************************************************
  67. //函數(shù)名稱: DS1302_Wdata
  68. //函數(shù)功能: 往DS1302某地址寫入某數(shù)據(jù)
  69. //輸入值:   nAddr: DS1302地址, ndata: 要寫的數(shù)據(jù)
  70. //返回值:   無
  71. ***********************************************************************/
  72. void DS1302_Wdata(uchar nAddr, uchar ndata)
  73. {
  74.   DS1302_RST=0;              
  75.   DS1302_SCLK=0;
  76.   DS1302_RST=1;
  77.   DS1302_WByte(nAddr);       // 寫1Byte地址
  78.   DS1302_WByte(ndata);       // 寫1Byte數(shù)據(jù)
  79.   DS1302_SCLK=1;
  80.   DS1302_RST=0;
  81. }
  82. /********************************************************************
  83. //函數(shù)名稱: DS1302_Rdata
  84. //函數(shù)功能: 從DS1302某地址讀取數(shù)據(jù)
  85. //輸入值:   nAddr: DS1302地址
  86. //返回值:   ndata: 讀取的數(shù)據(jù)
  87. ***********************************************************************/
  88. uchar DS1302_Rdata(uchar nAddr)
  89. {
  90.     uchar ndata;
  91.         DS1302_RST=0;
  92.         DS1302_SCLK=0;
  93.         DS1302_RST=1;
  94.     DS1302_WByte(nAddr);       /* 地址,命令 */
  95.     ndata = DS1302_RByte();    /* 讀1Byte數(shù)據(jù) */
  96.     DS1302_SCLK=1;
  97.         DS1302_RST=0;
  98.     return(ndata);
  99. }
  100. /********************************************************************
  101. //函數(shù)名稱: InitDS1302
  102. //函數(shù)功能: DS1302初始時間設(shè)定
  103. //輸入值:   無
  104. //返回值:   無
  105. ***********************************************************************/
  106. void InitDS1302(void)
  107. {
  108. DS1302_Wdata(0x8e,0x00); //控制命令,WP=0,寫操作
  109. DS1302_Wdata(0x90,0xa5);  
  110. /*
  111. 地址0x90為充電寄存器,可以對充電電流進行限制,寫入
  112. 內(nèi)容高4位固定為1010(其他組合均不能充電),低4
  113. 位的首2位是選擇內(nèi)部降壓二極管的個數(shù)的,01代表在
  114. 充電回路串入1個二極管,10代表串入2個;最后2位可
  115. 設(shè)定串入的電阻的數(shù)值:01為2k歐,10為4k歐,11為8k歐。
  116. */
  117. DS1302_Wdata(0x80,TIME.SEC);  //秒
  118. DS1302_Wdata(0x82,TIME.MIN);  //分
  119. DS1302_Wdata(0x84,TIME.HR);   //時
  120. DS1302_Wdata(0x86,TIME.DATE); //日
  121. DS1302_Wdata(0x88,TIME.MONTH);//月
  122. DS1302_Wdata(0x8a,TIME.DAY);  //星期
  123. DS1302_Wdata(0x8c,TIME.YEAR); //年

  124. DS1302_Wdata(0x8e,0x80); //控制命令,WP=1,寫保護
  125. }
  126. /********************************************************************
  127. //函數(shù)名稱: GetDS1302
  128. //函數(shù)功能: DS1302當(dāng)前時間讀取
  129. //輸入值:   無
  130. //返回值:   無
  131. ***********************************************************************/
  132.    void GetDS1302(void)
  133.         {
  134.                 TIME.SEC        = DS1302_Rdata(0x81);    //從DS1302讀取秒數(shù)據(jù)
  135.         dtime[0][0]=(TIME.SEC>>4)+0x30;      //十位
  136.                 dtime[0][1]=(TIME.SEC&0x0F)+0x30;    //個位   

  137.                 TIME.MIN        = DS1302_Rdata(0x83);    //從DS1302讀取分數(shù)據(jù)
  138.         dtime[1][0]=(TIME.MIN>>4)+0x30;      //十位  
  139.                 dtime[1][1]=(TIME.MIN&0x0F)+0x30;    //個位

  140.                 TIME.HR                = DS1302_Rdata(0x85);    //從DS1302讀取時數(shù)據(jù)
  141.         dtime[2][0]=(TIME.HR>>4)+0x30;       //十位  
  142.                 dtime[2][1]=(TIME.HR&0x0F)+0x30;     //個位

  143.                 TIME.DATE        = DS1302_Rdata(0x87);    //從DS1302讀取日數(shù)據(jù)
  144.         dtime[3][0]=(TIME.DATE>>4)+0x30;     //十位  
  145.                 dtime[3][1]=(TIME.DATE&0x0F)+0x30;   //個位

  146.                 TIME.MONTH        = DS1302_Rdata(0x89);    //從DS1302讀取月數(shù)據(jù)
  147.         dtime[4][0]=(TIME.MONTH>>4)+0x30;    //十位  
  148.                 dtime[4][1]=(TIME.MONTH&0x0F)+0x30;  //個位

  149.                 TIME.DAY        = DS1302_Rdata(0x8b);    //從DS1302讀取星期數(shù)據(jù)
  150.         dtime[5][0]=(TIME.DAY>>4)+0x30;      //十位  
  151.                 dtime[5][1]=(TIME.DAY&0x0F)+0x30;    //個位

  152.                 TIME.YEAR        = DS1302_Rdata(0x8d);    //從DS1302讀取年數(shù)據(jù)
  153.         dtime[6][0]=(TIME.YEAR>>4)+0x30;     //十位  
  154.                 dtime[6][1]=(TIME.YEAR&0x0F)+0x30;   //個位
  155.         }


復(fù)制代碼


程序1、.zip

91.51 KB, 下載次數(shù): 28, 下載積分: 黑幣 -5

評分

參與人數(shù) 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎勵!

查看全部評分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏2 分享淘帖 頂 踩
回復(fù)

使用道具 舉報

5#
ID:206774 發(fā)表于 2017-6-2 08:56 | 只看該作者
keil4 打開后是只讀文件
回復(fù)

使用道具 舉報

地板
ID:167112 發(fā)表于 2017-2-28 19:15 | 只看該作者
很棒,頂上去。
回復(fù)

使用道具 舉報

板凳
ID:166811 發(fā)表于 2017-2-26 22:40 | 只看該作者
非常好的分享,感謝!
回復(fù)

使用道具 舉報

沙發(fā)
ID:125206 發(fā)表于 2016-6-5 11:09 | 只看該作者
贊。。。。。。。。。。。。。
回復(fù)

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 国产一区二区三区久久久久久久久 | 免费av一区二区三区 | 激情亚洲 | 国产成人精品一区二区三区在线 | 又爽又黄axxx片免费观看 | 黄色日批视频 | 亚洲日本欧美日韩高观看 | 三级黄视频在线观看 | 不卡的av在线 | 男女羞羞视频在线免费观看 | 欧洲成人免费视频 | 免费一级欧美在线观看视频 | 欧美一区二不卡视频 | 日韩高清中文字幕 | 国产一级片一区二区 | 精品久久久久久久 | 99久久久99久久国产片鸭王 | 亚洲福利一区二区 | 国产精品国产成人国产三级 | 精品视频一区二区三区 | 国产精品日日摸夜夜添夜夜av | 九七午夜剧场福利写真 | 一级免费毛片 | www.欧美视频 | 久久精品中文字幕 | 欧美一区二区 | 一级片aaa | 久久久久久一区 | 九色国产 | 亚洲小视频| 精品欧美一区二区在线观看视频 | 成人影院一区二区三区 | 亚洲成人中文字幕 | 亚洲欧美中文日韩在线v日本 | 成人免费黄视频 | 中文字幕在线观看第一页 | 国产精品亚洲综合 | 日韩国产在线观看 | 久久精品二区亚洲w码 | 久久成人国产精品 | www.操.com|