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

📄 ht1621formsp430.c

📁 ht1621 的MSP430的C驱动程序
💻 C
字号:
           /********************************************************************************
                  *program name:lcdht1621.c
                  *function: TEST TO HT1621(drive)
                  *Design: Zhengyingjun
                  *Date:2005-06-28
                  *********************************************************************************/
                  #include<msp430x14x.h>
                  #include<intrinsics.h>
                  #define uchar unsigned char 
                  #define uint unsigned int
                  /*********************************************************
                  * 接口定义:DATA<--->P2.5; CS<--->P2.6; WR<--->P2.7 *
                  **********************************************************/

                  #define BIAS 0X52 /*定义1 3 偏压4 背极*/
                  #define XTAL32 0X28 /*使用外部晶振*/
                  #define RC256 0X30 /*使用内部256KRC 振荡器*/
                  #define SYSEN 0X02 /*打开振荡发生器*/
                  #define LCDON 0X06 /*打开LCD*/
                  #define SYSDIS 0X00 /*关闭振荡发生器*/
                  #define LCDOFF 0X04 /*显示关闭*/
                  #define TONE4 0X80 /*设置BZ 输出频率为4K*/
                  #define TONEON 0X12 /*打开BZ 音频输出*/
                  #define TONEOFF 0X10 /*关闭BZ 音频输出*/
                  #define CLRWDT 0X1c /*清零WDT*/
                  #define F1 0X40 /*WDT设置为4 秒溢出*/
                  #define IRQEN 0X10 /*IRQ 输出禁止*/
                  #define IRQDIS 0X00 /*IRQ 输出允许*/
                  #define WDTEN 0X0e /*打开WDT*/
                  #define WDTDIS 0X0a /*关闭WDT*/
                  #define TIMERDIS 0X08 /*关闭时基输出*/
                  uchar table[32]={ 
                  0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x67,0xbf,0x86,0xdb,0xcf,0xe6,0xed,
                  0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x67,0xbf,0x86,0xdb,0xcf,0xe6,0xed 
                  };
                  void Start_spi(void);
                  void Delay(void);
                  void Delay1s(void);
                  void SENDCOMA(uchar com);
                  void SENDCOMB(uchar adr);
                  void SENDCOMC(uchar com);
                  void disp(uchar dat);
                  void DISP_ALL(uchar data);
                  void SendByte(uchar dat);
                  void SendBit(uchar dat,uchar bitcnt);

                  /**********************************************************************
                  延时函数
                  ***********************************************************************/
                  void Delay(void)
                  {
                  uchar i;
                  for(i=0;i<10;i++); /*用于调整CLK 脉冲宽度*/
                  }
                  /**********************************************************************
                  长延时函数
                  ***********************************************************************/
                  void Delay1s(void)
                  {
                  uchar i;
                  uint j;
                  for(i=0;i<100;i++)
                  for(j=0;j<1300;j++);
                  }
                  /*********************************************************************
                  发送命令函数A类
                  发送HT1621 命令时要先发送ID 值,及命令字用于设置HT1621.
                  *********************************************************************/
                  void SENDCOMA(uchar com)
                  {
                  Start_spi();
                  SendBit(0X80,4); /*发送设置命令ID=100 0*/
                  SendByte(com); /*发送命令字*/
                  }
                  /*********************************************************************
                  发送命令函数B 类
                  发送HT1621 命令时要先发送ID 值,后发送要写入数据起始地址,
                  用于对RAM 写操作(调用此函数后即可发送数据) adr 是高5 位有效
                  *********************************************************************/
                  void SENDCOMB(uchar adr)
                  {
                  Start_spi();
                  SendBit(0XA0,4); /*发送写显示RAM 命令ID=101 0*/
                  SendBit(adr,5); /*指定写入地址*/
                  }

                  /*********************************************************************
                  发送命令函数(C 类)
                  发送HT1621 命令时要先发送ID 值.然后发送C 类的命令字
                  *********************************************************************/
                  void SENDCOMC(uchar com)
                  {
                  Start_spi();
                  SendBit(0X90,4); /*发送命令ID=100 1*/
                  SendByte(com); /*发送命令字*/
                  }
                  /**********************************************************************
                  向显示缓冲区填充,以最简便的形式显示数据
                  **********************************************************************/
                  void disp(uchar dat)
                  {
                  uchar i;
                  SENDCOMB(0x00); /*把数据指针指回0 接着写入数据*/
                  for(i=0;i<16;i++) /*写入16 字节数据*/
                  {
                  SendByte(dat); /*写入数据*/
                  }
                  }
                  /******************************************************
                  全显示
                  ******************************************************/
                  void DISP_ALL(uchar data)
                  {
                  SENDCOMA(BIAS); /*设置偏压,背极数*/
                  SENDCOMA(RC256); /*设为内晶振256K*/
                  SENDCOMA(SYSEN); /*启动振荡器*/
                  SENDCOMA(LCDON); /*显示使能*/
                  SENDCOMA(TIMERDIS); /*禁止时基输出*/
                  disp(data); /*输出全显数据*/
                  }

                  /**********************************************************************
                  主函数
                  **********************************************************************/
                  void main()
                  {
                  uchar i,temp;
                  WDTCTL=WDTPW+WDTHOLD;
                  P2DIR|=BIT5+BIT6+BIT7;
                  while(1)
                  {
                  for(i=0;i<1;i++)
                  {
                  temp=0x88;//table[i];
                  DISP_ALL(temp); /*全显示测量*/
                  // Delay1s(); 
                  }
                  }
                  }

                  /************************************************************************
                  名称: 发送数据位
                  ************************************************************************/

                  void SendBit(uchar dat,uchar bitcnt)
                  {
                  uchar i;
                  for(i=0;i<bitcnt;i++)
                  {
                  if(( dat & 0X80 ) == 0)
                  P2OUT&=~BIT5;//SDA_PORT = 0;
                  else
                  P2OUT|=BIT5;//SDA_PORT = 1; /*发送数据由高位到低位传送*/
                  Delay();
                  P2OUT|=BIT7;//CLK_PORT = 1; /*置时钟线为高通知被控器开始接收数位*/
                  Delay();
                  P2OUT&=~BIT7;//CLK_PORT = 0; /*钳住总线准备下一个数据位*/
                  dat=dat<<1; /*发送数据左移一位*/
                  }
                  }
                  /**********************************************************************
                  起动ht1621
                  **********************************************************************/
                  void Start_spi(void)
                  {
                  P1OUT|=BIT6;//CS_PORT=1;
                  P1OUT|=BIT7;//CLK_PORT=1;
                  P1OUT|=BIT5;//SDA_PORT=1;
                  Delay();
                  P1OUT&=~BIT6;//CS_PORT=0; 
                  P1OUT&=~BIT6;//CS_PORT=0; 
                  P1OUT&=~BIT7;//CLK_PORT=0; 
                  P1OUT&=~BIT7;//CLK_PORT=0; 
                  }
                  /************************************************************************
                  发送字节函数,向ht1621 发送字节数据数据单元dat
                  ************************************************************************/
                  void SendByte(uchar dat)
                  {
                  SendBit(dat,8); /*发送字节*/
                  }


⌨️ 快捷键说明

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