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

📄 lcd显示主程序.c

📁 利用MSP430F149和HG192646液晶模块显示心电波形和各种字符
💻 C
📖 第 1 页 / 共 3 页
字号:
 for(i=0;i<16;i++)                               // 下半部分
 {Wrdata(Hzk[x]);
  x++;
  col++;
  if (col==LCMLIMIT)
  {col=0;row++;row++;}                           // 下一列,如果列越界换行
   if (row>7) 
     row=1;                                      // 如果行越界,返回首行 
 }                                               // 下半个字符输出结束 
 row = bakery;
}                                                // 整个字符输出结束 

/***************************************************************************
 清屏,全屏幕清零
***************************************************************************/
void Lcmcls( void )
{for(row=0;row<8;row++)
 for(col=0;col<LCMLIMIT;col++) 
 Wrdata(0);
}

/***************************************************************************
 从液晶片上读数据,保留在全局变量中
***************************************************************************/
void Rddata(void)
{Locatexy();                                     // 坐标定位,返回时保留分区状态不变 
//P2OUT = 0xFF;
 P1OUT |= BIT5;                                  // 数据
 P1OUT |= BIT6;                                  // 读数据
 P1OUT |= BIT7;                                  // 读入到LCM
 P1DIR &= ~BIT0;
 _NOP();
 cbyte = P2IN;                                   // 虚读一次 
 P1OUT &= ~BIT7;
 Locatexy();                                     // 坐标定位,返回时保留分区状态不变 
 //P2OUT = 0xFF;
 _NOP();
 P1OUT |= BIT5;                                  // 数据
 P1OUT |= BIT6;                                  // 读数据
 P1OUT |= BIT7;                                  // 读入到LCM
 _NOP();
 cbyte = P2IN;                                   // 从数据口读数据,真读 
 P1OUT &= ~BIT7;
 P1DIR &= ~BIT0;
}

/***************************************************************************
 数据写输出
***************************************************************************/
void Wrdata(unsigned char X)
{Locatexy();                                     // 坐标定位,返回时保留分区状态不变 
 wtcom();
 P1OUT |= BIT5;                                  // 数据输出
 P1OUT &= ~BIT6;                                 // 写输出  
 P2OUT = X;                                      // 数据输出到数据口 
 P1OUT |= BIT7;                                  // 读入到LCM
 _NOP();
 P1OUT &= ~BIT7;
}

/***************************************************************************
 命令输出,每次输出一个分区控制口
***************************************************************************/
// void Wrcmd(unsigned char X)
// {Locatexy();                                    /*确定分区,返回时保留分区状态不变 */
//  wtcom();                                       /*等待LCM操作允许 */
//  Dilcm = 0;                                     /*数据操作 */
//  Rwlcm = 0;                                     /*写输出   */
//  Datalcm = X;                                   /*数据输出到数据口 */
//  Elcm = 1;_nop_();Elcm = 0;                     /*读入到LCM*/
// }

/***************************************************************************
 命令输出到左区控制口
***************************************************************************/
void WrcmdL(unsigned char X)
{lcdbusyL();                                     // 确定分区,返回时保留分区状态不变
 P1OUT &= ~BIT5;                                 // 命令操作 
 P1OUT &= ~BIT6;                                 // 写输出   
 P2OUT = X;                                      // 数据输出到数据口 
 P1OUT |= BIT7;                                  // 读入到LCM
 _NOP();
 P1OUT &= ~BIT7; 
}

/***************************************************************************
 命令输出到中区控制口 
***************************************************************************/
void WrcmdM(unsigned char X)

{lcdbusyM();                                     // 确定分区,返回时保留分区状态不变
 P1OUT &= ~BIT5;                                 // 命令操作 
 P1OUT &= ~BIT6;                                 // 写输出   
 P2OUT = X;                                      // 数据输出到数据口 
 P1OUT |= BIT7;                                  // 读入到LCM
 _NOP();
 P1OUT &= ~BIT7; 
}

/***************************************************************************
 命令输出到右区控制口 
***************************************************************************/
void WrcmdR(unsigned char X)
{lcdbusyR();                                     // 确定分区,返回时保留分区状态不变 
 P1OUT &= ~BIT5;                                 // 命令操作 
 P1OUT &= ~BIT6;                                 // 写输出   
 P2OUT = X;                                      // 数据输出到数据口 
 P1OUT |= BIT7;                                  // 读入到LCM
 _NOP();
 P1OUT &= ~BIT7; 
}

/***************************************************************************
 分区操作允许等待,返回时保留分区选择状态 
***************************************************************************/
void lcdbusyL(void)
{P1OUT &= ~BIT4;
 P1OUT &= ~BIT3;
 wtcom();                                       // waitting for enable 
}

void lcdbusyM(void)
{P1OUT |= BIT4;
 P1OUT &= ~BIT3;
 wtcom();                                      // waitting for enable 
}

void lcdbusyR(void)
{P1OUT &= ~BIT4;
 P1OUT |= BIT3;
 wtcom();                                      // waitting for enable 
}

void wtcom(void)
{P1OUT &= ~BIT5;                               // CLR DI  
 P1OUT |= BIT6;                                // SETB RW  
 //P2OUT = 0xFF;                               // MOV DATA_LCM,#0FFH 
 P1DIR &= ~BIT0;  
 P1OUT |= BIT7;
 _NOP();        
 while(P2IN & Lcdbusy);
 P1OUT &= ~BIT7;
 P1DIR |= BIT0;
}

/***************************************************************************
 根据设定的坐标数据,定位LCM上的下一个操作单元位置
***************************************************************************/
void Locatexy(void)
{unsigned char  x,y;
 switch (col&0xc0)                             // col.and.0xC0 
 {case 0:  {lcdbusyL();break;}                 // 左区 
  case 0x40: {lcdbusyM();break;}               // 中区 
  case 0x80: {lcdbusyR();break;}               // 右区 
 }
 x = col&0x3F|SETX;                            // col.and.0x3f.or.setx 
 y = row&0x07|SETY;                            // row.and.0x07.or.sety 
 wtcom();                                      // waitting for enable  
 P1OUT &= ~BIT5;                               // CLR DI 
 P1OUT &= ~BIT6;                               // CLR RW 
 P2OUT = y;                                    // MOV P0,Y 
 P1OUT |= BIT7;
 _NOP();
 P1OUT &= ~BIT7;
 wtcom();                                      // waitting for enable  
 P1OUT &= ~BIT5;                               // CLR DI 
 P1OUT &= ~BIT6;                               // CLR RW 
 P2OUT = x;                                    // MOV P0,Y 
 P1OUT |= BIT7;
 _NOP();
 P1OUT &= ~BIT7;
}

/***************************************************************************
 时钟初始化 
***************************************************************************/
void InitCLK(void)
{unsigned int iq0;
 BCSCTL1 &= ~XT2OFF;                          // 打开XT2振荡器
 do
 {IFG1 &= ~OFIFG;                             // 清除振荡器失效标志
  for(iq0=0xFF;iq0>0;iq0--);                  // 延时,等待XT2起振
 }
 while((IFG1 &OFIFG)!= 0);                    // 判断XT2是否起振
 BCSCTL2=SELM_2+SELS;                         // MCLK SMCLK的时钟源为TX2CLK
}

/***************************************************************************
 端口初始化 
***************************************************************************/
void InitPort(void)
{P1DIR = 0xFF;                                // 设置P1~P2端口为输出方式
 P2DIR = 0xFF;                                
 P1SEL = 0;                                   // 将P1~P2端口设置为一般I/O口
 P2SEL = 0;
}

/***************************************************************************
 液晶屏初始化 
***************************************************************************/
void Lcminit(void)
{cbyte = DISPOFF;                            // 关闭显示屏 
 WrcmdL(cbyte);
 WrcmdM(cbyte);
 WrcmdR(cbyte);
 cbyte = DISPON;                             // 打开显示屏 
 WrcmdL(cbyte);
 WrcmdM(cbyte);
 WrcmdR(cbyte);
 cbyte = DISPFIRST;                          // 定义显示起始行为零 
 WrcmdL(cbyte);
 WrcmdM(cbyte);
 WrcmdR(cbyte);
 Lcmcls();                                   // 清屏
 col=0;                                       
 row=0;
 Locatexy();
}

/***************************************************************************
 延时 
***************************************************************************/
void Delay(unsigned char MS)
{unsigned char us,usn;
 while(MS!=0)
 {usn = 4;
  while(usn!=0)
  {us=0xf0;
    while (us!=0){us--;};
    usn--;
  }
  MS--;
 }
}

/***************************************************************************
 定义字符串数组 
***************************************************************************/
unsigned char STR1[]={
  0x80,0x81,0x82,0x83,0x84,0x85,
  0x86,0x87,0x88,0x89,0x8a,0x8B
};
   
unsigned char STR2[]="Our friend over the wold";
unsigned char STR3[]="Program by Keil C51 6.12";
unsigned char STR4[]="Thank you ~v~ 1234567890";

/***************************************************************************
 定义中文字库 
***************************************************************************/
unsigned char Hzk[]={
/*茂 C3515 0 */
  0x04,0x04,0xC4,0x44,0x5F,0x44,0x44,0xF4,
  0x44,0x4F,0x54,0x64,0x44,0x46,0x04,0x00,
  0x80,0x40,0x3F,0x00,0x40,0x40,0x20,0x20,
  0x13,0x0C,0x18,0x24,0x43,0x80,0xE0,0x00,
/*兴 C4843 1 */
  0x00,0xFE,0x4A,0x4A,0x00,0xFE,0xEA,0xAA,
  0xAA,0xFE,0x00,0x4A,0x4A,0xFE,0x00,0x00,
  0x02,0x83,0x42,0x22,0x12,0x1B,0x02,0x02,
  0x02,0x0B,0x12,0x22,0x62,0xC3,0x02,0x00,
/*国 C2590 2 */
  0x00,0xFE,0x02,0xD2,0x52,0x52,0xD2,0x3E,
  0xD2,0x16,0x1A,0x12,0xFF,0x02,0x00,0x00,
  0x00,0xFF,0x50,0x53,0x52,0x4A,0x6B,0x50,
  0x4F,0x54,0x7B,0x40,0xFF,0x00,0x00,0x00,
/*际 C2842 3 */
  0x00,0xFE,0x22,0xD2,0x0E,0x20,0xB8,0x4F,
  0xB2,0x9E,0x80,0x9F,0x72,0x8A,0x06,0x00,
  0x00,0xFF,0x04,0x08,0x07,0x21,0x12,0x0A,
  0x46,0x82,0x7E,0x06,0x0A,0x12,0x31,0x00,
/*( C0308 4 */
  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  0x00,0xC0,0x30,0x08,0x04,0x02,0x00,0x00,
  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  0x00,0x03,0x0C,0x10,0x20,0x40,0x00,0x00,
/*广 C2567 5 */
  0x00,0x00,0xFC,0x44,0x54,0x54,0x7C,0x55,
  0xD6,0x54,0x7C,0x54,0x54,0x44,0x44,0x00,
  0x80,0x60,0x1F,0x80,0x9F,0x55,0x35,0x15,
  0x1F,0x15,0x15,0x35,0x5F,0x80,0x00,0x00,
/*东 C2211 6 */
  0x00,0x08,0xE8,0xA8,0xA8,0xA8,0xA8,0xFF,
  0xA8,0xA8,0xA8,0xA8,0xE8,0x0C,0x08,0x00,
  0x00,0x40,0x23,0x12,0x0A,0x06,0x02,0xFF,
  0x02,0x06,0x0A,0x12,0x23,0x60,0x20,0x00,
/*) C0309 7 */
  0x00,0x00,0x02,0x04,0x08,0x30,0xC0,0x00,
  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  0x00,0x00,0x40,0x20,0x10,0x0C,0x03,0x00,
  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
/*有 C5148 8 */
  0x04,0x04,0x04,0x84,0xE4,0x3C,0x27,0x24,
  0x24,0x24,0x24,0xF4,0x24,0x06,0x04,0x00,
  0x04,0x02,0x01,0x00,0xFF,0x09,0x09,0x09,
  0x09,0x49,0x89,0x7F,0x00,0x00,0x00,0x00,
/*限 C4762 9 */
  0x00,0xFE,0x02,0x22,0xDA,0x06,0x00,0xFE,
  0x92,0x92,0x92,0x92,0xFF,0x02,0x00,0x00,
  0x00,0xFF,0x08,0x10,0x08,0x07,0x00,0xFF,
  0x42,0x24,0x08,0x14,0x22,0x61,0x20,0x00,
/*公 C2511 10 */
  0x00,0x00,0x80,0x40,0x30,0x0C,0x00,0xC0,

⌨️ 快捷键说明

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