比神乐 发表于 2025-7-21 18:33

飞思卡尔单片机驱动HT1621

代码:
#include <hidef.h>      /* common defines and macros */
#include "derivative.h"      /* derivative-specific definitions */

#define LED PORTB
#define LED_dir DDRB

#define uchar unsigned char

#define uint unsigned int





#define DA_1PORTB |= 0X10//RS置1

#define DA_0PORTB &= 0XEF//RS置0



#define WR_1PORTB |= 0X04//RS置1

#define WR_0PORTB &= 0XFB//RS置0



#define CS_1PORTB |= 0X01//RS置1

#define CS_0PORTB &= 0XFE//RS置0




unsigned char data=0x01;

#define Smg_a 0x80



#define Smg_b 0x40



#define Smg_c 0x20



#define Smg_d 0x01



#define Smg_e 0x02



#define Smg_f 0x08



#define Smg_g 0x04



#define Smg_dp 0x10







#define Bmp0Map Smg_a | Smg_b | Smg_c | Smg_d | Smg_e | Smg_f



#define Bmp1Map Smg_b | Smg_c



#define Bmp2Map Smg_a | Smg_b | Smg_d | Smg_e | Smg_g



#define Bmp3Map Smg_a | Smg_b | Smg_c | Smg_d | Smg_g



#define Bmp4Map Smg_b | Smg_c | Smg_f | Smg_g



#define Bmp5Map Smg_a | Smg_c | Smg_d | Smg_f | Smg_g



#define Bmp6Map Smg_a | Smg_c | Smg_d | Smg_e | Smg_f | Smg_g



#define Bmp8Map Smg_a | Smg_b | Smg_c | Smg_d | Smg_e | Smg_f | Smg_g



#define Bmp9Map Smg_a | Smg_b | Smg_c | Smg_d | Smg_f | Smg_g



#define Bmp7Map Smg_a | Smg_b | Smg_c



#define BmpAMap Smg_a | Smg_b | Smg_c | Smg_e | Smg_f | Smg_g



#define BmpBMap Smg_c | Smg_d | Smg_e | Smg_f | Smg_g



#define BmpCMap Smg_a | Smg_d | Smg_e | Smg_f



#define BmpDMap Smg_b | Smg_c | Smg_d | Smg_e | Smg_g



#define BmpEMap Smg_a | Smg_d | Smg_e | Smg_f | Smg_g



#define BmpFMap Smg_a | Smg_e | Smg_f | Smg_g



















const unsigned char SegCode[] = {Bmp0Map,Bmp1Map,Bmp2Map,Bmp3Map,Bmp4Map,Bmp5Map,Bmp6Map,Bmp7Map,Bmp8Map,Bmp9Map,BmpAMap,BmpBMap,BmpCMap,BmpDMap,BmpEMap,BmpFMap};



unsigned char DpyNum = {Smg_g,Smg_g,Smg_g,Smg_g,Smg_g,Smg_g}; //?????







unsigned int i;



void COMMAND_HT1621(unsigned char comm)



{



//unsigned char i;



CS_0;

;





WR_0;

   ;

for(i=0;i<3;i++)//???



{



if((0x04<<i)&0x04)

                                                   DA_1; //100

else

                                    DA_0;

;

WR_0;

;

WR_1;

;

}



for(i=0;i<9;i++)//?????



{



    if((comm<<i)&0x80) DA_1; //100



    else DA_0;

    ;

    WR_0;

   ;

    WR_1;

   ;

}



CS_1;

;





}







void HT1621_Display(void)



{



//unsigned char i;



CS_0;//??CS

   ;

WR_0;
   ;


for(i=0;i<3;i++) //???



{



    if((0x05<<i)&0x04) DA_1;



    else DA_0;

   ;

    WR_0;

    ;

    WR_1;

    ;

}



for(i=0;i<6;i++) //???



{



    if((20<<i)&0x20) DA_1;//20?? SEG??



    else DA_0;

   ;

    WR_0;

   ;

    WR_1;

   ;

}



for(i=0;i<8;i++) //???



{



    if((DpyNum<<i)&0x80)

                                                   DA_1;



    else DA_0;

    ;

    WR_0;

    ;

    WR_1;

    ;

}



for(i=0;i<8;i++) //???



{



if((DpyNum<<i)&0x80)DA_1;



else DA_0;

;

WR_0;

;

WR_1;

;

}



for(i=0;i<8;i++) //???



{



if((DpyNum<<i)&0x80) DA_1;



else DA_0;

;

WR_0;

;

WR_1;

;

}



for(i=0;i<8;i++) //???



{



if((DpyNum<<i)&0x80)DA_1;



else DA_0;

;

WR_0;

;

WR_1;

;

}



for(i=0;i<8;i++) //???



{



if((DpyNum<<i)&0x80)DA_1;



else DA_0;

;

WR_0;

;

WR_1;


;
}



for(i=0;i<8;i++) //???



{



if((DpyNum<<i)&0x80) DA_1;



else DA_0;

;

WR_0;

;

WR_1;
;


}



CS_1;

}







void LCD_Init(void)



{



COMMAND_HT1621(0x01);//SYS EN



COMMAND_HT1621(0x03);//LCD ON



COMMAND_HT1621(0x29);//4 COM牋1/3 BIAS



HT1621_Display(); //clear screen



}










/*************************************************************/
/*                        延时函数                           */
/*************************************************************/
void delay(void)
{
unsigned int i,j;
for(j=0;j<2;j++)
for(i=0;i<60000;i++)
;
}


/*************************************************************/
/*                        主函数                           */
/*************************************************************/
void main(void) {
        //DisableInterrupts;
// LED_dir=0xff;       //设置为输出
// LED=~data;          //点亮LED1
//        EnableInterrupts;
    DDRB=0XFF;
    delay();
   LCD_Init();



DpyNum = Smg_a|Smg_d|Smg_g;//"?"



DpyNum = SegCode;



DpyNum = SegCode;



DpyNum = SegCode;



DpyNum = SegCode;



DpyNum = SegCode;







HT1621_Display();
for(;;)
{
   
   
}

}
效果图:
附件喘不上来
页: [1]
查看完整版本: 飞思卡尔单片机驱动HT1621