久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费
標題:
stc89c51單片機+pcf8574(默認地址0x27)+lcd1602沒有亮
[打印本頁]
作者:
jokerking
時間:
2023-3-21 16:03
標題:
stc89c51單片機+pcf8574(默認地址0x27)+lcd1602沒有亮
stc89c51+pcf8574(默認地址0x27)+lcd1602代碼燒錄上去,lcd沒有亮,不知道到底是哪里出現(xiàn)了問題,LCD1602是在某一個寶上面買的,只有個C8051的破的代碼和arduino都用不了,我們學校要求用stc89c51單片機去編寫,求大佬看看哪里出現(xiàn)了問題。
1679385714895.jpg
(2.48 MB, 下載次數(shù): 36)
下載附件
2023-3-21 16:02 上傳
單片機源程序如下:
#include <reg52.h>
#include "intrins.h"
#define uchar unsigned char
#define uint unsigned int
//#define L1 0x80 // 第一行寫入地址
//#define L2 0xc0 // 第二行寫入地址
sbit SCL = P2^1;
sbit SDA = P2^0;
uchar woder[]={"wangzijie"};
//char ADDR = 0x4E; // PCF8574 T 模塊的地址碼
//char ADDR = 0x7e; // PCF8574 AT 模塊的地址碼
char ADDR = 0x27; // PCF8574 AT 模塊的地址碼
//***************************** 延時 y ms ***********************************************
void delay1(int y) //
{
;
while(y--)
{
unsigned char a,b,c;
for(c=1;c>0;c--)
for(b=142;b>0;b--)
for(a=2;a>0;a--);
}
}
//******************************** IIC 串口開始 ********************************************
void IIC_start(void)
{
SDA=1;
_nop_();
SCL=1;
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
SDA=0;
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
SCL=0;
}
//********************************** IIC 串口寫1個字節(jié) ******************************************
void IIC_writeByte(char temp)
{
char i;
for(i=0;i<8;i++)
{
SDA=(bit)(temp & 0x80) ; // 根據(jù)規(guī)定1602的數(shù)據(jù)最高位必須為 1
temp <<=1;
_nop_();
_nop_();
SCL=1;
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
SCL=0;
}
_nop_();
_nop_();
_nop_();
_nop_();
SDA=1;
_nop_();
_nop_();
_nop_();
_nop_();
SCL=1;
_nop_();
_nop_();
_nop_();
while(SDA);
_nop_();
SCL=0;
}
//******************************** 1602寫命令 ********************************************
void LCD_write_command(char comm)
{
char tmp;
IIC_start(); // 串口開始
IIC_writeByte(ADDR); // 先選PCF 8574T 的地址 (應該是相當于選中的意思吧)
tmp = comm & 0xF0; // 與0xf0 應該是取第四位的意思吧
tmp |= 0x0C; //保留高4位為指令的高四位,低四位為 RS = 0, RW = 0, EN = 1
IIC_writeByte(tmp); //從串口送出
delay1(20);
tmp &= 0xFB; //Make EN = 0
IIC_writeByte(tmp);
tmp = (comm & 0x0F) << 4 ; //將指令的低四位 送到高位置保存
tmp |= 0x0C; //RS = 0, RW = 0, EN = 1
IIC_writeByte(tmp);
delay1(20);
tmp &= 0xFB; // Make EN = 0
IIC_writeByte(tmp);
}
//******************************** 1602寫數(shù)據(jù) ********************************************
void LCD_write_data(char data1)
{
char tmp;
IIC_start();
IIC_writeByte(ADDR); // 先選PCF8574T 的地址 (應該是相當于選中的意思吧)
tmp = data1 & 0xF0;
tmp |= 0x0D; //RS = 0, RW = 0, EN = 1
IIC_writeByte(tmp);
delay1(20);
tmp &= 0xFB; //Make EN = 0
IIC_writeByte(tmp);
tmp = (data1 & 0x0F) << 4 ;
tmp |= 0x0D; //RS = 0, RW = 0, EN = 1
IIC_writeByte(tmp);
delay1(20);
tmp &= 0xFB ; // Make EN = 0
IIC_writeByte(tmp);
}
//******************************** 1602初始化 ********************************************
void Init_Lcd(void)
{
LCD_write_command(0x33); //將8位總線轉(zhuǎn)為4位總線
delay1(50) ;
LCD_write_command(0x32); //
delay1(50) ;
LCD_write_command(0x28); // 4位數(shù)據(jù)線0x28,顯示2行,5*7點陣字符 !如果是0x38 則為8位數(shù)據(jù)線,顯示2行,5*7點陣字符
delay1(50) ;
LCD_write_command(0x0C); // 開顯示,關閉光標,不閃爍
delay1(50) ;
LCD_write_command(0x06); // 設定輸入方式,增量不位移
delay1(50) ;
LCD_write_command(0x01); // 清屏
delay1(50) ;
// LCD_write_command(0x80); //設置數(shù)據(jù)指針起點
// delay1(50) ;
}
//*************************************** 在指定位置顯示字符串 *************************************
void Write_LCD(int x, int y, char *str)
{
char addr;
if( x < 0)
{
x = 0;
}
if(x > 15)
{
x = 15;
}
if(y<0)
{
y = 0;
}
if(y > 1)
{
y = 1;
}
addr = 0x80 + 0x40 * y + x; // Move cursor 移動光標
LCD_write_command(addr);
while (*str)
{
LCD_write_data(*str++);
}
}
//-------------------------------------------- 顯示字符串的函數(shù) ----------------------------------------------------
void LCD_write_word(unsigned char *s) //顯示字符串的函數(shù)
{
while(*s>0)
{
LCD_write_data(*s);
s++;
}
}
void main()
{
uchar i;
Init_Lcd();
// for(i=0;i<9;i++)
// {
Write_LCD(0,0,(uchar *)woder[i]);
LCD_write_word((uchar *)woder[i]);
// }
while(1);
}
//********************************* 指定位置顯示一個字符*******************************************
/*
void Print_Char (unsigned char line,unsigned char num,unsigned char date)
{
LCD_write_command(line+num);
LCD_write_data(date);
}
*/
//按指定位置顯示一個字符(針對1602液晶)-用在溫度顯示
//void DisplayOneChar(unsigned char X, unsigned char Y, unsigned char DData)
//{
//Y &= 0x1;
//X &= 0xF; //限制X不能大于15,Y不能大于1
//if (Y) X |= 0x40; //當要顯示第二行時地址碼+0x40;
//X |= 0x80; // 算出指令碼
//LCD_write_command(X); //這里不檢測忙信號,發(fā)送地址碼
//LCD_write_data(DData);
//}
復制代碼
歡迎光臨 (http://www.zg4o1577.cn/bbs/)
Powered by Discuz! X3.1
主站蜘蛛池模板:
亚洲精品电影网在线观看
|
免费在线毛片
|
一区二区电影网
|
九九精品视频在线
|
久久久入口
|
日本一区二区不卡
|
av一区在线观看
|
免费观看一级特黄欧美大片
|
久久亚洲天堂
|
欧美一区二区在线
|
成人亚洲性情网站www在线观看
|
黑人巨大精品欧美一区二区免费
|
亚洲欧美精品久久
|
日韩欧美综合在线视频
|
日韩欧美亚洲
|
www.99热这里只有精品
|
九九亚洲精品
|
欧美一级欧美一级在线播放
|
福利视频一区
|
亚洲精品乱码久久久久久9色
|
精品二
|
99福利网
|
亚洲狠狠
|
一区二区三区精品在线
|
亚洲精品视频二区
|
国产精品18hdxxxⅹ在线
|
国产蜜臀
|
日本久久久一区二区三区
|
久久久久久久久久久久久91
|
欧美一区二区
|
亚洲成人高清
|
久久99精品视频
|
污书屋
|
欧美专区在线观看
|
国产精品日日摸夜夜添夜夜av
|
婷婷开心激情综合五月天
|
91精品国产综合久久久动漫日韩
|
男女羞羞视频网站
|
精品国产三级
|
在线视频 欧美日韩
|
午夜精品视频在线观看
|