#include <stdio.h>
#include <reg52.h>
#include "intrins.h"
#define uchar unsigned char
#define uint unsigned int
//LCD模塊函式
sbit LCD_RS = P3^5; //引腳
sbit LCD_RW = P3^6;
sbit LCD_E = P3^7;
uchar table1[]="TEMPURATRUE:"; //固定陣列
void DELAY50US(uint t) //延時函式,在12兆赫茲的晶振頻率下50us的延時
{
uchar j;
for(;t>0;t--)
for(j=19;j>0;j--);
}
void DELAY50MS(uint t)
{
uint j;
for(;t>0;t--)
for(j=6245;j>0;j--);
}
void LCD_WRIN(uchar com)//寫指令
{
LCD_E = 0;
LCD_RS = 0;
LCD_RW = 0;
P0 = com;
DELAY50US(10);
LCD_E = 1;
DELAY50US(10);
LCD_E = 0;
}
void LCD_WRDATA(uchar dat)//寫資料
{
LCD_E = 0;
LCD_RS = 1;
LCD_RW = 0;
P0 = dat; //送資料
DELAY50US(10);
LCD_E = 1;
DELAY50US(10);
LCD_E = 0;
}
void LCD_BGN(void) //初始化
{
DELAY50US(300); //延時15ms
LCD_WRIN(0x38); //8位總線,2行,5x7點陣,
DELAY50US(100); //延時5ms
LCD_WRIN(0x08);
LCD_WRIN(0x01); //清屏
LCD_WRIN(0x06); //字符不動,游標后移
LCD_WRIN(0x0C); //開顯示,關游標
}
uchar i;
uint table4[5];
uint a;
float b;
void main()
{
a = 75;
b = a/6;
sprintf(table4,"%lf",b);
LCD_BGN();
LCD_WRIN(0x80);
for(i=0;i<12;i++)
{
LCD_WRDATA(table1[i]);
DELAY50US(10);
}
LCD_WRIN(0xC0);
for(i=0;i<5;i++)
{
LCD_WRDATA(table4[i]);
DELAY50US(10);
}
while(1);
}
想實作效果:第一行顯示:TEMPURATURE: 第二行顯示:12.50
仿真結果如圖,不知道哪里出了問題,求教大佬uj5u.com熱心網友回復:
記得每行需要發個首址,或者你要看看LCD規格書第一行顯示首址:LCD_WRIN(0x80);
第二行顯示首址:LCD_WRIN(0x90);
uj5u.com熱心網友回復:
uchar table4[5];b = a/6.0;
sprintf(table4,"%f",b);
這三句應改。
uj5u.com熱心網友回復:
細節!
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/44059.html
標籤:單片機/工控
上一篇:請問各位大神,我想利用USART發送資料改變占空比來使舵機轉到不同的的角度,為什么只有第一下是可以的?
下一篇:逆變器
