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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

單片機在LCD12864上畫奧運5環(Proteus仿真+程序)

[復制鏈接]
跳轉到指定樓層
樓主
單片機在LCD12864上畫奧運5環的圖片(Proteus仿真+c語言源程序)


全部代碼和仿真文件下載: LCD12864上畫5環(仿真 程序).zip (77.98 KB, 下載次數: 11)
部分程序源碼預覽:
  1. /********************************** LCD12864曲線顯示*******************************************/
  2. //#include<avr/io.h>
  3. #include<reg51.h>
  4. #include<drive_functions.h>
  5. #include<math.h>
  6. //#include<get_keys.h>

  7. #define Graphic_Clear 0x01           //檫除點
  8. #define Graphic_Not 0x02             //反相點
  9. #define Graphic_Draw 0x03         //畫點

  10. uchar j=0,i=0;
  11. uchar r=32;
  12. /***********************在LCD上任意坐標畫點********************************/

  13. void DrawPoint(uchar X,uchar Y,uchar Type)
  14. {                                 //X,Y畫點的坐標 Type畫點的類型:反相點,檫除點,畫點
  15.                                                    
  16.    uchar DX = (Y >> 3);                       //計算出屬于哪個字節
  17.    uchar BX = Y - (DX << 3);                  //計算出屬于字節哪一位
  18.    uchar TempData = 0;
  19.    
  20.    
  21.    if (X > 63)
  22.    {
  23.     chip_select=2;
  24.       X -= 64;
  25.    }
  26.    else
  27.    {
  28.       chip_select=1;
  29.    }

  30.    SetPage(DX);                             //設行地址
  31.    SetColumn(X);                         //設列地址
  32.    
  33.    TempData = ReadData();                   //讀出所畫點所在字節的內容
  34.    
  35.    switch (Type)                            //對該字節進行相應操作
  36.    {
  37.        case Graphic_Clear:
  38.                   TempData &= ~(1<<BX);
  39.                  break;
  40.       case Graphic_Not:
  41.                  TempData ^= (1 << BX);
  42.                   break;
  43.       case Graphic_Draw:
  44.                   TempData |= (1 << BX);  
  45.         break;
  46.      default:        break;
  47.    }
  48.    
  49.    SetPage(DX);                            //設置行地址
  50.    SetColumn(X);                          //設置列地址
  51.    WriteData(TempData);                 //把修改后的字節送回LCD,達到畫點目的
  52. }

  53. /********插值法畫任意兩點之間直線的函數,函數中只用加減法,程序運行效率很高**********/

  54. DrawLine(uchar x1,uchar y1,uchar x2,uchar y2)
  55. {                           //x1,y1起點坐標;x2,y2終點坐標;
  56.     uchar x,y;
  57.     uchar d_x,d_y;            
  58.     char err=0;
  59.     uchar temp=0;

  60.     if(y2<y1){x=x1;y=y1;x1=x2;y1=y2;x2=x;y2=y;}
  61.     d_y=y2-y1;
  62.     if (d_y==0)
  63.         {
  64.         if (x1>x2) {x=x1;x1=x2;x2=x;}
  65.         for ( x=x1;x<=x2;x++ ) DrawPoint(x,y1,Graphic_Draw);
  66.         }
  67.     else
  68.         {
  69.             if(x2>=x1){temp=1;d_x=x2-x1;}else d_x=x1-x2;
  70.             x=x1;y=y1;DrawPoint(x,y,Graphic_Draw);
  71.             if(temp&&(d_y<=d_x))
  72.         while(x!=x2)
  73.             {if(err<0){x=x+1;err=err+(y2-y);}
  74.             else {x=x+1;y=y+1;err=err+(y2-y)-(x2-x);}
  75.             DrawPoint(x,y,Graphic_Draw);
  76.             }
  77.             else if(temp&&(d_y>d_x))
  78.         while(y!=y2)
  79.             {d_x=x2-x;d_y=y2-y;
  80.             if(err<0){x=x+1;y=y+1;err=err+d_y-d_x;}
  81.             else {y=y+1;err=err-d_x;}
  82.             DrawPoint(x,y,Graphic_Draw);
  83.             }
  84.             else if(!temp&&(d_y<=d_x))
  85.         while(x!=x2)
  86.             {d_x=x-x2;d_y=y2-y;
  87.             if(err<0){x=x-1;err=err+d_y;}
  88.             else {x=x-1;y=y+1;err=err+d_y-d_x;}
  89.             DrawPoint(x,y,Graphic_Draw);
  90.             }
  91.             else if(!temp &&(d_y>d_x))
  92.         while(y!=y2)
  93.             {d_x=x-x2;d_y=y2-y;
  94.             if(err<0){x=x-1;y=y+1;err=err+d_y-d_x;}
  95.             else {y=y+1;err=err-d_x;}
  96.             DrawPoint(x,y,Graphic_Draw);
  97.             }
  98.         }   
  99. }

  100. /***********************************************************************/

  101. void DrawLevel(void)
  102. {

  103. for(i=0;i<127;i++){DrawPoint(i,32,Graphic_Draw);}//畫水平直線

  104. }

  105. /************************************************************************************/

  106. void DrawSineWave(void)
  107. {
  108.         uchar xn=0;
  109.         uchar yn=32;
  110.         uchar i;
  111.         uchar xi,yi;
  112. for(i=0;i<127;i++)
  113.         {
  114.                 xi=i;
  115.                 yi=(sin(i*0.1)*32)+32;

  116.                 DrawLine(xn,yn,xi,yi);      //在一系列零散的點上,兩點兩點之間連線,從而得到一條曲線
  117.                
  118.                 xn=i;
  119.                 yn=yi;
  120.                
  121.                 }  
  122.                 }

  123. /*************************************************************************************/

  124. void DrawCircle(uchar x0,uchar y0,uchar r)//x0,y0為圓心坐標,r為圓半徑
  125. {
  126. uchar xn,yn,xi,yi;
  127. unsigned int j;

  128. xn=cos(0)*r+x0;
  129. yn=sin(0)*r+y0;

  130. for(j=0;j<630;j++)
  131.         {
  132.                 xi=(cos(j*0.01)*r)+x0;
  133.                 yi=(sin(j*0.01)*r)+y0;

  134.                 DrawLine(xn,yn,xi,yi);      //在一系列零散的點上,兩點兩點之間連線,從而得到一條曲線
  135.                
  136.                 xn=xi;
  137.                 yn=yi;
  138. }

  139. }

  140. /**************************************************************************************************/

  141. void DrawRetic(uchar x0,uchar y0,uchar x1,uchar y1)//畫正方形,x0,y0為左上角坐標,x1,y1為右下角坐標
  142. {
  143.         uchar i;
  144.         for(i=0;i<=x1-x0;i++){  DrawPoint(x0+i,y0,Graphic_Draw);  DrawPoint(x0+i,y1,Graphic_Draw);  }
  145.         for(i=0;i<=y1-y0;i++){  DrawPoint(x0,y0+i,Graphic_Draw);  DrawPoint(x1,y0+i,Graphic_Draw);  }
  146.         }


  147. /**************************************************************************************************/

  148. void DrawTrigle(uchar x1,uchar y1,uchar x2,uchar y2,uchar x3,uchar y3)//畫三角形,三個坐標為三角形頂點
  149. {
  150.         DrawLine(x1,y1,x2,y2);
  151.         DrawLine(x2,y2,x3,y3);
  152.         DrawLine(x1,y1,x3,y3);
  153.        
  154. }

  155. /******************************** main **********************************************************/

  156. void main(void)
  157. {

  158. ClearLCD();

  159. while(1)
  160. {

  161. //ClearLCD();
  162. //DrawLevel();
  163. //DrawLine(0,63,127,0);
  164. //DrawSineWave();

  165. //DrawCircle(63,32,25);
  166. //r-=4;
  167. DrawCircle(31,20,20);
  168. DrawCircle(63,20,20);
  169. DrawCircle(94,20,20);
  170. DrawCircle(47,43,20);
  171. DrawCircle(79,43,20);

  172. }

  173. //DrawRetic(10,10,30,30);
  174. //DrawTrigle(12,23,80,60,120,6);
  175. //DrawRetic(5,5,120,60);
  176. //}

  177. }

復制代碼


評分

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

查看全部評分

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

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 日韩中文在线观看 | 91久久| 二区三区在线观看 | 青娱乐自拍 | 中文字幕亚洲一区 | 夜久久 | 久久久久成人精品 | 精品综合久久 | 欧美精品国产一区二区 | 日韩成人精品一区 | 亚洲欧美中文日韩在线v日本 | 一区二区三区国产精品 | 久久av一区二区三区 | 韩国精品在线 | 久久91精品国产 | 一区二区三区小视频 | 久久久国产一区二区三区四区小说 | 久久精品久久久久久 | 91九色在线观看 | 美女张开腿露出尿口 | 中文字幕成人网 | 久久日韩精品 | 久久国产区 | 91久久精品国产91久久性色tv | 91在线第一页 | 麻豆视频在线免费看 | 99热视| 成人欧美一区二区 | 久久婷婷av| 男人的天堂久久 | 亚洲欧美视频在线观看 | 成人午夜激情 | 天堂一区二区三区 | 精品国产一区二区三区久久久蜜月 | 国产乱码高清区二区三区在线 | 欧美精品一区二区三区四区 在线 | 午夜激情在线 | 91精品无人区卡一卡二卡三 | 欧美综合一区 | 日韩中文字幕一区二区 | 在线播放第一页 |