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

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

QQ登錄

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

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

一個(gè)溫度監(jiān)控系統(tǒng)的lcd12864液晶顯示部分仿真

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
這是一個(gè)溫度監(jiān)控系統(tǒng)的lcd12864液晶顯示部分 所有資料下載:
一個(gè)溫度監(jiān)控系統(tǒng)的lcd12864液晶顯示部分.rar (207.69 KB, 下載次數(shù): 46)


源程序如下:
  1. #include<reg52.h>
  2. #include <stdlib.h>
  3. #include "GraphicsDriver.h"
  4. #define        LCDCS2W_COM        (*((uchar volatile xdata *) 0x2000))
  5. #define        LCDCS2W_DAT        (*((uchar volatile xdata *) 0x2001))
  6. #define        LCDCS1W_COM        (*((uchar volatile xdata *) 0x2004))
  7. #define        LCDCS1W_DAT        (*((uchar volatile xdata *) 0x2005))
  8. #define LCDCS2R_DAT        (*((uchar volatile xdata *) 0x2003))
  9. #define LCDCS1R_DAT        (*((uchar volatile xdata *) 0x2007))

  10. #define        LCD_Wr1command(command)                LCDCS1W_COM = command
  11. #define        LCD_Wr2command(command)                LCDCS2W_COM = command
  12. #define LCD_Wr1data(wrdata)                 LCDCS1W_DAT = wrdata
  13. #define LCD_Wr2data(wrdata)                        LCDCS2W_DAT = wrdata

  14. uchar pageaddr=0xb8;
  15. uchar xaddr=0x40;
  16. uchar startx=0xc0;
  17. uchar control=0x3f;
  18. uchar r[8]={0};
  19. uchar code  DEC_HEX_TAB[8] = {0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80};
  20. void delay5us()
  21. {
  22.    uchar i;
  23.    i=0;
  24. }

  25. /****************************************************************************
  26. *函數(shù)名:LCD_WriteByte
  27. *功能:向LCD寫(xiě)字節(jié)
  28. *取值范圍:x 橫坐標(biāo), y縱坐標(biāo), wrdata要寫(xiě)入的數(shù)據(jù)       
  29. ****************************************************************************/
  30. void  LCD_WriteByte(uchar x, uchar y, uchar wrdata)
  31. {   
  32.         uchar m;
  33.         m=x;
  34.    if(m<64)                               
  35.    {  LCD_Wr1command(xaddr+m);
  36.              delay5us();
  37.       LCD_Wr1command(pageaddr+y);       
  38.           delay5us();
  39.       LCD_Wr1data(wrdata);
  40.           delay5us();
  41.    }
  42.    else
  43.    {        
  44.       m=m-64;                               
  45.       LCD_Wr2command(xaddr+m);       
  46.           delay5us();
  47.       LCD_Wr2command(pageaddr+y);
  48.           delay5us();       
  49.       LCD_Wr2data(wrdata);
  50.           delay5us();
  51.    }
  52. }
  53. /****************************************************************************
  54. *函數(shù)名:LCD_Point
  55. *功能:在LCD中點(diǎn)亮一個(gè)像素點(diǎn)
  56. *xaddress:像素點(diǎn)橫坐標(biāo), yaddress:像素點(diǎn)的縱坐標(biāo)       
  57. ****************************************************************************/
  58. void LCD_Point(uchar xaddress,uchar yaddress)
  59. {
  60.         uchar wrdata,x,y;
  61.         x=xaddress+2;
  62.         yaddress=61-yaddress;
  63.         y=yaddress>>3;
  64.         wrdata=DEC_HEX_TAB[yaddress&0x07];
  65.         if(y==7)
  66.         {
  67.                 if(x!=2) {wrdata|=0x20;}
  68.                 else {wrdata=0x3f;}
  69.         }
  70.         else if(x==2) wrdata=0xff;
  71.         LCD_WriteByte(x,y,wrdata);
  72. }
  73. /*************************************************************
  74. *函數(shù)名:HLine
  75. *功能:畫(huà)出水平線
  76. *其中:xaddress 為起始點(diǎn)橫坐標(biāo),yaddress為起始點(diǎn)縱坐標(biāo),
  77. * toyaddress為結(jié)束點(diǎn)橫坐標(biāo),坐標(biāo)原點(diǎn)位于LCD左下角
  78. *************************************************************/
  79. void HLine(uchar xaddress,uchar yaddress,uchar toxaddress)
  80. {
  81.         uchar bak;
  82.         if(xaddress>toxaddress)                                                
  83.         {  
  84.                 bak = toxaddress;
  85.             toxaddress = xaddress;
  86.             xaddress = bak;
  87.         }
  88.         while(xaddress<=toxaddress)
  89.         {
  90.                  LCD_Point(xaddress,yaddress);
  91.                  xaddress++;
  92.         }
  93. }

  94. /*************************************************************
  95. *函數(shù)名:RLine
  96. *功能:畫(huà)出垂直線
  97. *其中:xaddress 為起始點(diǎn)橫坐標(biāo),yaddress為起始點(diǎn)縱坐標(biāo),
  98. * toyaddress為結(jié)束點(diǎn)縱坐標(biāo),坐標(biāo)原點(diǎn)位于LCD左下角
  99. *************************************************************/
  100. void  RLine(uchar xaddress,uchar yaddress,uchar toyaddress)
  101. {
  102.         uchar bak,x,y,longth,wrdata,i;
  103.         if(yaddress<toyaddress)                                                
  104.         {  
  105.                 bak = toyaddress;
  106.             toyaddress = yaddress;
  107.             yaddress = bak;
  108.         }
  109.            x=xaddress+2;
  110.         yaddress=61-yaddress;
  111.         toyaddress=61-toyaddress;
  112.         longth=toyaddress-yaddress+1;
  113.         while(yaddress<=toyaddress)
  114.         {
  115.                 y=yaddress>>3;
  116.                 if(y==7) wrdata|=0x20;
  117.                 r[y]=wrdata=r[y]|DEC_HEX_TAB[yaddress&0x07];
  118.                 yaddress++;
  119.                 LCD_WriteByte(x,y,wrdata);
  120.         }
  121.         for(i=0;i<=7;i++)
  122.         r[i]=0;
  123. }

  124. /*************************************************************
  125. *函數(shù)名:Line
  126. *功能:畫(huà)出水平線
  127. *其中:x0 為起始點(diǎn)橫坐標(biāo),y0為起始點(diǎn)縱坐標(biāo),
  128. * x1為結(jié)束點(diǎn)橫坐標(biāo),y1為結(jié)束點(diǎn)橫坐標(biāo)
  129. *************************************************************/
  130. void  Line(uchar x0, uchar y0, uchar x1, uchar y1)
  131. {  int   dx;                // 直線x軸差值變量
  132.    int   dy;                  // 直線y軸差值變量
  133.    char  dx_sym;        // x軸增長(zhǎng)方向,為-1時(shí)減值方向,為1時(shí)增值方向
  134.    char  dy_sym;        // y軸增長(zhǎng)方向,為-1時(shí)減值方向,為1時(shí)增值方向
  135.    int   dx_x2;                // dx*2值變量,用于加快運(yùn)算速度
  136.    int   dy_x2;                // dy*2值變量,用于加快運(yùn)算速度
  137.    int   di;                // 決策變量
  138.    
  139.    x0=x0+1;
  140.    x1=x1+1;
  141.    dx = x1-x0;                // 求取兩點(diǎn)之間的差值
  142.    dy = y1-y0;
  143.    
  144.    /* 判斷增長(zhǎng)方向,或是否為水平線、垂直線、點(diǎn) */
  145.    if(dx>0)                                // 判斷x軸方向
  146.    {  dx_sym = 1;                        // dx>0,設(shè)置dx_sym=1
  147.    }
  148.    else
  149.    {  if(dx<0)
  150.       {  dx_sym = -1;                        // dx<0,設(shè)置dx_sym=-1
  151.       }
  152.       else
  153.       {  // dx==0,畫(huà)垂直線,或一點(diǎn)
  154.          RLine(x0, y0, y1);
  155.                return;
  156.       }
  157.    }
  158.    
  159.    if(dy>0)                                // 判斷y軸方向
  160.    {  dy_sym = 1;                        // dy>0,設(shè)置dy_sym=1
  161.    }
  162.    else
  163.    {  if(dy<0)
  164.       {  dy_sym = -1;                        // dy<0,設(shè)置dy_sym=-1
  165.       }
  166.       else
  167.       {  // dy==0,畫(huà)水平線,或一點(diǎn)
  168.          HLine(x0, y0, x1);
  169.                return;
  170.       }
  171.    }
  172.    
  173.    /* 將dx、dy取絕對(duì)值 */
  174.    dx = dx_sym * dx;
  175.    dy = dy_sym * dy;

  176.    /* 計(jì)算2倍的dx及dy值 */
  177.    dx_x2 = dx*2;
  178.    dy_x2 = dy*2;
  179.    
  180.    /* 使用Bresenham法進(jìn)行畫(huà)直線 */
  181.    if(dx>=dy)                                // 對(duì)于dx>dy,則使用x軸為基準(zhǔn)
  182.    {  di = dy_x2 - dx;
  183.       while(x0!=x1)
  184.       {  LCD_Point(x0, y0);
  185.          x0 += dx_sym;
  186.          if(di<0)
  187.          {  di += dy_x2;                // 計(jì)算出下一步的決策值
  188.          }
  189.          else
  190.          {  di += dy_x2 - dx_x2;
  191.             y0 += dy_sym;
  192.          }
  193.       }
  194.       LCD_Point(x0, y0);                // 顯示最后一點(diǎn)
  195.    }
  196.    else                                        // 對(duì)于dx<=dy,則使用y軸為基準(zhǔn)
  197.    {  di = dx_x2 - dy;
  198.       while(y0!=y1)
  199.       {  LCD_Point(x0, y0);
  200.          y0 += dy_sym;
  201.          if(di<0)
  202.          {  di += dx_x2;
  203.          }
  204.          else
  205.          {  di += dx_x2 - dy_x2;
  206.             x0 += dx_sym;
  207.          }
  208.       }
  209.       LCD_Point(x0, y0);                // 顯示最后一點(diǎn)
  210.    }   
  211. }

  212. /**************************************************************
  213. *函數(shù)名:BuildXY()
  214. *功能:建立平面直角坐標(biāo)系
  215. *x0(x0>1) 為原點(diǎn)的橫坐標(biāo), y0(y0>1) 為原點(diǎn)的縱坐標(biāo),
  216. *x1(x1>2) 為橫軸截止點(diǎn), y1(y1>2)為縱軸截止點(diǎn)
  217. *張猛,2010-8-8
  218. **************************************************************/
  219. void BulidXY(uchar x0, uchar y0, uchar x1, uchar y1)
  220. {
  221.         RLine(x0,y0,y1);            //畫(huà)出縱軸

  222.         HLine(x0,y0,x1);                        //畫(huà)出橫軸

  223. }

  224. /****************************************************************************
  225. * 名稱(chēng):Rectangle()
  226. * 功能:畫(huà)矩形。
  227. * 入口參數(shù):x0                矩形起點(diǎn)所在列的位置
  228. *          y0                矩形起點(diǎn)所在行的位置
  229. *          x1              矩形終點(diǎn)所在列的位置
  230. *          y1              矩形終點(diǎn)所在行的位置
  231. * 出口參數(shù):無(wú)
  232. * 說(shuō)明:操作失敗原因是指定地址超出緩沖區(qū)范圍。
  233. ****************************************************************************/
  234. void  Rectangle(uchar x0, uchar y0, uchar x1, uchar y1)
  235. {  HLine(x0, y0, x1);
  236.    HLine(x0, y1, x1);
  237.    RLine(x0, y0, y1);
  238.    RLine(x1, y0, y1);
  239. }
復(fù)制代碼




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

使用道具 舉報(bào)

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 一级黄色录像毛片 | 欧美激情一区二区三级高清视频 | 美女黄视频网站 | 国产情侣在线看 | 免费观看av| av中文字幕在线播放 | 午夜精品视频一区 | 欧美在线看片 | 国产精品一区二区在线播放 | 日韩有码一区 | 国产视频福利在线观看 | 国产精品久久久久久久久免费高清 | 日本免费一区二区三区视频 | 欧美一区免费 | av在线一区二区三区 | 国产1区2区3区 | 久久国产欧美日韩精品 | 亚洲精品在线观看网站 | 一区二区av | 日韩在线观看视频一区 | 日韩在线中文字幕 | 久草新视频 | 成人超碰 | 国产一级特黄aaa大片评分 | 热久久999 | 精品乱子伦一区二区三区 | 毛片.com| 欧美视频第二页 | 一级做a爰片久久毛片 | 天天躁日日躁狠狠的躁天龙影院 | 欧美黄色绿像 | 91精品久久久 | 日日夜夜精品 | 五月免费视频 | 久久国产精品偷 | 激情欧美一区二区三区中文字幕 | av在线成人 | 亚洲欧洲成人av每日更新 | 久久久精品网站 | 国内精品视频免费观看 | 老司机精品福利视频 |