📄 lcd_fuza_yemiam_kongzhi.c
字号:
//MSP430与12864连接驱动程序
#include "msp430x16x.h" // Standard Equations
#define uchar unsigned char
#include "hztable-2222.h"
#include "math.h"
#define uint unsigned int
//**********************************************
uchar p=1,q=2,l=80,x,m[4]; //p标志页面,q标志哪个参数
unsigned char keypoint;
uint data_convert[10];
float fasong[4];
uchar shuru[4][4]; //注意在各个库文件中不能有相同的"自定义变量名称"
uchar jieguo_BCD[10][10]; //如果多设置变量不用是可以的!!!!
uchar *shd[4][4]; //多定义函数不哟内用是不行的!!!!
uchar *jiguo_BCD_Ma[10][10]; //只有指针或者指针数组才能接收数组传递初始地址!!!
uchar data_number[4];
uchar keypst=0;
uchar cradd1,cradd2;
//**********************************************
#define RS BIT3
#define RW BIT2
#define E BIT1
#define CS1 BIT4
#define CS2 BIT5
#define MAX_CP BIT6
#define DA_CP BIT7
#define LPA BIT7
#define BPA BIT6
#define HPA BIT5
#define MAX_313 BIT4
#define BPB BIT3
#define HPB BIT2
#define Sensor_Signal_Importing BIT1
#define LPB BIT0
//数据线:p5口 ,控制线: p3口
//**********************************************
//=======================================================
void short_delay(uint i)
{ uint j;
for(j=0;j<=i;j++);
}
void delayms(uchar tickms)
{ uchar count,i;
_NOP();
_NOP();
_NOP();
for(i=tickms;i>0;i--)
{ for(count=0;count<=58;count++) {;}
_NOP();
}
}
//*****************************************
unsigned char keyscan(void) //键盘扫描程序
{
unsigned char x;
P1DIR=0X0F;
P1OUT=0X0e; //扫描第一行
if((P1IN&0Xf0)==0Xe0)
x=15;
else
if((P1IN&0Xf0)==0Xd0)
x=14;
else
if((P1IN&0Xf0)==0xb0)
x=13;
else
if((P1IN&0Xf0)==0x70)
x=12;
else
{
P1OUT=0X0d; //扫描第二行
if((P1IN&0Xf0)==0Xe0)
x=11;
else
if((P1IN&0Xf0)==0Xd0)
x=10;
else
if((P1IN&0Xf0)==0xb0)
x=0;
else
if((P1IN&0Xf0)==0x70)
x=9;
else
{
P1OUT=0X0b; //扫描第三行
if((P1IN&0Xf0)==0Xe0)
x=8;
else
if((P1IN&0Xf0)==0Xd0)
x=7;
else
if((P1IN&0Xf0)==0xb0)
x=6;
else
if((P1IN&0Xf0)==0x70)
x=5;
else
{P1OUT=0x07; //扫描第四行
if((P1IN&0Xf0)==0Xe0)
x=4;
else
if((P1IN&0Xf0)==0Xd0)
x=3;
else
if((P1IN&0Xf0)==0xb0)
x=2;
else
if((P1IN&0Xf0)==0x70)
x=1;
}
}
}
return(x);
}
//***********************************************
unsigned char keyj(void) //判断是否有键按下
{unsigned char k;
P1DIR=0x0f;
P1OUT=0x00; //键盘硬件:P10--P13为行线,最下面一根为P10
if((P1IN&0Xf0)!=0xf0)
k=1; // P14--P16为列线,最右边一根为P14,
else k=0;
return(k); // 无按键,返回 0?; 有按键返回 非0
}
//**************************************************
void prl0(uchar com1)// 写指令代码子程序(左)
{
P3DIR|=0X7F; //P3为输出口
P3OUT|=CS1; //csa=1
P3OUT&=~CS2; //csb=0
P3OUT&=~RS;
P3OUT|=RW; //RS=0,R/W=1,以便读液晶状态
P5DIR=0x00; //P5口为输入口
do
{
P3OUT|=E; //E=1
cradd1=P5IN;
P3OUT&=~E; //E=0
}
while((cradd1&0x80)!=0);
P3OUT&=~RW; //rw=0
P5DIR=0xff; //P5口为输出口
P5OUT=com1;
P3OUT|=E; //E=1
P3OUT&=~E; //E=0
}
//**************************************************
void prl1(uchar dat1)// 写显示数据子程序(左)
{
P3DIR|=0XFF; //P5为输出口
P3OUT|=CS1; //csa=1
P3OUT&=~CS2; //csb=0
P3OUT&=~RS;
P3OUT|=RW; //RS=0,R/W=1,以便读液晶状态
P5DIR=0x00; //P5口为输入口
do
{
P3OUT|=E; //E=1
cradd1=P5IN;
P3OUT&=~E; //E=0
}
while((cradd1&0x80)!=0);
P3OUT|=RS; //rs=1
P3OUT&=~RW; //rw=0
P5DIR=0xff; //P5口为输出口
P5OUT=dat1;
P3OUT|=E; //E=1
P3OUT&=~E; //E=0
}
//**************************************************
void prr0(uchar com2)// 写指令代码子程序(右)
{
P3DIR|=0X7F; //P3为输出口
P3OUT&=~CS1; //csa=0
P3OUT|=CS2; //csb=1
P3OUT&=~RS;
P3OUT|=RW; //RS=0,R/W=1,以便读液晶状态
P5DIR=0x00; //P5口为输入口
do
{
P3OUT|=E; //E=1
cradd1=P5IN;
P3OUT&=~E; //E=0
}
while((cradd1&0x80)!=0);
P3OUT&=~RW; //rw=0
P5DIR=0xff; //P5口为输出口
P5OUT=com2;
P3OUT|=E; //E=1
P3OUT&=~E; //E=0
}
//*************************************************
void prr1(uchar dat2)// 写显示数据子程序(右)
{
P3DIR|=0X7F; //P3为输出口
P3OUT&=~CS1; //csa=0
P3OUT|=CS2; //csb=1
P3OUT&=~RS;
P3OUT|=RW; //RS=0,R/W=1,以便读液晶状态
P5DIR=0x00; //P5口为输入口
do
{
P3OUT|=E; //E=1
cradd1=P5IN;
P3OUT&=~E; //E=0
}
while((cradd1&0x80)!=0);
P3OUT|=RS; //rs=1
P3OUT&=~RW; //rw=0
P5DIR=0xff; //P5口为输出口
P5OUT=dat2;
P3OUT|=E; //E=1
P3OUT&=~E; //E=0
}
//**********************************************
void hzw_pr(uchar page2,uchar colum2,uchar *code2)// 写一个汉字
//page2:页 colum2:列 code2:代码 表示哪个汉字
{ uchar i,j,colum;
uchar *hzp;
uchar flag;
hzp=code2;
for(j=0;j<2;j++)
{ prl0(page2|0xb8); //页
prr0(page2|0xb8);
colum=colum2;
if(colum2>63) //右屏
{ colum=colum-64;
prr0(colum|0x40);
flag=1;
}
else //左屏
{prl0(colum|0x40);
flag=0; }
//*********************
for(i=0;i<16;i++)
{ //a
if(flag==0)
{ prl1(*hzp);
}
else
{prr1(*hzp);}
hzp++;
if(colum==64) //列=64
{ //b
colum=0;
if(flag==0)
{
flag=1;
prr0(colum|0x40);
}
else {break;}
} //b
colum++;
} //a
page2++;
}
}
//**********************************************
void shzw_pr(uchar page1,uchar colum1,uchar *code1)// 写一个数字
//page式:页 colum1:列 code1:代码 表示哪个数字
{ uchar i,j,colum;
uchar *hzp;
uchar flag;
hzp=code1;
for(j=0;j<2;j++)
{ prl0(page1|0xb8); //页
prr0(page1|0xb8);
colum=colum1;
if(colum1>63) //右屏
{ colum=colum-64;
prr0(colum|0x40);
flag=1;
}
else //左屏
{prl0(colum|0x40);
flag=0; }
//*********************
for(i=0;i<8;i++)
{ //a
if(flag==0)
{ prl1(*hzp);
}
else
{prr1(*hzp);}
hzp++;
if(colum==64) //列=64
{ //b
colum=0;
if(flag==0)
{
flag=1;
prr0(colum|0x40);
}
else {break;}
} //b
colum++;
} //a
page1++;
}
}
//******************************************
void shzw_str(uchar x,uchar **str) //写数字字符串函数,"二维指针","指针"无法直接接受"指针数组"传递来的地址
{ uchar y;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -