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

📄 12864.c

📁 MSP430+IR+LCD显示读出的键值
💻 C
📖 第 1 页 / 共 2 页
字号:
void set_white(unsigned char y,unsigned char x,unsigned char end_x,unsigned char clear)
{
    unsigned char i, j, white_x, white_y,white_end_x,clr_x,clr_y;		//
    white_end_x = (end_x-x+1);
    white_end_x <<= 1;
   Write_Cmd(0x36);                   //打开绘图模式
    if(y==1)
    {
        white_x = (0x80+x-1);
        white_y = 0x80;
        clr_x = 0x80;
        clr_y = 0x80;
    }
    else if(y==2)
    {
        white_x = (0x80+x-1);
        white_y = 0x90;
        clr_x = 0x80;
        clr_y = 0x90;
    }
    else if(y==3)
    {
        white_x = (0x88+x-1);
        white_y = 0x80;
        clr_x = 0x88;
        clr_y = 0x80;
    }
    else if(y==4)
    {
        white_x = (0x88+x-1);
        white_y = 0x90;
        clr_x = 0x88;
        clr_y = 0x90;
    }
    if(clear==0)                     //要反白时,先将整行的液晶全部清成不反白(此处行指y)
    {
        for(i=0;i<16;i++ )                //16行
        {
            Write_Cmd(clr_y++);	         //设置绘图区的Y地址坐标0
            Write_Cmd(clr_x);		 //设置绘图区的X地址坐标0
            for(j=0;j<16;j++)		 //
            {
                Write_Data(0x00);	 //清成不反白
                //nop();
            }
        }
    }
    //nop();
    for(i=0;i<16;i++ )			//16行,因为是16*16汉字
    {
        Write_Cmd(white_y++);		//设置绘图区的Y地址坐标0
        Write_Cmd(white_x);		//设置绘图区的X地址坐标0
        for(j=0;j<white_end_x;j++)	//
        {
            if(clear==1)
            {
                Write_Data(0x00);       //取消这一行的8个点的反白,液晶地址自动加1
                //(此处行指一个一个液晶点所组成的行)
            }
            else
            {
                Write_Data(0xff);       //反白这一行的8个点,液晶地址自动加1
                //(此处行指一个一个液晶点所组成的行)
            }
            // nop();
        }
    }
    Write_Cmd(0x30);                   //回到基本模式
}




/**************************************************
函数名称:draw_dot
功    能:任意位置打点    
参    数:坐标xy  color 0反白 1复原
返回值  :无
**************************************************/
void draw_dot(unsigned char x,unsigned char y,unsigned char color)
{
    unsigned char  row,tier,tier_bit;
    unsigned char  read_old_h,read_old_l;
   Write_Cmd(0x34);
   Write_Cmd(0x36);
    tier=x>>4;
    tier_bit=x&0x0f;
    if(y<32)
        row=y;
    else
    {
        row=y-32;
        tier+=8;
    }
   Write_Cmd(row+0x80);
   Write_Cmd(tier+0x80);
  lcd_read_data();
    read_old_h=lcd_read_data();
    read_old_l=lcd_read_data();
   Write_Cmd(row+0x80);
   Write_Cmd(tier+0x80);
    
    if(tier_bit<8)
    {
        switch(color)
        {
            case 0:read_old_h&=(~(0x01<<(7-tier_bit)));break;
            case 1:read_old_h|=(0x01<<(7-tier_bit))   ;break;
            case 2:read_old_h^=(0x01<<(7-tier_bit))   ;break;
            default:break;
        }
        Write_Data(read_old_h);
        Write_Data(read_old_l);
        
    }
    else
    {
        switch(color)
        {
            case 0:read_old_l&=(~(0x01<<(15-tier_bit)));break;
            case 1:read_old_l|=(0x01<<(15-tier_bit))   ;break;
            case 2:read_old_l^=(0x01<<(15-tier_bit))   ;break;
            default:break;
        }
        
        Write_Data(read_old_h);
        Write_Data(read_old_l);
    }
    
   Write_Cmd(0x30);
    
}




/**************************************************
函数名称:draw_level_line
功    能:水平线    
参    数:起始x0 x1 和y坐标  color 0反白 1复原
返回值  :无
**************************************************/
void draw_level_line(unsigned char x0,unsigned char x1,unsigned char y,unsigned char color)
{
    unsigned char temp;
    if(x0>x1)
    {
        temp=x1;
        x1=x0;
        x0=temp;
    }
    for(;x0<=x1;x0++)
    {
        draw_dot(x0,y,color);
    }
    
}



/**************************************************
函数名称:draw_vertical_line
功    能:垂直线    
参    数:起始y0 y1 和x坐标  color 0 1
返回值  :无
**************************************************/
void draw_vertical_line(unsigned char y0,unsigned char y1,unsigned char x,unsigned char color)
{
    unsigned char temp;
    if(y0>y1)
    {
        temp=y1;
        y1=y0;
        y0=temp;   
    }
    for(;y0<=y1;y0++)
        draw_dot(x,y0,color);
}




/**************************************************
函数名称:draw_line
功    能:画任意直线    
参    数:startx starty endx endy    color 
返回值  :无
**************************************************/
void draw_line(unsigned char startx,unsigned char starty
               ,unsigned char endx,unsigned char endy,unsigned char color)
{
    int t,distance;
    int x=0,y=0,delta_x,delta_y;
    int incx,incy;
    delta_x=endx-startx;
    delta_y=endy-starty;
    
    if(delta_x>0)
    {
        incx=1;
    }
    else if(delta_x==0)
    {
        draw_vertical_line(startx,starty,endy,color);
        return;
    }
    else
    {
        incx= -1;
    }
    if(delta_y>0)
    {
        incy=1;
    }
    else if(delta_y==0)
    {
        draw_level_line(startx,endx,starty,color);
        return;
    }
    else
    {
        incy=-1;
    }
    delta_x=my_abs(delta_x);
    delta_y=my_abs(delta_y);
    if(delta_x>delta_y)
    {
        distance=delta_x;
    }
    else
    {
        distance=delta_y;
    }
    draw_dot(startx,starty,color);
    for(t=0;t<=distance+1;t++)
    {
        draw_dot(startx,starty,color);
        x+=delta_x;
        y+=delta_y;
        if(x>distance)
        {
            x-=distance;
            startx+=incx;
        }
        if(y>distance)
        {
            y-=distance;
            starty+=incy;
        }
        
    }
    
}




/**************************************************
函数名称:contin_line
功    能:连续输入Y 连成线,Y为0-63注意输入进来时做转换  线从startx至endx 0-127为最大范围    
参    数:startx  endx endy    color 
返回值  :无
**************************************************/
void contin_line(unsigned char startx ,unsigned char endx ,unsigned char Y)
{
     static unsigned char i=0,y0=0,y1=0,f=1; //i连线开始坐标
     if(f)                                     //用于将startx只在第一次传递给i
     {
          f=0;
        i = startx;
     }
    // x0=i;
     y1=Y;                              //画该函数的图形,完全连接了,
     if(i!=startx)                      //保证不与00坐标连到一起
          draw_line(i-1,y0,i,y1,1);
     //x1=x0;
     y0=y1;
      
     if(i++>=endx)  //连线结束坐标
     {
          
          i=startx;
          Clear_GDRAM();
     }
}




/**************************************************
函数名称:draw_curve
功    能:将一系列无符号字符数组str的数 大小0-63注意传递前做处理,曲线开始位置 xstart 数组大小size    
参    数:起点startx    size  *str
返回值  :无
**************************************************/
void draw_curve(unsigned char xstart, unsigned char size ,unsigned char *str)
{
    static unsigned char i=0,endx=0,y0=0,y1=0,f=1;
    if(f) //只传递一次
    {
        f=0;
        i = xstart;
    }
    
    endx = xstart + size;
    if(endx>=128)  //保证图形不溢出
        endx =127;
    for(;i<endx;i++)
    {
        y1 = str[i-xstart];
        if(i!=xstart)
            draw_line(i-1,y0,i,y1,1);
        y0 = y1;
    }
    i = xstart;  
    //Clear_GDRAM();
    
}





/**************************************************
函数名称:draw_circle
功    能:画任意圆    
参    数:圆心坐标xy 半径r    color 
返回值  :无
**************************************************/
void draw_circle(unsigned char x,unsigned char y,unsigned char r,unsigned char color)
{
    unsigned char a,b;
    float c;
    a = 0;
    b = r;
    //  c = 1.25 - r;
    c = 3 - 2*r;
    while(a < b)
    {
        draw_dot(x+a,y+b,color);
        draw_dot(x-a,y+b,color);
        draw_dot(x+a,y-b,color);
        draw_dot(x-a,y-b,color);
        
        draw_dot(x+b,y+a,color);
        draw_dot(x-b,y+a,color);
        draw_dot(x+b,y-a,color);
        draw_dot(x-b,y-a,color);
        
        if(c < 0)
        {
            c = c+4*a + 6; 
        }
        else
        {
            c= c + 4*(a - b) + 10;  
            b-=1;
        }
        a = a + 1;  //控制打点间隔
        
    }
    if(a == b)
    {
        draw_dot(x+a,y+b,color);
        draw_dot(x-a,y+b,color);
        draw_dot(x+a,y-b,color);
        draw_dot(x-a,y+b,color);
        
        draw_dot(x+b,y+a,color);
        draw_dot(x-b,y+a,color);
        draw_dot(x+b,y-a,color);
        draw_dot(x-b,y-a,color);
        
    }
}

⌨️ 快捷键说明

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