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

📄 main.c

📁 通过单片机测试显示芯片HT1621与LCD屏 本例采用89S52, 晶振为11.0592MHZ
💻 C
字号:
/************************************************************************
[文件名]  HT1621lcd
[功能]    通过单片机测试显示芯片HT1621与LCD屏
//本例采用89S52, 晶振为11.0592MHZ
/**********************************************************************/
#include <reg52.h>
//#include "all.h"
//#include "all.c"
//#include <intrins.h>

sbit    HT1621_data=P1^0;
sbit    HT1621_WR  =P1^1;
sbit    HT1621_CS  =P1^2;
sbit    _ring=P3^5;
sbit    _led =P2^6;
sbit    _vcc =P2^7;



void main(void)
     {
     unsigned char i,j,_row=0,_line=1;
     _ring=0;
     _vcc=1;
     _led=1;

     //test();
     disp_int();
     while(1);
      {
      for(i=0;i<5;i++)
         {
         for(j=0;j<16;j++)
             {
             disp_clr();
             disp_number(i,j);
             disp_table();
             ding(1);
             }
         }

         while(1);
       }
     }

/************************************************************************
[涵数]  void disp_write(unsigned char _line,unsigned char _row);
[功能]  写LCD屏中的一段
[入参]  _line:行数据     _row:列数据
[回参]  无
[影响]  无
/**********************************************************************/
void disp_write(unsigned char _line,unsigned char _row)
     {
      unsigned char i;
      bit cy;
      _row=_row<<2;

      HT1621_CS=0;

      HT1621_WR=0;
      HT1621_data=1;
      HT1621_WR=1;

      HT1621_WR=0;
      HT1621_data=0;
      HT1621_WR=1;

      HT1621_WR=0;
      HT1621_data=1;
      HT1621_WR=1;

      for(i=0;i<6;i++)                  //发送命令与列数据
         {
         HT1621_WR=0;
         cy=_row&0x80;
         HT1621_data=cy;
         HT1621_WR=1;
         _row=_row<<1;
         }

       for(i=0;i<4;i++)                //发送命令与行数据
         {
         HT1621_WR=0;
         cy=_line&0x80;
         HT1621_data=cy;
         HT1621_WR=1;
         _line=_line<<1;
         }
      HT1621_CS=1;
      HT1621_data=1;
      HT1621_WR=1;
     }

/************************************************************************
[涵数]  void disp_mode(unsigned char _mode,unsigned char _data);
[功能]  HT1621工作模式设置
[入参]  _mode:命令代码     _data:命令内容
[回参]  无
[影响]  无
/**********************************************************************/
void disp_mode(unsigned char _mode,unsigned char _data)
     {
     unsigned char i;
     bit cy;
      HT1621_CS=0;
      HT1621_WR=1;
      HT1621_data=1;
      for(i=0;i<8;i++)                  //发送命令与列数据
         {
         HT1621_WR=0;
         cy=_mode&0x80;
         HT1621_data=cy;
         HT1621_WR=1;
         _mode=_mode<<1;
         }

       for(i=0;i<4;i++)                //发送行数据
         {
         HT1621_WR=0;
         cy=_data&0x80;
         HT1621_data=cy;
         HT1621_WR=1;
         _data=_data<<1;
         }
         HT1621_CS=1;
         HT1621_data=1;
         HT1621_WR=1;
     }

void disp_on(void)          //开显示
     {disp_mode(0x80,0x60);}

void disp_off(void)         //关显示
     {disp_mode(0x80,0x40);}

void disp_enable(void)      //显示使能
     {disp_mode(0x80,0x20);}

void disp_disable(void)     //显示禁止
     {disp_mode(0x80,0x00);}

void disp_normal(void)      //显示工作于常规
     {disp_mode(0x9c,0x60);}

void disp_bias(void)        //显示BIAS设置
     {disp_mode(0x85,0x20);}//BIAS=1/3:4

void disp_RC(void)          //显示时钟设置
     {disp_mode(0x93,0x00);}//256K

/************************************************************************
[涵数]  void disp_clr(void);
[功能]  控制HT1621清显示屏
[入参]  无
[回参]  无
[影响]  无
/**********************************************************************/
void disp_clr(void)
     {
     unsigned char i,j;
     for(i=0;i<4;i++)
         {
          for(j=0;j<13;j++)
              {disp_write(0x0,j);}
          }
     }

/************************************************************************
[涵数]  void disp_number(unsigned char _bit,unsigned char _number);
[功能]  显示字符转换成代码
[入参]  _bit:字符显示位     _number:相应位显示的字符值
[回参]  无
[影响]  table[0-6];
/**********************************************************************/
void disp_number(unsigned char _bit,unsigned char _number)
     {
      unsigned char i;
      i=4-_bit;
      switch(_number)
            {
            case 0:table[i]=table[i]&0x01;
                   table[i]=table[i]|0x0BE;  //0b1011,1110; abcdef段
                   break;
            case 1:table[i]=table[i]&0x01;
                   table[i]=table[i]|0x06;   //0b0000,0110; bc段
                   break;
            case 2:table[i]=table[i]&0x01;
                   table[i]=table[i]|0x7C;   //0b0111,1100; abdeg段
                   break;
            case 3:table[i]=table[i]&0x01;
                   table[i]=table[i]|0x5E;   //0b0101,1110; abcdg段
                   break;
            case 4:table[i]=table[i]&0x01;
                   table[i]=table[i]|0x0C6;   //0b1100,0110; abcefg段
                   break;
            case 5:table[i]=table[i]&0x01;
                   table[i]=table[i]|0x0DA;   //0b1101,1010; acdfg段
                   break;
            case 6:table[i]=table[i]&0x01;
                   table[i]=table[i]|0x0FA;   //0b1111,1010; acdefg段
                   break;
            case 7:table[i]=table[i]&0x01;
                   table[i]=table[i]|0x0E;   //0b0000,1110; abc段
                   break;
            case 8:table[i]=table[i]&0x01;
                   table[i]=table[i]|0x0FE;   //0b1111,1110; abcdefg段
                   break;
            case 9:table[i]=table[i]&0x01;
                   table[i]=table[i]|0x0DE;  //0b1101,1110; bcdfg段
                   break;
            case 0x0A:table[i]=table[i]&0x01;
                      table[i]=table[i]|0x0EE;  //0b1110,1110; bcddfg段
                      break;
            case 0x0b:table[i]=table[i]&0x01;
                      table[i]=table[i]|0x0F2;  //0b1111,0010; cdefg段
                      break;
            case 0x0C:table[i]=table[i]&0x01;
                      table[i]=table[i]|0x0B8;  //0b1011,1000; adef段
                      break;
            case 0x0d:table[i]=table[i]&0x01;
                      table[i]=table[i]|0x76;  //0b0111,0110; bcdeg段
                      break;
            case 0x0E:table[i]=table[i]&0x01;
                      table[i]=table[i]|0x0F8;  //0b1111,1000; adefg段
                      break;
            case 0x0F:table[i]=table[i]&0x01;
                      table[i]=table[i]|0x0E8;  //0b1110,1000; bcde段
                      break;

            default:break;
            }


     }



/************************************************************************
[涵数]  void disp_table(void);
[功能]  显示整屏的内容
[入参]  无
[回参]  无
[影响]  无
/**********************************************************************/
void disp_table(void)
     {
     unsigned char i,j,_line;

     _line=table[6];
     disp_write(_line,0);

     for(i=0,j=1;i<6;i++,j++)
        {
        _line=table[i];
        disp_write(_line,j);
        j++;
        _line=table[i]<<4;
        disp_write(_line,j);
        }
     }


/************************************************************************
[涵数]  void delay_ms(unsigned char _ms);
[功能]  豪秒延时子程序
[入参]  _ms: 延时_ms(ms)的时间
[回参]  无
[影响]  无
/**********************************************************************/
void delay_ms(unsigned char _ms)
     {
     unsigned char i;
     while(_ms--)
          {
          for(i=0;i<125;i++)
              {;}
          }
     }

/************************************************************************
[涵数]  void ding(unsigned char _time);
[功能]  蜂鸣器控制
[入参]  _time: 蜂鸣器响的次数
[回参]  无
[影响]  无
/**********************************************************************/
void ding(unsigned char _time)
     {
     time++;
     for(;_time>0;_time--)
         {
          _ring=1;
          _led=1;
          delay_ms(10);
          _led=0;
          _ring=0;
          delay_ms(100);
          }
        delay_ms(250);
        //delay_ms(250);
      }
/************************************************************************
[涵数]  void disp_int(void)
[功能]  显示初始化,并显示0-F
[入参]  无
[回参]  无
[影响]  无
/**********************************************************************/
void disp_int(void)
     {
     unsigned char i,j;
     disp_normal();
     disp_RC();
     disp_enable();
     disp_bias();
     disp_on();
     disp_clr();
     disp_table();
     for(i=0;i<=0xF;i++)
        {
        for(j=0;j<5;j++)
            {
            disp_number(j,i);
            }
        disp_table();
        ding(1);
        }
     for(i=0;i<7;i++)
         {table[i]=0;}
     disp_clr();
     disp_number(0,0);
     disp_number(1,0);
     disp_number(2,0);
     dp4_on;
     g_on;
     disp_table();
     }
/*
void test(void)
     {
     power_on;
     ding(1);
     minus_on;
     ding(1);
     pc_on;
     ding(1);
     one_on;
     ding(1);
     oz_on;
     ding(1);
     t_on;
     ding(1);
     percent_on;
     ding(1);
     ct_on;
     ding(1);
     dwt_on;
     ding(1);
     g_on;
     ding(1);
     n_on;
     ding(1);
     lb_on;
     ding(1);
     dp1_on;
     ding(1);
     dp2_on;
     ding(1);
     dp3_on;
     ding(1);
     dp4_on;
     ding(1);
     dp5_on;
     ding(1);
     }

*/

⌨️ 快捷键说明

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