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

📄 1621b.c

📁 液晶驱动1621B的驱动程序
💻 C
字号:
/****************************************************************************
//程序为1621B液晶控制器的控制程序
//液晶为1*32段液晶,与控制器的对应关系如下Num所示
//此程序主程序显示-4321
//程序员:Fan      时间:2007-12-28 12:56
****************************************************************************/

#include <stdio.h>
#include <reg52.h>
#include <intrins.h>
#include "sel_def.h"
//----------------------------------------------------------------------------
//取前三位
#define COMMAND 0x80
#define READ	0xC0
#define WRITE	0xA0
//----------------------------------------------------------------------------
//发送完后,补发两位XX,可以是0,也可以是1
#define LCD_OFF	0x02
#define LCD_ON	0x03
#define WDT_DIS	0x05
#define TON_OFF 0x08
#define IRQ_DIS	0x80
#define Rosc	0x18
#define XTAL	0x14
#define BIS1_2	0x10
#define SYS_EN	0x01
#define SYS_DIS	0x00
#define NORMAL	0xE3
//----------------------------------------------------------------------------
//另一种方式
/*
const char TAB_REST[10]={
						0b00000001,//打开系统振荡器命令
    					0b00000011,//打开LCD 偏压发生器命令
    					0b00000101,//WDT 溢出标志输出失效命令
    					0b00000110,//时基输出使能命令
    					0b00011000,//系统时钟源片内RC振荡器命令
    					0b00101001,//LCD1/3偏压选项4个公共口命令
    					0b01000000,//声音频率4KHz命令
    					0b00001001,//打开声音输出命令
    					0b10100000,//时基/WDT 时钟输出1Hz命令
    					0b10001000 //使/IRQ 输出有效命令
						};
*/
//----------------------------------------------------------------------------
//数码管对应的地址,取前6位
/*
uchar Num1[8]={0x28,0x2C,0x10,0x14,0x18,0x24,0x20,0x0C};
			//seg10_a,seg11_b,seg4_c,seg5_d,seg6_e,seg9_f,seg8_g,seg3_dp
uchar Num2[8]={0x38,0x3C,0x00,0x04,0x08,0x34,0x30,0x40};
			//seg14_a,seg15_b,seg0_c,seg1_d,seg2_e,seg13_f,seg12_g,seg16_dp
uchar Num3[8]={0x6C,0x70,0x4C,0x48,0x44,0x68,0x64,0x50};
			//seg27_a,seg28_b,seg19_c,seg18_d,seg17_e,seg26_f,seg25_g,seg20_dp
uchar Num4[8]={0x7C,0x60,0x5C,0x58,0x54,0x78,0x74,0x1C};
			//seg25_a,seg24_b,seg23_c,seg22_d,seg21_e,seg30_f,seg29_g,seg7_LB
*/
uchar Num[32]={
				0x0C,0x20,0x24,0x18,0x14,0x10,0x2C,0x28,		//num=1
				0x40,0x30,0x34,0x08,0x04,0x00,0x3C,0x38,		//num=2
				0x50,0x64,0x68,0x44,0x48,0x4C,0x70,0x6C,		//num=3
				0x1C,0x74,0x78,0x54,0x58,0x5C,0x60,0x7C			//num=4
			  };
//-----------------------------------------------------------------------------
//字码-共阴极
uchar ZiMa[16]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,
				0x7F,0x67,0x77,0x7C,0x39,0x5E,0x79,0x71};
//字码-共阳极
//uchar ZiMa[16]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,
//				0x80,0x98,0x88,0x83,0xC6,0xA1,0x86,0x8E}
//-----------------------------------------------------------------------------
//传送Length位数据给1621
void Send_LBit(uchar Sdata,uchar Length)
{
	uchar i=Length;
	while(i--)
	{
		nWR=0;
		if(Sdata&0x80)
			DATA=1;
		else
			DATA=0;
		Sdata<<=1;
		nWR=1;
		_nop_();
	}	
}
//-----------------------------------------------------------------------------
//送控制指令
void Send_Com(uchar con,uchar sdata)
{
	nCS=0;
	Send_LBit(con,3);
	Send_LBit(sdata,8);
	Send_LBit(0x00,2);
	nCS=1;
}
//-----------------------------------------------------------------------------
//初始化
void Init_1621(void)
{
	Send_Com(COMMAND,SYS_EN);
	Send_Com(COMMAND,Rosc);
	Send_Com(COMMAND,BIS1_2);
	//Send_Com(COMMAND,NORMAL);		
	Send_Com(COMMAND,LCD_ON);
}
//-----------------------------------------------------------------------------
//清屏
void All_off(void)
{
	uchar i,addr=0;
	for(i=0;i<32;i++)
	{
		nCS=0;
		Send_LBit(WRITE,3);
		Send_LBit(addr,6);
		Send_LBit(0x00,4);
		addr+=4;
		nCS=1;
	}
}
//-----------------------------------------------------------------------------
//全部点亮
void All_on(void)
{
	uchar i,addr=0;
	for(i=0;i<32;i++)
	{
		nCS=0;
		Send_LBit(WRITE,3);
		Send_LBit(addr,6);
		Send_LBit(0x80,4);
		addr+=4;
		nCS=1;
	}
}
//-----------------------------------------------------------------------------
//给n数码管送数d
//n表示第n个数码管
void Send_num(uchar d,uchar n)
{
	uchar i,d_z;
	d_z=ZiMa[d];
	for(i=0;i<8;i++)
	{
		nCS=0;
		Send_LBit(WRITE,3);
		Send_LBit(Num[(n-1)*8+i],6);
		if(d_z&0x80)
			Send_LBit(0x80,4);
		else
			Send_LBit(0x00,4);
		d_z<<=1;
		nCS=1;
	}	
}
//-----------------------------------------------------------------------------
//显示LB
//EN_DIS=0:不显示,其他都显示
void Send_LB(uchar EN_DIS)
{
	nCS=0;
	if(EN_DIS)
	{
		Send_LBit(WRITE,3);
		Send_LBit(Num[24],6);
		Send_LBit(0x80,4);

	}
	else
	{
		Send_LBit(WRITE,3);
		Send_LBit(Num[24],6);
		Send_LBit(0x00,4);
	}
	nCS=1;
}
//-----------------------------------------------------------------------------
//显示-4321
void main(void)
{
	uchar i,j;
	Lock=1;
	Init_1621();
	All_off();
	i=100;
	while(i--)
	{
		for(j=0;j<125;j++)
			;
	}
	
	Send_num(15,1);
	Send_num(15,2);
	Send_num(15,3);
	Send_num(15,4);
	Send_LB(1);
	while(1);

}

⌨️ 快捷键说明

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