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