⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 main.c

📁 实现了液晶基本驱动程序和功能程序
💻 C
📖 第 1 页 / 共 2 页
字号:
	     x1++;
	    }
    }
}
/*********************************************************
*函数名称:画线子程序
*函数功能:
*入口参数:(x1,y1),(x2,y2):直线起始和终止位置坐标,以像素点为单位
*出口参数:
*备    注:方程:y=kx+b

**********************************************************/
void Draw_Line(uint32 x1,uint32 y1,uint32 x2,uint32 y2)
{
  uint8 temp;
  int dalt_x,dalt_y,err=0;
  if (y1>y2)                  //要求Y1<Y2,如果不符合要求,则两坐标置换
    {
    temp=x1;
    x1=x2;
    x2=temp;
    temp=y1;
    y1=y2;
    y2=temp;
    }
  Draw_Dot(x1,y1);             // 画起始点
  dalt_x=x2-x1;                //ΔX=X2-X1
  dalt_y=y2-y1;                //ΔY=Y2-Y1
  if(dalt_x>=0)
     {
      if(dalt_y>dalt_x)       //k=ΔY/ΔX >1时
        {
         while(y1<y2)
         {
          if(err<0)
          {
           x1=x1+1;
           y1=y1+1;
           err=err+dalt_y-dalt_x;
           }
           else
           {
           y1=y1+1;
           err=err-dalt_x;
           }
          Draw_Dot(x1,y1);     // 画点
         }
       }
     else                      //0<k=ΔY/ΔX=<1
      {
       if (dalt_y==0)
          y1=y1-1;
       while(x1<x2)
         {
          if(err<0)
          {
           x1=x1+1;
           err=err+dalt_y;
           }
           else
           {
           y1=y1+1;
           x1=x1+1;
           err=err+dalt_y-dalt_x;
           }
          Draw_Dot(x1,y1);     //画点
         }
     }
     
    }
  else
   {
   dalt_x=x1-x2;  
   if(dalt_y>dalt_x)          //k=ΔY/ΔX<-1
     {
      while(y1<y2)
       {
        if(err<0)
         {
          x1=x1-1;
          y1=y1+1;
          err=err+dalt_y-dalt_x;
         }
        else
         {
          y1=y1+1;
          err=err-dalt_x;
         }
        Draw_Dot(x1,y1);            //画点
      }
    }
   else       //0>k=ΔY/ΔX>=-1
    {
      if (dalt_y==0)
          y1=y1-1; 
    while(x1>x2)
      {
       if(err<0)
        {
         x1=x1-1;
         err=err+dalt_y;
        }
       else
        {
         x1=x1-1;
         y1=y1+1;
         err=err+dalt_y-dalt_x;
        }
       Draw_Dot(x1,y1);
      }
    } 
  }
     
}
/*********************************************************
*函数名称:画圆子程序
*函数功能:
*入口参数:坐标OX为屏幕上水平位置,以像素点为单位;
          坐标OY为垂直位置,以像素行为单位 
          Rx为圆的半径,以像素点为单位  
*出口参数:
*备    注:方程:(X-Ox)^2+(Y-Oy)^2=Rx^2 
********************************************************/
void circle(uint32 Ox,uint32 Oy,uint32 Rx)
{ 
        uint32 xx,rr,xt,yt,rs;
        uint32 col,row;
        yt=Rx;
        rr=Rx*Rx+1;                     //补偿 1 修正方形
        rs=(yt+(yt>>1))>>1;             //(*0.75)分开1/8圆弧来画
        for (xt=0;xt<=rs;xt++)
        {
                xx=xt*xt;
                while ((yt*yt)>(rr-xx))yt--;
                col=Ox+xt;              //第一象限
                row=Oy-yt;
                Draw_Dot(col,row);
                col=Ox-xt;              //第二象限
                Draw_Dot(col,row);
                row=Oy+yt;              //第三象限
                Draw_Dot(col,row);
                col=Ox+xt;              //第四象限
                Draw_Dot(col,row);

/***************45度镜象画另一半***************/

                col=Ox+yt;              //第一象限
                row=Oy-xt;
                Draw_Dot(col,row);
             
                col=Ox-yt;              //第二象限
               
                Draw_Dot(col,row);
                row=Oy+xt;              //第三象限
               
                Draw_Dot(col,row);
                col=Ox+yt;              //第四象限
                Draw_Dot(col,row);
             
        }
}
/**********************************************************
*函数名称:画正弦曲线
*函数功能:
*入口参数:
*出口参数:
*备    注:
**********************************************************/
void sin(void)
{
  int x,y;
  
  int TABLE_SIN[46]={  0, 4, 8,12,16,
                     19,22,25, 27,29,
                     30,30, 30,29,28,
                     26,24,21,18,14,
				     10, 6, 2,-2,-6,
				     -10,-14, -18,-21,-24,
				     -26,-28,-29,-30,-30,
				     -30,-29,-27,-25,-22,
				     -19,-16,-12,-8, -4,0
				  } ;
 for(x=0;x<184;x=x+4)
  { 
    y=60-TABLE_SIN[x/4];
    Draw_Dot(x,y);
  } 

}
/**********************************************************
*函数名称:画坐标和曲线图
*函数功能:
*入口参数:
*出口参数:
*备    注:
**********************************************************/
void quxian()
{
  uint8  data1[]={88,89,85,87,89,90,89,89,
                      88,86,87,86,88,89,90,94,
                      95,96,96,97,99,99,101,103,
                      101,101,100,103,105,113,113,
                       117,117,116,114,107,110,114,
                        113,112,115,112,113,119,120,
                        125,124,128
                      };  
    uint8 a1,a2,b1,b2,i,num;

    a1=35;b1=210;
    ShowText(a1,b1,(uint8*)"time");
 
    a1=0;b1=10;
    ShowText(a1,b1,(uint8*)"temp");
 

    a1=8;b1=10,num=11;
    SdCmd(0x10,0x7f);                       //粗体字符显示
    ShowText(a1,b1,(uint8*) "日 跟 踪 曲 线 图"); //写日跟踪曲线图
    SdCmd(0x10,0x6f);                //字体原形显示
      
    linehv(15,199, 305,199);
  //  Draw_Line(15, 199, 305, 199);            //画坐标 X coordinate
    Draw_Line(15, 29, 15, 199);              //画坐标 Y coordinate
  /*  a1=21;
    for (i=0;i<48;i++)
    {
     Draw_Line(a1, 198, a1, 202);            //画刻度 scale of  X coordinate
     a1=a1+6;
    }
    for (b1=30;b1<199;b1=b1+20)
    {
     Draw_Line(15, b1, 17, b1);              //画刻度  scrale of  Y coordinate
    }
*/
    a1=15;
    for(i=0;i<47;i++)
    {
    b1=300-data1[i]*2;
    b2=300-data1[i+1]*2;
    a2=a1+6;
    Draw_Line(a1, b1, a2, b2);              //    画曲线
    Draw_Dot(a1,b1+50);                     //画点
    a1=a1+6;
    }
    Delay(800);
    
}

/**********************************************************
*函数名称:主程序
*函数功能:
*入口参数:
*出口参数:
*备    注:
**********************************************************/

int main(void)
{ 
     
                       	
     PINSEL0=0x00000005;                //管脚配置
     PINSEL1=0x00000000;
     
     SCS=0x03;                           //设置为GPIO
     FIO0DIR1=0xff;                      //设置管脚为输出
     FIO0DIR2=0xdf;                      //P0.21管脚置为输入
     
     FIO0MASK1=0x00;                     //不屏蔽任何管脚
     FIO0MASK2=0x00;
     
     FIO0PIN1 = 0xff;                   //初始化所有端口
     FIO0SET2=0x02;                     //  RD=1
     FIO0SET2=0x01;		                // _WR = 1 
	 FIO0SET2=0x08;	                    //  RS = 1
     FIO0SET2=0x04;		                // _CS = 1
    while(1)
    {
     int i;
     reset();                           //软件复位操作
     Delay(3000);                      //延时五十毫秒 
     Init();                            //屏幕初始化
     CleanScreen();                     //清屏操作
     Delay(240);                       //延时四毫秒
  
   //水平卷动演示
     SdCmd(0x00,0xc5); 
     SdCmd(0x12,0xb2);   
     LogoScreen();
     for(i=0;i<3;i++)
     Delay(48000);
   /*  SdCmd(0x80,0x20);                 //设置卷动速度
     SdCmd(0x61,0x06);                //设置屏幕卷动参数 水平起始字符位置
     SdCmd(0x71,90);                  //设置屏幕卷动块起始行位置
     SdCmd(0x72,180);                  //设置屏幕卷动块结束行位置
     SdCmd(0x03,0x83);                  //启动水平卷动功能
     Delay(1200);
     SdCmd(0x071,0x00);                //设置屏幕卷动参数 垂直起始行位置为0;
     SdCmd(0x03,0x80);                 //停止卷动功能
     Delay(1200);*/
     CleanScreen();                     //清屏操作
   //画正弦线
     SdCmd(0x00,0xc5);
     sin();
     Delay(48000);
     CleanScreen(); 
   //曲线图
     SdCmd(0x00,0xc5);                 //绘图模式+display on
     quxian();
     for(i=0;i<3;i++)
     Delay(48000);
     CleanScreen();                     //清屏操作 
   
    //画斜线图
     SdCmd(0x00,0xc5); 
     Draw_Line(0,120,240,0);
     for(i=0;i<3;i++)
     Delay(48000);
     CleanScreen();                     //清屏操作
   //画圆形图
     SdCmd(0x00,0xc5); 
     circle(160,120,60);
     Delay(48000);
     CleanScreen();                     //清屏操作
   //画图画
    /* SdCmd(0x00,0xc5);                  //设置写入数据为图形数据
	 SdCmd(0x12,0xb1);                  //设置写第一显示区域
	 SdCmd(0x40,10);                    //工作窗口左边界位置
	 SdCmd(0x20,20);                    //工作窗口右边界位置
	 SdCmd(0x50,20);                    //工作窗口上边界位置
	 SdCmd(0x30,220);                   //工作窗口下边界位置
	 SdCmd(0xe0,0xff);                   // 填充数据设置
	 SdCmd(0xf0,0xa8);                   // 启动填充功能
	 Delay(3000);
	 //
	 SdCmd(0x12,0xb2);                   //设置写第二显示区域
	 SdCmd(0x40,10);                     //工作窗口左边界位置
	 SdCmd(0x20,30);                     //工作窗口右边界位置
	 SdCmd(0x50,10);                     //工作窗口上边界位置
	 SdCmd(0x30,110);                    //工作窗口下边界位置
	 SdCmd(0xe0,0xff);                   // 填充数据设置
	 SdCmd(0xf0,0xa8);                  // 启动填充功能
	 Delay(3000);*/

	
	 linehv(80,10, 248,10);
	// Draw_Line(80,10,248,10);            //画四边线
	 Draw_Line(80,10,80,220);
	 linehv(80,220, 248,220);
	 //Draw_Line(80,220,248,220);
	 Draw_Line(248,10,248,220);
	 for(i=0;i<3;i++)
     Delay(48000);
     CleanScreen();  
    
     SdCmd(0x12,0xb2);  // 打开图形RAM区域(第二显示区域)
	 ShowBMP(0,0,8,96,data2);            // 写入图画块
	 Delay(48000);
     CleanScreen();  
   /* SdCmd(0x01,0xf3);                   // 设置工作频率12MHZ   
     SdCmd(0xe0,0x3f);                  // 设置占空比参数
     SdCmd(0x90,0x04);                   // 设置扫描频率
     SdCmd(0x12,0x00);                   // 启动灰度显示*/
    
 }
  
   
}
/*********************************************************************************************************
**                            End Of File
********************************************************************************************************/

 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -