单片机源程序如下:
- #ifndef _HT1621B_H_
- #define _HT1621B_H_
- #include <reg52.h>
- #include <intrins.h> //为了使用NOP
- #define NOP _nop_()
- #define uchar unsigned char
- #define uint unsigned int
- #define ComMode 0x52 //4COM,1/3bias 1000 010 1001 0
- #define RCosc 0x30 //内部RC振荡器(上电默认)1000 0011 0000
- #define LCD_on 0x06 //打开LCD显示 偏压发生器1000 0000 0 11 0
- #define LCD_off 0x04 //关闭LCD显示(上电默认)
- #define Sys_en 0x02 //系统振荡器开 1000 0000 0010
- #define Ctrl_cmd 0x80 //写控制命令 1000
- #define Data_cmd 0xa0 //写数据命令 1010
- //定义HT1621端口
- #define SEG_NUM 12 //段码数字个数,即Seg数量/2
- sbit CS1=P2^7;
- sbit WR1=P2^6;
- sbit DATA1=P2^5;
- // // 0 1 2 3 4 5 6 7 8 9 灭
- uchar code tab[11]={0xF0,0x60,0xD0,0xF0,0x60,0xB0,0xB0,0xE0,0xF0,0xF0,0x00};
- uchar code tab1[11] ={0xA0,0x00,0x60,0x40,0xC0,0xC0,0xE0,0x00,0xE0,0xC0,0x00};
- /**-------------------------------------------------------------------------
- Name: SendBit_1621(送数据程序)
- ---------------------------------------------------------------------------*/
- void SendBit_1621(uchar sdata,uchar cnt) //sdata 的高cnt 位写入HT1621,高位在前
- {
- uchar i;
- for(i=0;i<cnt;i++)
- {
- WR1=0;
- if(sdata&0x80) DATA1=1;
- else DATA1=0;
- WR1=1;
- sdata<<=1;
- }
- }
- /**-------------------------------------------------------------------------
- Name: SendCmd(送命令)
- ---------------------------------------------------------------------------*/
- void SendCmd_1621(uchar command)
- {
- CS1=0;
- SendBit_1621(0x80,4); //写入标志码“100”和9 位command 命令,由于
- SendBit_1621(command,8); //没有使有到更改时钟输出等命令,为了编程方便
- CS1=1; //直接将command 的最高位写“0”
- }
- /**-------------------------------------------------------------------------
- Name: Write_1621(送数据和命令程序)
- ---------------------------------------------------------------------------*/
- void Write_1621(uchar addr,uchar sdata,uchar len)
- {
- addr<<=2;
- CS1=0;
- SendBit_1621(0xa0,3); //写入标志码“101”
- SendBit_1621(addr,6); //写入addr 的高6位
- SendBit_1621(sdata,len); //写入data 的高len位
- CS1=1;
- }
- /**-------------------------------------------------------------------------
- Name: all_off(清除1621显示)
- ---------------------------------------------------------------------------*/
- void HT1621_all_off(void)
- {
- uchar i;
- uchar addr=0;
- for(i=0;i<SEG_NUM;i++)
- {
- Write_1621(addr,0x00,8);
- addr+=2;
- }
- }
- /**-------------------------------------------------------------------------
- Name: all_on(点亮1621全部Seg)
- -------------------------------------------------------------------------*/
- void HT1621_all_on(void)
- {
- uchar i;
- uchar addr=0;
- for(i=0;i<SEG_NUM;i++)
- {
- Write_1621(addr,0xff,8);
- addr+=2;
- }
- }
- /**-------------------------------------------------------------------------
- Name: Init_1621(初始化1621)
- -------------------------------------------------------------------------*/
- void Init_1621(void)
- {
- SendCmd_1621(Sys_en);
- SendCmd_1621(RCosc);
- SendCmd_1621(ComMode);
- SendCmd_1621(LCD_on);
- }
- /**-------------------------------------------------------------------------
- Name: LCDoff(初始化1621)
- -------------------------------------------------------------------------*/
- void LCDoff(void)
- {
- SendCmd_1621(LCD_off);
- }
- /**-------------------------------------------------------------------------
- Name: LCDon(初始化1621)
- -------------------------------------------------------------------------*/
- void LCDon(void)
- {
- SendCmd_1621(LCD_on);
- }
- void DelayMs(uint n)
- {
- uchar a,b;
- uint i;
- for(i=n;i>0;i--)
- for(b=80;b>0;b--)
- for(a=10;a>0;a--)NOP;
- }
- #endif
- //void main(void)
- //{
- // uchar i;
- // Init_1621(); //初始化HT1621
- // HT1621_all_off(); //清空LCD显示
- // HT1621_all_on(); //点亮所有Seg
- // DelayMs(500);
- //HT1621_all_off();
- // while(1)
- // {
- // DelayMs(500);
- // i++;
- //if(10==i) //??8??????
- //i=0;
- //
- //Write_1621(10, tab[i],4); //第1个数字显示"1"
- // Write_1621(11,tab1[i],4);
- //
- ……………………
- …………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码
所有资料51hei提供下载:
HT1621液晶测试程序.rar
(21.72 KB, 下载次数: 263)
|