📄 lcm06xk_msp430_c.c
字号:
#include <msp430x11x1.h>
//P2.3 /CS
//P2.2 /WR
//P2.4 DATA
//定义基本的数据线状态
#define cs_1 P2OUT |= BIT3 //CS = 1
#define cs_0 P2OUT &=~ BIT3 //CS = 0
#define wr_1 P2OUT |= BIT2 //WR = 1
#define wr_0 P2OUT &=~ BIT2 //WR = 0
#define data_1 P2DIR &=~ BIT4; //DATA=1
#define data_0 P2DIR |= BIT4 //DATA=0
//定义段码全局位变量
unsigned char d;//d为模块内的段码映射与真实数据字的转换变量
//定义LCM06XK的命令
#define close_lcd_osc 0x00//关闭振荡器关LCD 显示进入静态模式
#define open_osc 0x01//开振荡器
#define close_lcd 0x02//关LCD 显示
#define open_lcd 0x03//开LCD 显示
#define close_bz 0x08//关蜂鸣
#define open_bz 0x09//开蜂鸣
#define wr_bz_2k 0x60//置蜂鸣2KHz
#define wr_bz_4k 0x40//置蜂鸣4KHz
#define lcm_int 0x20//模块初始化
#define close_wdt 0x05//关WDT
#define open_wdt 0x07//开WDT
#define close_time 0x04//关定时器
#define open_time 0x06//开定时器
#define clear_wdt 0x0e//WDT 清零
#define clear_time 0x0d//定时器清零
#define def_rc 0x18//定义模块内部RC 振荡器工作
//延时函数
void Delay(unsigned int n)
{
unsigned int i;
for (i=0; i<n; i++) {;}
}
//定义LCM06xk的数据映射表/////////////
//数字0~9的段码编码
void lcm_09(unsigned char n)
{
if(n<10){
switch (n){
case 0: d=0x6f;break;
case 1: d=0x23;break;
case 2: d=0x79;break;
case 3: d=0x7a;break;
case 4: d=0x36;break;
case 5: d=0x5e;break;
case 6: d=0x5f;break;
case 7: d=0x2a;break;
case 8: d=0x7f;break;
case 9: d=0x7e;break;
default :break;
}
}
}
///////////////////////////////////////
//写命令函数
void wr_cmmond(unsigned char commond)
{
unsigned char i;
cs_1;
wr_1;
data_1;
cs_0;
wr_0;
data_1;//data=1
wr_1;
wr_0;
data_0;//data=0
wr_1;
wr_0;
data_0;//data=0
wr_1;
for(i=0;i<=8;i++)
{wr_0;
if((commond&0x80)==0x80){data_1;}
else {data_0;}
commond=commond<<1;
wr_1;
}
wr_0;
data_0;//data=0
wr_1;
data_1;
cs_1;
}
///////////////////////////////////////
//写数据函数
void wr_data(unsigned char addr,unsigned char x)
{
unsigned char i;
cs_1;
wr_1;
data_1;
cs_0;
wr_0;
data_1;//data=1
wr_1;
wr_0;
data_0;//data=0
wr_1;
wr_0;
data_1;//data=1
wr_1;
wr_0;
data_1;//data=0
wr_1;
addr=addr<<4;
for(i=0;i<=4;i++)
{wr_0;
if((addr&0x80)==0x80){data_1;}
else {data_0;}
addr=addr<<1;
wr_1;
}
wr_0;
if((x&0x01)==0x01){data_1;}else {data_0;}//第零位数据输出
wr_1;
wr_0;
if((x&0x02)==0x02){data_1;}else {data_0;}//第一位数据输出
wr_1;
wr_0;
data_0;//data=0
wr_1;
wr_0;
data_0;//data=0
wr_1;
data_1;
cs_1;
}
//////////////////////////////////////
//扫描一位需要扫描的RAM组合
void wr_dig(unsigned char x)
{if(x<=6){
switch(x){
case 1: {wr_data(0x00,d);d>>=2;wr_data(0x01,d);d>>=2;wr_data(0x02,d);d>>=2;wr_data(0x03,d);break;}
case 2: {wr_data(0x04,d);d>>=2;wr_data(0x05,d);d>>=2;wr_data(0x06,d);d>>=2;wr_data(0x07,d);break;}
case 3: {wr_data(0x08,d);d>>=2;wr_data(0x09,d);d>>=2;wr_data(0x0a,d);d>>=2;wr_data(0x0b,d);break;}
case 4: {wr_data(0x0c,d);d>>=2;wr_data(0x0d,d);d>>=2;wr_data(0x0e,d);d>>=2;wr_data(0x0f,d);break;}
case 5: {wr_data(0x10,d);d>>=2;wr_data(0x11,d);d>>=2;wr_data(0x12,d);d>>=2;wr_data(0x13,d);break;}
case 6: {wr_data(0x14,d);d>>=2;wr_data(0x15,d);d>>=2;wr_data(0x16,d);d>>=2;wr_data(0x17,d);break;}
default : break;
}
}
d=0;
}
/////////////////////////////////////////
//一位扫描,包含位选择数据,位显示数据//
void wr_dig_data(unsigned char dig,unsigned char n){
lcm_09(n);//取段码值
wr_dig(dig);//扫描此位所有的RAM映射空间,合成一位扫描
}
///////////////////////////////////////////
//初始化模块
void lcm_init(void){
Delay(2000);//延时操作
wr_cmmond(lcm_int);//模块初始化操作
wr_cmmond(def_rc);//定义内部RC振荡方式
wr_cmmond(open_osc);//开振荡器
wr_cmmond(open_lcd);//开显示器
}
//////////////////////////////////////////
void main(void)
{
unsigned int j;
j=0;
WDTCTL = WDTPW + WDTHOLD;// Stop WDT
lcm_init();//初始化模块
wr_dig_data(1,1);
wr_dig_data(2,2);
wr_dig_data(3,3);
wr_dig_data(4,4);
wr_dig_data(5,5);
wr_dig_data(6,6);
Delay(50000);
while(1){
wr_dig_data(1,j/10000);
wr_dig_data(2,j%10000/1000);
wr_dig_data(3,j%10000%1000/100);
wr_dig_data(4,j%10000%1000%100/10);
wr_dig_data(5,j%10000%1000%100%10);
wr_dig_data(6,8);
Delay(10000);
j++;if(j==60000)j=0;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -