关于51单片机12864程序的问题

关于51单片机12864程序的问题,第1张

用这个吧。我以前用的

#include <reg52h>

#include<intrinsh>

#include <stringh>

#define uchar unsigned char

#define uint unsigned int

//8bit数据接入IO口

#define Part P0 //P0接8位数据线

//控制数据端

sbit LCD_RS=P3^2; //定义12864液晶RS端,寄存器选择信号 H:数据寄存器 L:指令寄存器

sbit LCD_RW=P1^1; //定义12864液晶RW端,读/写信号 H:读 L:写

sbit LCD_EN=P1^2; //定义12864液晶LCDEN端, 片选信号 下降沿触发,锁存数据

//sbit LCD_PSB=P3^2; //定义12864液晶PSB端, H:并行 L:串行

sbit LCD_RST=P3^6; //定义12864液晶RST端, H:不复位 L:复位

sbit AD_ST=P1^6;//定义AD

sbit AD_OE=P3^7;

sbit AD_A=P1^3;

sbit AD_B=P1^4;

sbit AD_C=P1^5;

sbit AD_EOC=P1^7;

sfr T2MOD=0XC9;

uchar code dis1[]={"转速"};

uchar code dis2[]={"加速度x方向"};

uchar code dis3[]={"加速度y方向"};

uchar code dis4[]={"加速度z方向"};

uchar code Text[]={"欢迎大家观看"};

uint i;

uchar code dat[];

int jishu;

int sudu1;

int sudu2;

int maichong1;

int maichong2;

//毫秒延时函数

void delayms(uint x) //nms的延时

{

uint i;

while(x--)

{

for(i=0;i<125;i++)

{;}

}

}

void delay(uint xms)

{

uint i,j;

for(j=0;i<xms;j++)

for(i=0;i<110;i++);

}

//LCD忙检测函数

bit lcd_busy()

{

bit result;

LCD_RS=0;

LCD_RW=1;

LCD_EN= 1;

result=(bit)(Part & 0x80);

LCD_EN=0;

return result;

}

//液晶写命令函数

void lcd_write_cmd(uchar com)

{

while(lcd_busy());

LCD_RS=0; //选择指令寄存器

LCD_RW=0; //写

LCD_EN=0;

Part=com; //指令值赋给P0口

delay(5);

LCD_EN=1;

delay(5);

LCD_EN=0;

}

//液晶写一个字符数据函数

void lcd_write_dat(uchar date)

{

while(lcd_busy());

LCD_RS=1; //选择数据寄存器

LCD_RW=0; //写

LCD_EN=0;

P0=date; //数据值赋给P0口

delay(5);

LCD_EN=1;

delay(5);

LCD_EN=0;

}

//液晶写一个字符串函数

void lcd_write_string(uchar str)

{

while(str!='\0') //未结束

{

lcd_write_dat(str++);

delay(5);

}

}

//液晶显示位置函数

void lcd_pos(uchar x,uchar y) //从第X行的第Y位置开始显示

{

uchar pos;

if(x==1) //第一行

{x=0x80;}

else if(x==2) //第二行

{x=0x90;}

else if(x==3) //第三行

{x=0x88;}

else if(x==4) //第四行

{x=0x98;}

pos=x+y-1; //首地址为0X80

lcd_write_cmd(pos);

}

//液晶初始化函数

void lcd_init()

{

// LCD_PSB=1; //并行方式

LCD_RST=1; //不复位

lcd_write_cmd(0x30);

delay(5);

lcd_write_cmd(0x0c); //开显示,不显示光标

delay(5);

lcd_write_cmd(0x06); //写一个字符后地址指针自动加1

delay(5);

lcd_write_cmd(0x01); //清屏

delay(5);

}

/12864并行接口参考程序,控制器st7920/

#include <reg51h>

#include <intrinsh>

sbit RS = P3^0;

sbit RW = P3^3;

sbit E = P3^4;

sbit PSB = P3^1; //串并口选择

sbit RES = P3^5;

#define FIRST_ADDR 0 //定义字符/汉字显示起始位置

//延时子程序

void delay(unsigned int t)

{ unsigned int i,j;

for(i=0;i<t;i++);

for(j=0;j<10;j++);

}

//测忙

void chk_busy()

{ RS=0;

RW=1;

E=1;

while((P1&0x80)==0x80);

E=0;

}

//读数据

unsigned char lcdrd()

{ unsigned char i;

P3=0xFB;

_nop_();

E=1;

delay(5);

i=P1;

_nop_();

E=0;

return i;

}

//写数据

void lcdwd(unsigned char dispdata)

{ chk_busy();

_nop_();

RS=1;

RW=0;

E=1;

P1=dispdata;

delay(5);

_nop_();

E=0;

_nop_();

P1=0xff;

}

//写指令代码

void lcdwc(unsigned char cmdcode)

{ chk_busy();

_nop_();

RS=0;

RW=0;

E=1;

P1=cmdcode;

delay(5);

_nop_();

E=0;

_nop_();

P1=0xff;

}

//初始化

void lcdreset()

{ delay(2000);

lcdwc(0x30); //选择基本指令集

lcdwc(0x30); //选择8bit数据流

delay(5);

lcdwc(0x0c); //开显示(无游标、不反白)

delay(5);

lcdwc(0x01); //清除显示,并且设定地址指针为00H

delay(5);

lcdwc(0x06); //指定在资料的读取及写入时,设定游标的移动方向及指定显示的移位

}

void hzkdis(unsigned char code s)

{ while(s>0)

{ lcdwd(s);

s++;

delay(500);

}

}

void hzklib()

{ lcdwc(0x80+FIRST_ADDR);

hzkdis("少小离家老大回,");

lcdwc(0x90+FIRST_ADDR);

hzkdis("乡音无改鬓毛衰。");

lcdwc(0x88+FIRST_ADDR);

hzkdis("儿童相见不相识,");

lcdwc(0x98+FIRST_ADDR);

hzkdis("笑问客从何处来。");

}

//整屏显示

//当ii=0时显示上面128×32

//当ii=8时显示下面128×32

void lcdfill(unsigned char disdata)

{ unsigned char x,y,ii;

for(ii=0;ii<9;ii+=8)

for(y=0;y<0x20;y++)

for(x=0;x<8;x++)

{ lcdwc(0x36);

lcdwc(y+0x80); //行地址

lcdwc(x+0x80+ii); //列地址

lcdwc(0x30);

lcdwd(disdata);

lcdwd(disdata);

}

}

//当ii=0时显示上面128×32

//当ii=8时显示下面128×32

void lcdfill_upright(unsigned char disdata)

{ unsigned char x,y,ii;

unsigned char i,f,k;

for(ii=0;ii<9;ii+=8)

for(y=0;y<4;y++)

{ f=disdata;

for(i=0;i<8;i++)

{ if((f&1)==1)

k=0xff;

else

k=0;

for(x=0;x<8;x++)

{ lcdwc(0x36);

lcdwc(y8+i+0x80);

lcdwc(x+0x80+ii);

lcdwc(0x30);

lcdwd(k);

lcdwd(k);

}

f>>=1;

}

}

}

main()

{ unsigned char i;

i=0x55;

RES=0;

_nop_();

RES=1;

while(1)

{ PSB=1;

RW=0;

lcdreset(); //初始化LCD屏

lcdwc(0x01);

delay(1000);

lcdfill(0xff);

delay(6000);

lcdfill(i); //显示竖条

delay(6000);

lcdfill_upright(i); //显示横条

delay(6000);

lcdfill(0);

lcdwc(0x01);

delay(1000);

hzklib();

delay(4000);

i=~i;

}

}

以上就是关于关于51单片机12864程序的问题全部的内容,包括:关于51单片机12864程序的问题、用51单片机控制TH12864-15LCD显示文字程序、等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/zz/10214496.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-06
下一篇2023-05-06

发表评论

登录后才能评论

评论列表(0条)

    保存