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

📄 main.c

📁 根据键盘的控制
💻 C
字号:
/*****************************************************************************
* 文件名称:
*         main.c
* 文件说明:
*        根据键盘的控制,移动字符串"Hello"或者"华东师范大学",行列键盘的"7"用
*     于字符串左移,"8"用于字符串下移,"9"用于字符串右移,"5"
*     用于字符串上移。按键每按一下向各自的方向移动一个点阵的
*     位置。
********************************************************************************/
#define MSP430F449_H 0
#include <msp430x44x.h>

#ifndef LCD_IN_USE
#include "lcd.c"
#endif

#ifndef KEY_BOARD
#include "keyboard12.c"
#endif
/*******************************************************************************/
#define TOP    0         // 竖直方向零点
#define BOTTOM 64        // 竖直方向坐标最大值
#define LEFT   0         // 水平方向坐标最小值
#define RIGHT  128       // 水平方向坐标最大值
#define EN_WIDTH 40      // Hello 字符串的长度
#define CH_WIDTH 96      // 中文字符串的长度
#define OP_CHINESE    1  // 选择显示中文字符
#define OP_ENGLISH    2  // 选择显示英文字符
void drawStr(unsigned char x,unsigned char y);  
void op_Select(char OP);
unsigned char showData[]={//16*8点阵的“Hello”
         
          0x08,0x20,0xF8,0x3F,0x08,0x21,0x00,0x01,
          0x00,0x01,0x08,0x21,0xF8,0x3F,0x08,0x20,//H (0)
          
          0x00,0x00,0x00,0x1F,0x80,0x22,0x80,0x22,
          0x80,0x22,0x80,0x22,0x00,0x13,0x00,0x00,//e (1)
          
          0x00,0x00,0x08,0x20,0x08,0x20,0xF8,0x3F,
          0x00,0x20,0x00,0x20,0x00,0x00,0x00,0x00,//l (2)
          
          0x00,0x00,0x08,0x20,0x08,0x20,0xF8,0x3F,
          0x00,0x20,0x00,0x20,0x00,0x00,0x00,0x00,//l (3)
          
          0x00,0x00,0x00,0x1F,0x80,0x20,0x80,0x20,
          0x80,0x20,0x80,0x20,0x00,0x1F,0x00,0x00,//o (4)
        
};
unsigned char showData_1[]={ //16*16点点阵的"华东师大"
          
          0x20,0x00,0x10,0x04,0x08,0x04,0xFC,0x05,
          0x03,0x04,0x02,0x04,0x10,0x04,0x10,0xFF,
          0x7F,0x04,0x88,0x04,0x88,0x04,0x84,0x04,
          0x86,0x04,0xE4,0x04,0x00,0x04,0x00,0x00,//华 (0)
          
          0x00,0x00,0x04,0x00,0x04,0x20,0xC4,0x18,
          0xB4,0x0E,0x8C,0x04,0x87,0x20,0x84,0x40,
          0xF4,0xFF,0x84,0x00,0x84,0x02,0x84,0x04,
          0x84,0x18,0x04,0x30,0x00,0x00,0x00,0x00,//东 (1)
          
          0x00,0x40,0xFC,0x27,0x00,0x10,0x00,0x0E,
          0xFF,0x01,0x00,0x00,0xF2,0x0F,0x12,0x00,
          0x12,0x00,0x12,0x00,0xFE,0xFF,0x12,0x00,
          0x12,0x04,0x12,0x08,0xF2,0x07,0x00,0x00,//师 (2)
          
          0x44,0x08,0x94,0x09,0xA4,0xF8,0x64,0x04,
          0x04,0x03,0x0F,0x00,0x04,0x00,0xE4,0x3F,
          0x24,0x40,0x2C,0x40,0x2F,0x42,0x24,0x46,
          0xE4,0x43,0x04,0x70,0x04,0x00,0x00,0x00,//范 (3)
          
          0x20,0x00,0x20,0x80,0x20,0x40,0x20,0x20,
          0x20,0x10,0x20,0x0C,0xA0,0x03,0x7F,0x00,
          0xA0,0x01,0x20,0x06,0x20,0x08,0x20,0x30,
          0x20,0x60,0x20,0xC0,0x20,0x40,0x00,0x00,//大 (4)
          
          0x40,0x00,0x30,0x02,0x10,0x02,0x12,0x02,
          0x5C,0x02,0x54,0x02,0x50,0x42,0x51,0x82,
          0x5E,0x7F,0xD4,0x02,0x50,0x02,0x18,0x02,
          0x57,0x02,0x32,0x02,0x10,0x02,0x00,0x00 //学 (5)

};
/*******************************************************************************
*  用于取得一个字节的低N位的数组
*********************************************************************************/
const unsigned char mapTbl[]=
{
          0x01,0x03,0x07,0x0f,
          0x1f,0x3f,0x7f,0xff
}; 

unsigned char px,                               // 显示字符串的X位置
              py,                               // 显示字符串的Y位置
              width;                            // 字符串的宽度
unsigned char * showBuf;                        // 显示数据缓冲区
/*********************************************************************************
*  main函数
***********************************************************************************/
void main()
{
     WDTCTL = WDTHOLD + WDTPW;                    // 关闭看门狗
     init_LCD();                                  // 初始化点阵LCD
     init_Keyboard();                             // 初始化键盘
     op_Select(OP_ENGLISH);                       // 选择显示字符类型
     drawStr(px,py);                              //显示字符串     
     while(1)
     {
             key_Event();                         //检测按键事件
             if(key_Flag== 0x01)                  //有按键 
             {                
                key_Flag=0x00;                    //清除按键标识
                if(key_val==0x05)                 //上移
                {                
                    if(px>TOP)                    //如果可以上移
                    {                  
                        clear_Rect(px/8,0,3,64);  //清除chip1可能有数据的三个区域
                        clear_Rect(px/8,64,3,64); //清除chip2可能有数据的三个区域
                        drawStr(px-1,py);         //显示字符
                        px = px-1;
                    }
                }else if (key_val==0x07)          //左移
                {         
                    if(py>LEFT)                   //如果可以左移
                    {                  
                         clear_Rect(px/8,0,3,64);
                         clear_Rect(px/8,64,3,64);
                         drawStr(px,py-1);
                         py=py-1;
                    }
                }else if (key_val==0x08)          //下移
                {         
                    if(px<BOTTOM-16)              //如果可以下移
                    {             
                          clear_Rect(px/8,0,3,64);
                          clear_Rect(px/8,64,3,64);
                          drawStr(px+1,py);
                          px = px+1;
                    }
                }else if (key_val==0x09)          //右移
                {         
                    if (py<RIGHT - CH_WIDTH)      //如果可以右移
                    {     
                       clear_Rect(px/8,0,3,64);
                       clear_Rect(px/8,64,3,64);
                       drawStr(px,py+1);
                       py = py+1;
                   }
               }
             }   
   }
}

/******************************************************************************
*  在指定的位置显示字符串"Hello" 或者 "华东师范大学"
*  x是行坐标,y是列坐标,0=<x<=RIGHT - 字符串长度
*     0=<y<=BOTTOM-字符串高度
********************************************************************************/
void drawStr(unsigned char x,unsigned char y)
{
     unsigned char tmpv,t1,t2,t3;
    
     if((x&0x07)==0x00)                           //如果刚好位于某一页的开始
     {                          
      for(tmpv=y;tmpv<y+width;tmpv++)
      {
          move_To(x/8,tmpv);                      //移动到指定页
          write_Data(showBuf[2*(tmpv-y)]);        //填写数据
          move_To(x/8+1,tmpv);                    //由于显示的字符是16*N点阵,占用两页,现在移动到下页
          write_Data(showBuf[2*(tmpv-y)+1]);      //填写数据
       }
     }else{
        t1 = (x&0x07);
        for(tmpv=y;tmpv<y+width;tmpv++)
        {
          /* 实验使用的点阵LCD是逆向显示的,关于逆向显示的含义请参看实验中的实验说明 */
          move_To(x/8,tmpv);                      //移动位置
          t2 = showBuf[2*(tmpv-y)];               //取得要显示的数据
          t2 = t2 & mapTbl[8-t1];                 //获取数据的低(8-t1)位
          t2= t2<<t1;                             //左移t1位
           
          write_Data(t2);                         //填写数据
          move_To(x/8+1,tmpv);                    //移动
          t2 = showBuf[2*(tmpv-y)];               //取得数据
          t2= t2>>(8-t1);                         //右移(8-t1)
          t3 = showBuf[2*(tmpv-y)+1];
          t3 = t3 & mapTbl[8-t1];                 //取得低(8-t1)位
          t3=t3<<t1;                              //右移t1位
          t2=(t2+t3);                             //组合成要显示的数据
          write_Data(t2);                         //显示数据
          move_To(x/8+2,tmpv);                    //移动到下一页  
          t2 = showBuf[2*(tmpv-y)+1];
          t2=t2>>(8-t1);                          //右移(8-t1)位
          write_Data(t2);                         //填写数据
       } 
     }
}
/********************************************************************************
*
*  根据选择的是显示中文还是英文,设置不同的显示变量
*
********************************************************************************/
void op_Select(char OP)
{
     if(OP==OP_CHINESE)
     {
        width = CH_WIDTH;                            //  设定字符串长度
        px=24;                                       // 初始化显示位置,X坐标
        py=16;                                       // Y坐标
        showBuf = showData_1;
     }
     else if (OP==OP_ENGLISH)
     {
        width = EN_WIDTH;                            //  设定字符串长度
        px=24;                                       // 初始化显示位置,X坐标
        py=40;                                       // Y坐标
        showBuf = showData;
     } 
}

⌨️ 快捷键说明

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