原创 6963c序(包括主程序)

2008-3-31 14:31 3898 6 7 分类: MCU/ 嵌入式

***********************************************************************/
void Write_Char(uchar x,uchar y,uchar ch)
{
 uchar i, dat;
 uint StartAddr,StartAddr1;
 StartAddr=x*240+y;
 StartAddr1=x*240+y+1;
 for(i=0;i<8;i++)
 { 
   dat="ASCII"_DOT_LIB[ch];
      LCD_WriteTCommand3(LCD_ADR_POS,StartAddr,StartAddr>>8);
   LCD_WriteTCommand2(LCD_NOC_WR,dat);
      StartAddr="StartAddr"+30;
 } 
for(i=0;i<8;i++)
 { 
   dat="ASCII"_DOT_LIB[ch][i+8];
      LCD_WriteTCommand3(LCD_ADR_POS,StartAddr1,StartAddr1>>8);
   LCD_WriteTCommand2(LCD_NOC_WR,dat);
   StartAddr1=StartAddr1+30;
 } 
  
}
/********************************************************************************************************/
void ReverseShowChar(uchar x,uchar y,uchar ch)//CGTAB
{
  uchar i, dat;
 uint StartAddr,StartAddr1;
 StartAddr=x*240+y;
 StartAddr1=x*240+y+1;
 for(i=0;i<8;i++)
 { 
      LCD_WriteTCommand3(LCD_ADR_POS,StartAddr,StartAddr>>8);
   dat="ASCII"_DOT_LIB[ch];
      dat=(0xff-dat); //取反
   LCD_WriteTCommand2(LCD_NOC_WR,dat);
      StartAddr="StartAddr"+30;
  }
 for(i=0;i<8;i++)
 {
      LCD_WriteTCommand3(LCD_ADR_POS,StartAddr1,StartAddr1>>8);
  dat=ASCII_DOT_LIB[ch][i+8];
      dat=(0xff-dat); //取反
  LCD_WriteTCommand2(LCD_NOC_WR,dat);
      StartAddr1=StartAddr1+30;
  }
}
/********************************************************************************************************/
/**********************************
//= 函数原型: Pixel(unsigned char PointX,unsigned char PointY, bit Mode)
//= 功    能: 在指定坐标位置显示一个点
//= 参    数: 坐标,显示点或清除点
//= 返 回 值:
//= 函数性质:私有函数
//= 如果显示屏超过了256*256,请修改这个函数 PointX,PointY的类型
//= Mode 1:显示 0:清除该点
**********************************/
void Pixel(unsigned char PointX,unsigned char PointY, bit Mode)
{
    unsigned int StartAddr;
 uchar StartAddrL,StartAddrH;
    unsigned char dat;
    StartAddr=(uint)((uint)PointX*30 + PointY/8 );//grhome
 StartAddrL=StartAddr&0xFF;
 StartAddrH=StartAddr>>8;
    dat="LCD"_BIT_OP+7-PointY%8; //生产位操作命令画点的数据
    if(Mode) dat="dat|0x08";
    LCD_WriteTCommand3(LCD_ADR_POS,StartAddrL,StartAddrH);//设置该点所在单元地址
    LCD_WriteTCommand1(dat); // 利用位操作命令画点
}


/**********************************
//= 函数原型: void line( unsigned char x1, unsigned char y1, unsigned char x2, unsigned char y2, bit Mode)
//= 功    能: 划线函数
//= 参    数: 坐标1,坐标2,显示点或清除点
//= 返 回 值:
//= 函数性质:私有函数
//= 其它:显示点阵不超过255*255
/**********************************/


void line( unsigned char y1,unsigned char x1, unsigned char y2,unsigned char x2,  bit Mode)
{
    unsigned char x,y;
    float k,b;
    if( abs(y1-y2) <= abs(x1-x2) ) // |k|<=1
    {
        k=((float)y2-y1) / ((float)x2-x1) ;
        b="y1-k"*x1;
        if( x1 <= x2 )
        {
            for(x=x1;x<=x2;x++)
            {
                y=(uchar)(k*x+b);
                Pixel(x, y, Mode);
            }
        }
        else
        {
            for(x=x2;x<=x1;x++)
            {
                y=(uchar)(k*x+b);
                Pixel(x, y, Mode);
            }
        }
    }
    else // abs(y1-y2) > abs(x1-x2) |K|>1
    {
        k=((float)x2-x1) / ((float)y2-y1) ;
        b="x1-k"*y1;
        if( y1 <= y2 )
        {
            for(y=y1;y<=y2;y++)
            {
                x=(uchar)(k*y+b);
                Pixel( x , y,Mode );
            }
        }
        else
        {
            for(y=y2;y<=y1;y++)
            {
                x=(uchar)(k*y+b);
                Pixel( x , y,Mode );
            }
        }
    }
}
/***********************************************************************
* 名称:clr()
* 功能:清除某个特定行的数据
* 入口参数:row         要清除数据的行
* 出口参数:无
***********************************************************************/
void clr(uchar row) //清除指定行
{
uchar i;
for(i=0;i<16;i++)
{
Write_Char(i,row,75);
}
}
/********************************************************************************************************/
/***********************************************************************
* 名称:search()
* 功能:寻找该数据在ASCII数组的哪个位置
* 入口参数:adata    要寻找的数据
* 出口参数:返回该数据的位置
//ASCII数组数的位置与 ASCII_DOT_LIB数组位置一一对应
***********************************************************************/
uchar search(uchar adata)  //返回查找ASCII数组数的位置
{
 uchar rdata;
 uchar i;
 for(i=0;i<80;i++)
 {
  if(adata==ASCII){rdata=i;return (rdata);}
 }
}
/***********************************************************************
* 名称:dis_rec(uchar d,uchar l)
* 功能:对寻找到的数据进行显示
* 入口参数:h:数据的长度
   l:列
* 出口参数:
***********************************************************************/
void dis_rec(uchar size,uchar row,uchar buf[],bit mode)
{
uchar rdata_i;
uchar dsize;
uchar i;
uchar x,y,x1,y1;//x,y:起点,x1,y1终点
mode=1;


dsize=(14-((14-size)/2));
//显示字的边框
x=(row*8-1);
y=((dsize-size+1)*8-1);
x1=(x+17);
y1=(y+size*8+1);
line(x,y,x,y1,mode);   //size=4;
line(x,y,x1,y,mode);
line(x1,y,x1,y1,mode);
line(x1,y1,x,y1,mode);
//显示字
for(i=0;i{
rdata_i=search(buf);
Write_Char(dsize-i,row,rdata_i);
}


/********************************************************************************************************/
void keypress(void)
{       if(keycount<5)
        { keyword="hc165"();
       key="keyword";
          if(keyword!=0x00)
             {
             fasterkey++;
             if(fasterkey>3){fasterkey=5;key1st=15;}else key1st=75;
             switch (keyword)
                  {
                   case 0x01:  key8=1;key7=0;key6=0;key5=0;key4=0;key3=0;key1=0;key2=0;break;
                    case 0x02:  key7=1;key6=0;key5=0;key4=0;key3=0;key1=0;key2=0;break;
                    case 0x04:  key6=1;key5=0;key4=0;key3=0;key1=0;key2=0;break;
                    case 0x08:  key5=1;key4=0;key3=0;key1=0;key2=0;break;
                    case 0x10:  key4=1;key3=0;key2=0;key1=0;break;
                    case 0x20:  key3=1;key2=0;key1=0;break;
                    case 0x40:  key2=1;key1=0;key3=0;break;
                    case 0x80:  key1=1;key2=0;key3=0;break;
                    default:    break;
                }
             }
         else {fasterkey=0;key1st=75;} 
        keycount="key1st";
       }        
}
/********************************************************************************************************/
 
void keyoption(void)
{
 keypress();
 ///////////////////////////////////////
  if((key)==0x80)//key1
 {
  rshow(4,2,recbuf1);
 }
 if(((key&0xff)==0x00)&&(key1==1))
 { clr(1);clr(2);clr(3);dis_rec(4,2,recbuf1,1);
   key1=0;
  }
 //////////////////////////////////////
 if((key)==0x40)  //key2
 {
   rshow(4,7,recbuf2);
 }      
 if(((key&0xff)==0x00)&&(key2==1))
 {clr(6);clr(7);clr(8); dis_rec(4,7,recbuf2,1);
   key2=0;
  }
////////////////////////////////////////////
 if((key)==0x20)  //key3
 {
   rshow(4,12,recbuf3);
 }      
 if(((key&0xff)==0x00)&&(key3==1))
 {clr(11);clr(12);clr(13); dis_rec(4,12,recbuf3,1);
   key3=0;
  }
 ////////////////////////////////////////////
  if((key)==0x10)  //key4
 {
   rshow(4,17,recbuf4);
 }      
 if(((key&0xff)==0x00)&&(key4==1))
 {clr(16);clr(17);clr(18); dis_rec(4,17,recbuf4,1);//size_dis(4,7,0,1);
  key4=0;
 }
 ////////////////////////////////////////////
  if((key)==0x08)  //key5
 {
   rshow(4,22,recbuf5);
 }      
 if(((key&0xff)==0x00)&&(key5==1))
 {clr(21);clr(22);clr(23); dis_rec(4,22,recbuf5,1);//size_dis(4,7,0,1);
  key5=0;
 }
  ////////////////////////////////////////////
  if((key)==0x04)  //key4
 {
   rshow(4,27,recbuf6);
 }      
 if(((key&0xff)==0x00)&&(key6==1))
 {clr(26);clr(27);clr(28); dis_rec(4,27,recbuf6,1);//size_dis(4,7,0,1);
  key6=0;
 }


void main(void)

  init();
 light=0;      
    Check_Default_Setting();
 W5100_Init();
  LCD_Initialize();
     LCD_FillAll(0x00);
     lcddis_init();
  while(1)
  {
keyoption();


  /////////////////////////////


 }
 }

PARTNER CONTENT

文章评论1条评论)

登录后参与讨论

用户377235 2014-4-22 20:50

怎么下载不了了?

用户163187 2008-10-15 16:08

bucuo a
相关推荐阅读
用户1094343 2008-05-19 13:05
"震"后感
      随着时间的推移,离5.12的日子越来越远了,那些被埋的人的生还的可能性也越来越小了,每个人都在为那些生还的人感觉幸运,同时也为那些永远离开我们的人感觉痛心!5月19日清晨,北京天安门广场下...
用户1094343 2008-05-04 10:26
编码解码芯片PT2262/PT2272芯片原理简介
   编码解码芯片PT2262/PT2272芯片原理简介 PT2262/2272是台湾普城公司生产的一种CMOS工艺制造的低功耗低价位通用编解码电路,PT2262/2272最多可有12位(A0-A11...
用户1094343 2008-04-29 15:06
阻容降压原理
 阻容降压原理 电容降压的工作原理并不复杂。他的工作原理是利用电容在一定的交流信号频率下产生的容抗来限制最大工作电流。例如,在50Hz的工频条件下,一个1uF的电容所产生的容抗约为3180欧姆。当22...
用户1094343 2008-04-02 16:41
PWM及其实现方法
脉宽调制PWM是开关型稳压电源中的术语。这是按稳压的控制方式分类的,除了PWM型,还有PFM型和PWM、PFM混合型。脉宽宽度调制式(PWM)开关型稳压电路是在控制电路输出频率不变的情况下,通过电压反...
用户1094343 2008-04-01 16:26
PIC单片机选型
PIC12C5XX/CE5XX/CE6XXPIC16C5X/5XX/4XX单片机目前各型号主要功能配置如下:型号振荡EPROM程序区RAM数据区E2PROM数据区定时器A/D(8位)中断电压范围I/O...
用户1094343 2008-04-01 16:00
AVR单片机选型指南
AVR单片机选型指南产品简介与其它8-bit MCU相比,AVR 8-bit MCU最大的特点是:● 哈佛结构,具备1MIPS / MHz的高速运行处理能力;● 超功能精简指令集(RISC),具有32...
EE直播间
更多
我要评论
1
6
关闭 站长推荐上一条 /3 下一条