📄 text2.c
字号:
#include<reg51.h>
#include <string.h>
#include <intrins.h>
#define uchar unsigned char
#define uint unsigned int
#define COUNT 10
#define NODE_ADDR 64
sbit SID = P1^3; //数据
sbit SCLK = P1^4; //时钟
sbit P15=P1^5;
unsigned char buffer[COUNT];
int pointer;
void lcm_w_word(unsigned char *str) ; //写字符 例:lcm_w_word("您好!");
void lcm_w_test(bit start,unsigned char ddata); //(0,指令) (1,数据)
void lcm_w_byte(unsigned char bbyte); //写一个字节给lcm
void delaynms(unsigned int di); //延时
void lcm_init(void); //lcm初始化
void lcm_clr(void); //清屏
void DelayM(unsigned int a);
void DelayM(unsigned int a){//延时函数 1MS/次
unsigned char i;
while( --a != 0){
for(i = 0; i < 125; i++); //一个 ; 表示空语句,CPU空转。
} //i 从0加到125,CPU大概就耗时1毫秒
}
/**********************************************************************/
//延迟函数 11us
void delay(int t)
{
for(;t>0;t--);
}
/****************************************************************************/
//初始化LCM
void lcm_init(void) {
delaynms(100); //启动等待,等LCM讲入工作状态
lcm_w_test(0,0x30); //8 位介面,基本指令集
lcm_w_test(0,0x0c); //显示打开,光标关,反白关
lcm_w_test(0,0x01); //清屏,将DDRAM的地址计数器归零
delaynms(100); //启动等待,等LCM讲入工作状态
}
/******************************************************************************/
//写指令或数据 (0,指令) (1,数据)
void lcm_w_test(bit start, unsigned char ddata) {
unsigned char start_data,Hdata,Ldata;
if(start==0)
start_data=0xf8; //0:写指令
else
start_data=0xfa; //1:写数据
Hdata=ddata&0xf0; //取高四位
Ldata=(ddata<<4)&0xf0; //取低四位
lcm_w_byte(start_data); //发送起始信号
delaynms(5); //延时是必须的
lcm_w_byte(Hdata); //发送高四位
delaynms(5); //延时是必须的
lcm_w_byte(Ldata); //发送低四位
delaynms(5); //延时是必须的
}
/******************************************************************************/
//发送一个字节(底层函数)
void lcm_w_byte(unsigned char bbyte) {
unsigned char i;
for(i=0;i<8;i++){
SID=bbyte&0x80; //取出最高位
SCLK=1;
SCLK=0;
bbyte<<=1; //左移
}
}
/******************************************************************************/
//延时(LCM占用)
void delaynms(unsigned int di) {
unsigned int da,db;
for(da=0;da<di;da++);
for(db=0;db<10;db++);
}
/*****************************************************************************/
//清屏函数
void lcm_clr(void){
lcm_w_test(0,0x01);
delaynms(40); //启动等待,等LCM讲入工作状态
}
/*****************************************************************************/
//向LCM发送一个字符串,长度64字符之内。
//应用:lcm_w_word("您好!");
void lcm_w_word(unsigned char *str){
while(*str != '\0'){
lcm_w_test(1,*str++);
}
*str = 0;
}
main()
{
int i=0;
lcm_init();//初始化液晶显示器
lcm_w_word("上位机为");
// for(i;i<11;i++)
// {lcm_w_test(1,buffer[i]);}
P15=0;
SCON=0xf0;
TMOD=0x20;
TH1=0xfd;
TR1=1;
ET1=0;
ES=1;
EA=1;
pointer=0;
while(pointer<COUNT);
for(i;i<4;i++)
{lcm_w_test(1,buffer[i]);}
lcm_w_word("度");
{DelayM(100);}
}
void receive(void) interrupt 4 using 3
{
RI=0;
if(RB8==1)
{
if(SBUF==NODE_ADDR) SM2=0;
return;
}
buffer[pointer++]=SBUF;
if(pointer>=COUNT)
{
SM2=1;
}
// lcm_w_test(1,buffer[pointer]);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -