单片机控制1601液晶屏只显示8个字符!?

单片机控制1601液晶屏只显示8个字符!?,第1张

你仿照这个程序改改你的显示

#include<reg52.h>

#include <intrins.h>

#include <math.h>

#include <stdio.h>

#define uchar unsigned char

#define uint unsigned int

#define LCD_DATA P0

sbit lcd_flag=P0^7

sbit LCD_RS=P3^0

sbit LCD_RW=P3^1

sbit LCD_E=P3^3

sbit p32=P3^2

sbit ST=P2^3

sbit OE=P2^4

sbit EOC=P2^5

static long int counter

static long float f

float Vbuf=0,xy,tmp,flag=0

void lcd_delay(int ms) //延时函数

{

uchar i

while(ms--)

{

for(i=0i<250i++)

{

_nop_()_nop_()_nop_()_nop_()

}

}

}

bit lcd_busy()//判断是否忙碌 RS=Low,RW=High,E=High:读状态

{

bit flag

LCD_RS=0//寄存器为Low

LCD_RW=1//是否读写为High

LCD_E=1 //使能端为High

if (lcd_flag==1) flag=1

else flag=0

LCD_E=0

return flag//返回标志,判断是否LCD忙碌

}

write_command(uchar command)//写指令时序

{ while(lcd_busy())

LCD_RS=0

LCD_RW=0

LCD_E=0

LCD_DATA=command

//delay_1ms(5)

LCD_E=1

LCD_E=0

}

write_data(uchar da) //写数据时序

{ while(lcd_busy())

LCD_RS=1

LCD_RW=0

LCD_E=0

// delay_1ms(5)

LCD_DATA=da

LCD_E=1

LCD_E=0

}

void LCD_INIT(void)

{ write_command(0x38)lcd_delay(1)//LCD为2行,5×7字

write_command(0x0c)lcd_delay(1)//打开显示,显示光标,光标不闪

write_command(0x06) lcd_delay(1)//每次右移一字符

}

void main()

{

uchar i,j,n

uchar buff[16],buf[16]

LCD_INIT()

P2 &=0xf8

while(1)

{

flag++

if(flag >= 10)

{

ST = 0

OE = 0

ST = 1

ST = 0

if(EOC == 1)

{

OE = 1

xy = P1

OE =0

if(xy >tmp)

{

tmp = xy

Vbuf = xy*1.0/50

}

}

}

if(flag <10)

{

TMOD=0X09

TH0=0

TL0=0

while(p32==1)

TR0=1

while(p32==0)

while(p32==1)

TR0=0

}

counter=TH0*256+TL0

while(counter<=500) /*判断是否分频及计算分频次数*/

{

P2++

i++

counter=counter*10

if(i==2)

{

P2 &= 0xf8

break

}

}

f=(1843200.0/(2*counter))*pow(10,i)

sprintf(buf,"V=%4.2fv",Vbuf)

//if(f<1500) f = f / 1.3123

if(f<1000)

{

sprintf(buff,"f=%4.2fHZ",f)

}

else if(f<1000000)

{

f=f/1000

sprintf(buff,"f=%4.2fkHZ",f)

}

write_command(0x80)

for( j=0j<16&&buf[j] != '\0'j++)

{

write_data(buf[j])

}

write_command(0xc0)

for(n=0n<16&&buff[n]!='\0'n++)

{

write_data(buff[n])

}

}

}

#include <reg51.h>

#define uchar unsigned char

#define uint unsigned int

#define lcd_ports P1

sbit lcdrs=P3^5

sbit lcdrw=P3^3

sbit lcde=P3^4

void delay(uint z) //延迟子程序

{

uchar i,j

for(i=zi>0i--)

for(j=256j>0j--)

}

void write_com(uchar com) //1602写指令

{

lcdrs=0

P1=com

delay(5)

lcde=1

delay(5)

lcde=0

}

void write_data(uchar date) //1602写数据,写的是你要显示数据的ASCLL码值

{

lcdrs=1

P1=date

delay(5)

lcde=1

delay(5)

lcde=0

}

void init() //初始化

{

lcdrw=0

lcde=0

write_com(0x38)//使液晶显示点阵

write_com(0x0e)//初始设置

write_com(0x06) //初始设置

write_com(0x01) //清零

write_com(0x80+0x00)//使指针指向第一行第一列

}

void main()

{

init()

while(1){

write_com(0x80)//从第一行第一列开始写数据。

write_data(0x73) //显示s字符

write_data(0x69)//第一行第二列显示字符i

write_data(0x6e)//第一行第三列显示字符n

write_data(0x65)//第一行第四列显示字符e;}

}

南京罗姆液晶显示技术有限公司是旗下直属公司,成立于2000年,致力于液晶显示屏、液晶显示模组产品的生产、研发和销售。公司拥有强大的模块设计、开发和生产能力,公司各类COB、COG、SMT液晶显示模组种类达上百种,主要经营128128、24032、320240、12864、160128、19264、240128、160160等系列还可以为客户定制特殊需要,产品遍及医疗、衡器、电力控制、工业、航空、电子、仪表、数控机床、汽车电子、通讯领域等。

公司同时还拥有优秀的销售团队和专业的服务部门,不但在品牌、价格、供货、服务等方面领先业界,而且可为客户提供及时、可行的技术支持和整体服务,满足不同客户多层次需要。

公司秉承“尽全力为客户提供一流的产品和服务”的经营宗旨,以“诚信、服务、创新、共赢”的经营理念,在业界用户中赢得了赞誉和支持。

hi,我有详细资料哦,加我的Q:1376235918 发给你 1


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

原文地址: http://outofmemory.cn/yw/11365545.html

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

发表评论

登录后才能评论

评论列表(0条)

保存