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

📄 display_ht1621.c

📁 用msp430做的一个超声波雷达测距的源程序
💻 C
字号:
#include "display_ht1621.h"
void delay(unsigned char n);
char tab_disIcon[7][2] =
{
   {0,4},//Heart,
   {0,2},//Am,  
   {0,1},//Pm,  
   {15,4},//Timer,
   {13,4},//Up
   {16,4},//Down
   {7,4},//Col
};

char tab_disdat[16*3] =
     { 
       0x03,
       0x05,
       0x03,  //0
       0x00,
       0x00,
       0x03,  //1
       0x01,
       0x07,
       0x02,  //2
       0x00,
       0x07,
       0x03,  //3
       0x02,
       0x02,
       0x03,  //4
       0x02,
       0x07,
       0x01,  //5
       0x03,
       0x07,
       0x01,  //6
       0x00,
       0x04,
       0x03,  //7
       0x03,
       0x07,
       0x03,  //8
       0x02,
       0x07,
       0x03,  //9
       0x0,
       0x0,
       0x0,  // clear
       0x3, 
       0x7,  
       0x0,  //'E'
       0x3,
       0x6,
       0x0, // 'F'
       0x0,
       0x0,
       0x3,  //'I'
       0x3,
       0x1,
       0x0,  //'L'
       0x1,
       0x3,
       0x1,  //'o'       
       
      }; 
//unsigned int htdis_number    = 0;
//unsigned int htvalue         = 0;
//----------------------------------------------------
//this is a subcountine for the HT1621 model display programme
////////////////////////////////////////////////////////////////////////////////////////////////
void  write_bit(void)
{
       delay(10);
       port_displayout |= ht1621_wr;
       delay(20);            
       port_displayout &= ~ht1621_wr;
}
      
////////////////////////////////////////////////////////////////////////////////////////////////
void  senddata_lcd(unsigned char len,unsigned char data)
{
     unsigned char i,sdata;
     sdata=0;
     if(len!=4)
     {
         for (i=len;i>0;i--) //reverse the data
         {
            sdata<<=1;
            sdata += data & 0x1;
            data>>=1;
         }       
     }
     else sdata=data;
     
     for(i=len;i>0;i--)// send out data
     {
        if((sdata & 0x1)==1)
             port_displayout |= ht1621_dat; 
        else
             port_displayout &= ~ht1621_dat;
        
        write_bit();
                     
        sdata>>=1;     
     }
}

////////////////////////////////////////////////////////////////////////////////////////////////
void WritedataTolcd(unsigned char adr,unsigned char data)
{
     port_displayout &= ~ht1621_cs;     //clear cs= 0
    delay(10);
     senddata_lcd(3,5);
     senddata_lcd(6,adr);
     senddata_lcd(4,data);
     delay(10);
     port_displayout |= ht1621_cs;
}        

////////////////////////////////////////////////////////////////////////////////////////////////
void  ht1621_ramdump(unsigned char data)
{
       unsigned char i=0;
       port_displayout &= ~ht1621_cs;  //clear cs=0
       _NOP();
       _NOP();
       senddata_lcd(3,0x5);  // send command: 101
       senddata_lcd(6,0x0);  // send start address: 000000
       for  (i=0 ; i<32 ; i++)
       {
            senddata_lcd(4,data);  //send data
       }
       _NOP();
       _NOP();       
       port_displayout |= ht1621_cs;
}

////////////////////////////////////////////////////////////////////////////////////////////////
void  intialization_ht1621(void)
{
        port_displaydir |= ht1621_wr+ht1621_cs+ht1621_dat;  //setting port as output
        Delayms(100);
        port_displayout |=ht1621_cs;
        delay(10); 
        port_displayout &= ~ht1621_cs;
        delay(10);
        senddata_lcd(3,0x4);  // send command: 100
        senddata_lcd(9,0x3); //send : 0000 0001 1 to turn on osc        
        senddata_lcd(9,0x4f); //3 commons 1/2 bias:  0010 0111 1        
        senddata_lcd(9,0x1f); //send : 0000 1111 1 to clr tb and wdt
        senddata_lcd(9,0xb);  // send : 0000 0101 1 to disable wdt
        senddata_lcd(9,0x7); //send : 0000 0011 1 to LCD on     

        port_displayout |= ht1621_cs;
 
}

/////////////////////////////////////////////////////////////////////////////////////////////
void  ht1621_dispDigit(unsigned char htdis_number,unsigned char htvalue)
{
       unsigned int ht_pointer,cal_i;
       if(htdis_number>6)return;
       
       cal_i = htdis_number;
       cal_i --;
       htdis_number += 2 * cal_i;
       ht_pointer=htvalue*3;
        htvalue = tab_disdat[ht_pointer];
        WritedataTolcd(htdis_number,htvalue);

        ht_pointer ++;
        htdis_number ++;
        htvalue = tab_disdat[ht_pointer];
        WritedataTolcd(htdis_number,htvalue);

        ht_pointer ++;
        htdis_number ++;
        htvalue = tab_disdat[ht_pointer];
        WritedataTolcd(htdis_number,htvalue);
}

////////////////////////////////////////////////////////////////////////////////////////////////
void  ht1621_displayInt(unsigned char startPosi,unsigned int display_data)
{
      unsigned char data,dflag; 
      dflag=0;
      data=display_data/10000;
      if(data>0)
        dflag=1;
      else data=CLR;
      
      ht1621_dispDigit(startPosi++,data);
      display_data %= 10000;      
      data=display_data/1000;      
      
      if(data>0 || dflag==1)
        dflag=1;
      else data=CLR;

      ht1621_dispDigit(startPosi++,data);

      display_data %= 1000;    
      data=display_data/100;    

      if(data>0 || dflag==1)
        dflag=1;
      else data=CLR;

      ht1621_dispDigit(startPosi++,data);

      display_data %= 100;      
      data=display_data/10;    
      if(data>0 || dflag==1)
        dflag=1;
      else data=CLR;

      ht1621_dispDigit(startPosi++,data);
      
      ht1621_dispDigit(startPosi++,display_data%10);
      //WritedataTolcd(0,0x4);    //display heart   
}

////////////////////////////////////////////////////////////////////////////////////////////////
void  ht1621_displayChar(unsigned char startPosi,unsigned int display_data)
{
      unsigned char data,dflag; 
      dflag=1;
      if (display_data>999)display_data=999;

      data=display_data/100;    
      if(data>0)
         dflag=1;
      else  data=CLR;

      ht1621_dispDigit(startPosi++,data);
      
      display_data %= 100; 
      data=display_data/10;     

      if(data>0 || dflag==1)
          dflag=1;
      else data=CLR;
      
      ht1621_dispDigit(startPosi++,data);

      ht1621_dispDigit(startPosi,display_data%10);
      //WritedataTolcd(0,0x4);    //display heart   
}

////////////////////////////////////////////////////////////////////////////////////////////////
void  ht1621_displayTwoDigit(unsigned char startPosi,unsigned char display_data)
{
      ht1621_dispDigit(startPosi++,display_data/0x10);
      ht1621_dispDigit(startPosi++,display_data%0x10);
}

////////////////////////////////////////////////////////////////////////////////////////////////
void  ht1621_displayIcon(unsigned char Icon,unsigned char Onoff)
{
     if(Onoff==1)
     {
       WritedataTolcd(tab_disIcon[Icon][0],tab_disIcon[Icon][1]);    //display Icon   
     }  
     else
     WritedataTolcd(tab_disIcon[Icon][0],0);    //display Icon   
}

void delay(unsigned char n)
{
   while(n--);
}

⌨️ 快捷键说明

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