给你一个测试程序参考
- #include <STC89C5xRC.H>
- //宏定义新LCD的操作命令
- #define ComMode 0x52 //4COM,1/3bias 1000 0101 0010
- //#define ComMode 0x50 //4COM,1/2bias 1000 0101 0000
- #define RCosc 0x30 //内部RC振荡器(上电默认)1000 0011 0000
- #define LCD_on 0x06 //打开LCD显示 偏压发生器1000 0000 0110
- #define LCD_off 0x04 //关闭LCD显示(上电默认)
- #define Sys_en 0x02 //系统振荡器开 1000 0000 0010
- #define Ctrl_cmd 0x80 //写控制命令 1000
- #define Data_cmd 0xa0 //写数据命令 1010
- // 端口声明
- sbit DIPIN=P3^7;
- sbit CLKPIN=P3^6;
- sbit CSPIN=P3^5;
- /**-------------------------------------------------------------------------
- Name: SendBit_1621(送数据程序)
- ---------------------------------------------------------------------------*/
- void SendBit_1621(unsigned char sdata,unsigned char cnt) //sdata 的高cnt 位写入HT1621,高位在前
- {
- unsigned char i;
- for(i=0;i<cnt;i++)
- {
- CLKPIN=0;
- if(sdata&0x80)
- DIPIN=1;
- else DIPIN=0;
- CLKPIN=1;
- sdata<<=1;
- }
- }
- /*-------------------------------------------------------------------------
- Name: SendCmd(送命令)
- 写入标志码"100"和9位comma命令,由于没有使用到更改时钟输出等命令
- 为了编程方便直接将command 的最高位写"0"
- ---------------------------------------------------------------------------*/
- void SendCmd_1621(unsigned char command)//写命令
- {//3位标志码 + 9位命令,共12位
- CSPIN=0; //执行一个下降沿
- SendBit_1621(0x80,4); //写入标志码"100"和9位comma命令的最高1位共4位
- SendBit_1621(command,8); //写入9位comma命令的后8位,组成1000 xxxx xxxx
- CSPIN=1;//送数完成后置高电平
- }
- /**-------------------------------------------------------------------------
- Name: Write_1621(送命令和数据程序)
- 写入标志码"101"和6位addr地址码和8位sdata显示数据。
- ---------------------------------------------------------------------------*/
- void Write_1621(unsigned char addr,unsigned char sdata,unsigned char len)//写数据
- {//3位标志码 + 6位写数据命令 + len(4/8)位数据,共13/17位
- addr<<=2;//高6位有效
- CSPIN=0; //执行一个下降沿
- SendBit_1621(0xa0,3); //写入标志码"101" 写数据命令101
- SendBit_1621(addr,6); //写入addr 的高6位 写数据命令xxxx xx
- SendBit_1621(sdata,len); //写入8/4位 sdata数据 len=8/4
- CSPIN=1;//送数完成后置高电平
- }
- /**-------------------------------------------------------------------------
- Name: Init_1621(初始化1621)
- -------------------------------------------------------------------------*/
- void LCD_Init() //初始化
- {//程序输入100 0+8=9位命令
- SendCmd_1621(Sys_en);//Sys_en 0x02 系统振荡器开 100 0 0000 0010
- SendCmd_1621(RCosc); //RCosc 0x30 内部RC振荡器(上电默认) 100 0 0011 0000
- SendCmd_1621(ComMode);//4COM,1/3bias 100 0 0101 0020
- SendCmd_1621(LCD_on);//LCD_on 0x06 打开LCD显示 偏压发生器100 0 0000 0110
- }
- /*-------------------------------------------------------------------------
- Name: lcdwd1(点亮1621全部Seg)
- -------------------------------------------------------------------------*/
- void lcdwd1(unsigned char num)
- {
- unsigned char i;
- unsigned char addr=0;//寄存器起始地址0x00
- for(i=0;i<num;i++)//num有效地址数
- {
- Write_1621(addr,0xff,8);//addr为地址,0xff为数据,8为8位数据
- addr+=2;//顺延2个4位地址码
- }
- }
- void main()
- {
- LCD_Init();
- while(1)
- {
- lcdwd1(16);
- }
- }
复制代码
|