📄 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 + -