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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 4208|回復: 0
打印 上一主題 下一主題
收起左側

[原創]開源帶開機動畫的大屏幕雙熱電偶仿真與單片機程序

[復制鏈接]
跳轉到指定樓層
樓主
單片機大屏幕雙熱電偶仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)


CONN-DIL36




單片機源程序如下:
  1. #include "reg51.h"
  2. #include "intrins.h"
  3. typedef unsigned char uint8;
  4. typedef unsigned int  uint16;
  5. typedef unsigned long uint32;
  6. bit flag;

  7. sbit MAX_SO=P1^0;
  8. sbit MAX_SCK=P1^1;
  9. sbit MAX_CS1=P1^2;
  10. sbit MAX_CS2=P1^3;
  11. int dat1;
  12. #define  LCD_CUR_POS                0x21        /* 光標位置設置(只有設置到有效顯示地址并打開顯示時才看到) */
  13. #define  LCD_CGR_POS                0x22        /* CGRAM偏置地址設置(可以增加自已的符號) */
  14. #define  LCD_ADR_POS                0x24        /* 地址指針位置(設置讀寫操作指針) */

  15. #define  LCD_TXT_STP                0x40        /* 文本區首址(從此地址開始向屏幕左上角顯示字符) */
  16. #define  LCD_TXT_WID                0x41        /* 文本區寬度(設置顯示寬度,N/6或N/8,其中N為x軸的點數) */
  17. #define  LCD_GRH_STP                0x42        /* 圖形區首址(從此地址開始向屏幕左上角顯示點) */
  18. #define  LCD_GRH_WID                0x43        /* 圖形區寬度(設置顯示寬度,N/6或N/8,其中N為x軸的點數) */

  19. #define  LCD_MOD_OR                        0x80        /* 顯示方式:邏輯或 */
  20. #define  LCD_MOD_XOR                0x81        /* 顯示方式:邏輯異或 */
  21. #define  LCD_MOD_AND                0x82        /* 顯示方式:邏輯與 */
  22. #define  LCD_MOD_TCH                0x83        /* 顯示方式:文本特征 */

  23. #define  LCD_DIS_SW                        0x90        /* 顯示開關:D0=1/0,光標閃爍啟用/禁用 */
  24.                                                                         /*                          D1=1/0,光標顯示啟用/禁用 */
  25.                                                                         /*                         D2=1/0,文本顯示啟用/禁用(打開后再使用) */
  26.                                                                         /*                         D3=1/0,圖形顯示啟用/禁用(打開后再使用) */
  27.                                                                                                                
  28. #define  LCD_CUR_SHP                0xA0        /* 光標形狀選擇:0xA0-0xA7表示光標占的行數 */

  29. #define  LCD_AUT_WR                        0xB0        /* 自動寫設置 */
  30. #define  LCD_AUT_RD                        0xB1        /* 自動讀設置 */
  31. #define  LCD_AUT_OVR                0xB2        /* 自動讀/寫結束 */

  32. #define  LCD_INC_WR                        0xC0        /* 數據一次寫,地址加1 */
  33. #define  LCD_INC_RD                        0xC1        /* 數據一次讀,地址加1 */
  34. #define  LCD_DEC_WR                        0xC2        /* 數據一次寫,地址減1 */
  35. #define  LCD_DEC_RD                        0xC3        /* 數據一次讀,地址減1 */
  36. #define  LCD_NOC_WR                        0xC4        /* 數據一次寫,地址不變 */
  37. #define  LCD_NOC_RD                        0xC5        /* 數據一次讀,地址不變 */

  38. #define  LCD_SCN_RD                        0xE0        /* 屏讀 */

  39. #define  LCD_SCN_CP                        0xE8        /* 屏拷貝 */

  40. #define  LCD_BIT_OP                        0xF0        /* 位操作:D0-D2--定義D0-D7位,D3--1為置位,0為清除 */
  41. uint8 const code BMP[]=
  42. {
  43. 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,

  44. …………
  45. …………
  46. …………限于本文篇幅 余下代碼請從51黑下載附件…………

  47. {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1F,0x00,0x31,0x80,0x61,0x80,0x60,0xC0,0x60,0xC0,0x60,0xC0,0x31,0xC0,0x1F,0xC0,0x00,0xC0,0x01,0x80,0x61,0x80,0x63,0x00,0x3E,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*"9",9*/

  48. };
  49. uint8 xdata                 LCD_Command _at_ 0xfdff;
  50. uint8 xdata                        LCD_Data        _at_ 0xfcff;

  51. void  LCD_Write_Command(uint8 dat)
  52. {
  53.         while(!(0xfe|LCD_Command));
  54.         LCD_Command=dat;
  55. }
  56. void LCD_Write_Data(uint8 dat)
  57. {
  58.         while(!(0xfd|LCD_Command));
  59.         LCD_Data=dat;
  60. }
  61. #define LCD_Read_Command()                                                                          LCD_Command
  62. #define LCD_Read_Data()                                                                                    LCD_Data

  63. void LCD_Write_Command3(uint8 command,uint8 dat1,uint8 dat2)
  64. {
  65.         LCD_Write_Data(dat1);
  66.         LCD_Write_Data(dat2);
  67.         LCD_Write_Command(command);
  68. }

  69. void LCD_Write_Command1(uint8 command,uint8 dat1)
  70. {
  71.         LCD_Write_Data(dat1);
  72.         LCD_Write_Command(command);
  73. }



  74. void LCD_Initialize()
  75. {
  76.         LCD_Write_Command3(LCD_TXT_STP,0x00,0x00);
  77.         LCD_Write_Command3(LCD_TXT_WID,32,0x00);
  78.         LCD_Write_Command3(LCD_GRH_STP,0x00,0x00);
  79.         LCD_Write_Command3(LCD_GRH_WID,32,0x00);
  80.         LCD_Write_Command(LCD_MOD_OR);
  81.         LCD_Write_Command(LCD_DIS_SW|0x08);
  82. }

  83. void  LCD_FillAll(uint8 dat)
  84. {  uint32  i;

  85.    LCD_Write_Command3(LCD_ADR_POS, 0x00, 0x00);                        // 置地址指針
  86.    LCD_Write_Command(LCD_AUT_WR);                                                // 自動寫
  87.    for(i=0;i<240*128;i++)
  88.    {  
  89.    LCD_Write_Data(dat);
  90.    }
  91.    LCD_Write_Command(LCD_AUT_OVR);                                                // 自動寫結束
  92.    LCD_Write_Command3(LCD_ADR_POS,0x00,0x00);                        // 重置地址指針
  93. }

  94. void  LCD_UpdatePoint(uint32 x, uint32 y,uint8 dat)
  95. {  uint32  addr;

  96.    /* 找出目標地址 */
  97.    addr = y*(256>>3) + (x>>3);
  98.    LCD_Write_Command3(LCD_ADR_POS, addr&0xFF, addr>>8);        // 置地址指針
  99.    
  100.    /* 輸出數據 */
  101.    LCD_Write_Command1(LCD_INC_WR, dat);
  102. }
  103. void Disp_LCD_HZ(uint16 x,uint16 y,uint16 xsize,uint16 ysize,uint8 *dat)
  104. {
  105.         uint32 i,j;
  106.         for(j=0;j<ysize;j++)
  107.         {
  108.                 for(i=0;i<xsize;)
  109.                 {
  110.                         LCD_UpdatePoint(i+x,j+y,*dat);
  111.                         dat++;
  112.                         i+=8;
  113.                 }
  114.         }
  115. }
  116. void Disp_LCD(uint8 *dat)
  117. {
  118.         uint32 i,j;
  119.         for(j=0;j<255;j++)
  120.         {
  121.                 for(i=0;i<255;)
  122.                 {
  123.                         LCD_UpdatePoint(i,j,*dat);
  124.                         dat++;
  125.                         i+=8;
  126.                 }
  127.         }
  128. }
  129. void Delay()
  130. {
  131.         uint32 i,j;
  132.         for(i=0;i<512;i++)
  133.         for(j=0;j<22;j++);
  134. }



  135. void MAX_Init()
  136. {
  137.         MAX_SCK=0;
  138.         MAX_SCK=0;
  139.         MAX_CS1=0;
  140.         MAX_CS2=0;
  141.         MAX_CS1=1;
  142.         MAX_CS2=1;
  143.         MAX_SO=1;
  144. }

  145. int MAX_Read_Temp()
  146. {
  147.         static char i;
  148.         static int temp=0;
  149.         for(i=0;i<16;i++)
  150.         {
  151.                 temp|=MAX_SO;
  152.                 temp<<=1;
  153.                 MAX_SCK=1;
  154.                 _nop_();
  155.                 MAX_SCK=0;
  156.         }
  157.         if(temp&0x04)flag=1;
  158.         else flag=0;
  159.         MAX_CS1=1;
  160.         MAX_CS2=1;
  161.         return temp>>3;
  162. }

  163. void Disp_Temp(uint8 type)
  164. {
  165.         int dat;
  166.         if(type==2){MAX_CS1=0;MAX_CS2=1;}
  167.         else
  168.         {MAX_CS1=1;MAX_CS2=0;}
  169.         dat=MAX_Read_Temp();
  170.         dat*=10;
  171.         dat/=4;
  172.         dat1=dat;
  173. //        if(flag){
  174. //        print(0,"     ERROR TEMP");
  175. //        print(0x40,"            ");
  176. //        }
  177. //        else
  178. //        {
  179. //        print(5,"            ");
  180. //        print(0,temp_value);
  181. //        print(0x40,"TEMP OUT ");
  182. //        }
  183. }
  184.        

  185. void main()
  186. {
  187.         uint8 i;
  188.         LCD_Initialize();
  189.         MAX_CS1=0;MAX_CS2=0;
  190.         MAX_Init();
  191.         Disp_LCD(BMP);
  192.         for(i=0;i<9*15;i++)
  193.         {
  194.                 Disp_LCD_HZ(64+i,204,14,12,INIT);
  195.                  Delay();
  196.                 i+=15;
  197.         }
  198.         Disp_LCD(BMP1);

  199.         Disp_LCD_HZ(0,0,20,20,HZK[0]);
  200.         Disp_LCD_HZ(22,0,20,20,HZK[1]);
  201.         Disp_LCD_HZ(2*22,0,20,20,HZK[2]);
  202.         Disp_LCD_HZ(3*22,0,20,20,HZK[3]);
  203.         Disp_LCD_HZ(4*22,0,20,20,HZK[4]);
  204.         Disp_LCD_HZ(5*22,0,20,20,HZK[5]);

  205.    
  206.         Disp_LCD_HZ(0,22,20,20,HZK[7]);
  207.         Disp_LCD_HZ(22,22,20,20,HZK[1]);
  208.         Disp_LCD_HZ(2*22,22,20,20,HZK[2]);
  209.         Disp_LCD_HZ(3*22,22,20,20,HZK[3]);
  210.         Disp_LCD_HZ(4*22,22,20,20,HZK[4]);
  211.         Disp_LCD_HZ(5*22,22,20,20,HZK[5]);

  212.         while(1)
  213.         {

  214.         Disp_Temp(1);
  215.         if(flag)
  216.         {
  217.             Disp_LCD_HZ(6*22,0,20,20,HZK[8]);
  218.             Disp_LCD_HZ(7*22,0,20,20,HZK[9]);
  219.         }
  220.         else
  221.         {
  222.                 Disp_LCD_HZ(7*22+22,0,20,20,HZK[6]);
  223.                 Disp_LCD_HZ(6*22+20,0,10,20,NUM[((dat1/10)%10)]);
  224.                 Disp_LCD_HZ(6*22+10,0,10,20,NUM[((dat1/100)%10)]);
  225.                 Disp_LCD_HZ(6*20,0,10,20,NUM[((dat1/1000)%10)]);
  226.         }
  227.         Disp_Temp(2);
  228.         if(flag)
  229.         {
  230.             Disp_LCD_HZ(6*22,22,20,20,HZK[8]);
  231.             Disp_LCD_HZ(7*22,22,20,20,HZK[9]);
  232.         }
  233.         else
  234.         {
  235.                 Disp_LCD_HZ(7*22+22,22,20,20,HZK[6]);
  236.                 Disp_LCD_HZ(6*22+20,20,10,20,NUM[((dat1/10)%10)]);
  237.                 Disp_LCD_HZ(6*22+10,20,10,20,NUM[((dat1/100)%10)]);
  238.                 Disp_LCD_HZ(6*20,20,10,20,NUM[((dat1/1000)%10)]);
  239.         }

  240.        
  241. //                else
  242. //                print(0,temp_value);
  243. //                Disp_Temp(2);
  244. //                if(flag)print(0x40,"NOP          ");
  245. //                else
  246. //                print(0x40,temp_value);
  247.         }
  248. }
復制代碼


所有資料51hei提供下載:
temp.rar (190.82 KB, 下載次數: 32)


評分

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

查看全部評分

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

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 亚洲人精品午夜 | 91在线免费视频 | 欧美一级黄色片在线观看 | 91网在线观看 | 久艹av | 国产一区二区精华 | 波多野结衣先锋影音 | 9porny九色视频自拍 | 欧美综合一区二区三区 | 青草久久免费视频 | 日本在线免费 | 成年人在线观看视频 | 九九热在线视频 | 81精品国产乱码久久久久久 | 久久骚 | 在线免费看毛片 | 亚洲中午字幕 | 欧美日韩视频 | 亚洲欧美bt | 亚洲欧美精品在线 | 中文字幕av高清 | 91欧美精品成人综合在线观看 | 国产欧美在线视频 | 国产粉嫩尤物极品99综合精品 | 亚洲精品中文在线观看 | 特一级毛片 | 亚洲成av人片在线观看 | 欧美日韩不卡合集视频 | av电影手机版 | 亚洲成av人片在线观看 | 欧美电影网 | 四虎av电影| 波多野吉衣在线播放 | 草草草网站 | 国产电影一区二区三区爱妃记 | 91在线精品一区二区 | 一区二区三区国产好的精 | 久久草在线视频 | 久久精品一区 | 激情久久av一区av二区av三区 | 97超级碰碰 |