單片機(jī)通過(guò) PCF8574T 模塊驅(qū)動(dòng) 1602/2004 LCD,有需要的朋友看看。//-------------------------------------------------------------------------------------------------------------------------------------------------------
#include
#include "intrins.h"
#define uchar unsigned char
#define uint unsigned int
//#define L1 0x80 // 第一行寫(xiě)入地址
//#define L2 0xc0 // 第二行寫(xiě)入地址
sbit SCL = P2^0;
sbit SDA = P2^1;
//char ADDR = 0x4E; // PCF8574 T 模塊的地址碼
char ADDR = 0x7e; // PCF8574 AT 模塊的地址碼
//***************************** 延時(shí) 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 串口開(kāi)始 ********************************************
void IIC_start(void)
{
SDA=1;
_nop_();
SCL=1;
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
SDA=0;
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
SCL=0;
}
//********************************** IIC 串口寫(xiě)1個(gè)字節(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寫(xiě)命令 ********************************************
void LCD_write_command(char comm)
{
char tmp;
IIC_start(); // 串口開(kāi)始
IIC_writeByte(ADDR); // 先選PCF 8574T 的地址 (應(yīng)該是相當(dāng)于選中的意思吧)
tmp = comm & 0xF0; // 與0xf0 應(yīng)該是取第四位的意思吧
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寫(xiě)數(shù)據(jù) ********************************************
void LCD_write_data(char data1)
{
char tmp;
IIC_start();
IIC_writeByte(ADDR); // 先選PCF 8574T 的地址 (應(yīng)該是相當(dāng)于選中的意思吧)
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ù)線,顯示2行,5*7點(diǎn)陣字符 !如果是0x38 則為8位數(shù)據(jù)線,顯示2行,5*7點(diǎn)陣字符
delay1(50) ;
LCD_write_command(0x0C); // 開(kāi)顯示,關(guān)閉光標(biāo),不閃爍
delay1(50) ;
LCD_write_command(0x06); // 設(shè)定輸入方式,增量不位移
delay1(50) ;
LCD_write_command(0x01); // 清屏
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 移動(dòng)光標(biāo)
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++;
}
}
//********************************* 指定位置顯示一個(gè)字符*******************************************
/*
void Print_Char (unsigned char line,unsigned char num,unsigned char date)
{
LCD_write_command(line+num);
LCD_write_data(date);
}
*/
//按指定位置顯示一個(gè)字符(針對(duì)1602液晶)-用在溫度顯示
void DisplayOneChar(unsigned char X, unsigned char Y, unsigned char DData)
{
Y &= 0x1;
X &= 0xF; //限制X不能大于15,Y不能大于1
if (Y) X |= 0x40; //當(dāng)要顯示第二行時(shí)地址碼+0x40;
X |= 0x80; // 算出指令碼
LCD_write_command(X); //這里不檢測(cè)忙信號(hào),發(fā)送地址碼
LCD_write_data(DData);
}
上一篇:基于51單片機(jī)的DHT11溫濕度檢測(cè)控制系統(tǒng)設(shè)計(jì)
下一篇:MCS-51單片機(jī)寄存器TMOD的工作選擇方式解析
推薦閱讀
史海拾趣
在數(shù)字化時(shí)代,通信技術(shù)的更新?lián)Q代速度極快。為了保持競(jìng)爭(zhēng)優(yōu)勢(shì),Black Box不斷投入研發(fā),推出了一系列創(chuàng)新產(chǎn)品和技術(shù)。例如,公司研發(fā)了一款智能網(wǎng)絡(luò)管理平臺(tái),能夠?qū)崟r(shí)監(jiān)控網(wǎng)絡(luò)狀態(tài)并進(jìn)行故障預(yù)警。這一技術(shù)創(chuàng)新大大提高了網(wǎng)絡(luò)的穩(wěn)定性和安全性,贏得了客戶的廣泛好評(píng)。
面對(duì)數(shù)字化浪潮的沖擊,超音積極響應(yīng)行業(yè)變革,加快了數(shù)字化轉(zhuǎn)型和智能化升級(jí)的步伐。公司引入了先進(jìn)的生產(chǎn)設(shè)備和管理系統(tǒng),提高了生產(chǎn)效率和產(chǎn)品質(zhì)量。同時(shí),超音還加大了對(duì)智能化產(chǎn)品的研發(fā)投入,推出了一系列具有智能化功能的音頻設(shè)備產(chǎn)品。這些產(chǎn)品不僅滿足了消費(fèi)者對(duì)高品質(zhì)音頻的需求,還提供了更加便捷和智能的使用體驗(yàn)。這些努力使得超音在數(shù)字化轉(zhuǎn)型和智能化升級(jí)方面取得了顯著成效,為公司的未來(lái)發(fā)展注入了新的活力。
隨著技術(shù)的不斷成熟和產(chǎn)品的廣泛應(yīng)用,Array Microsystems Inc開(kāi)始尋求市場(chǎng)拓展的機(jī)會(huì)。公司積極與各大電子設(shè)備制造商建立合作關(guān)系,將其陣列傳感器技術(shù)應(yīng)用于智能手機(jī)、平板電腦等消費(fèi)電子產(chǎn)品中。通過(guò)與這些企業(yè)的戰(zhàn)略合作,Array Microsystems Inc不僅擴(kuò)大了市場(chǎng)份額,還提升了品牌知名度。同時(shí),公司還積極開(kāi)拓海外市場(chǎng),將產(chǎn)品推向全球范圍。
在電子產(chǎn)品行業(yè)日益關(guān)注環(huán)保和可持續(xù)發(fā)展的背景下,ElectronicsCorp采取了一系列積極措施。公司開(kāi)始使用環(huán)保材料制造產(chǎn)品,并優(yōu)化生產(chǎn)流程以減少能源消耗和廢物排放。此外,ElectronicsCorp還推出了一系列回收計(jì)劃,鼓勵(lì)消費(fèi)者將舊電子產(chǎn)品回收再利用。這些措施不僅提高了公司的環(huán)保形象,還增強(qiáng)了消費(fèi)者對(duì)公司品牌的忠誠(chéng)度。
這幾天折騰一個(gè)AD結(jié)果換算成某比值數(shù)的問(wèn)題,終于有了結(jié)果,結(jié)果存放在一個(gè)字節(jié)內(nèi),不超過(guò)0X64(100d). 要將其轉(zhuǎn)化為2位BCD碼在七段LED上顯示,搜了一些現(xiàn)成程序,發(fā)現(xiàn)計(jì)算時(shí)間消耗較多,于是想用查表法解決。以下是子程序,二進(jìn)制數(shù)存在DATAA1里, ...… 查看全部問(wèn)答∨ |
|
隨著人們對(duì)汽車的操控性及舒適性需求不斷升高,汽車車身中的電子設(shè)備越來(lái)越多,如電動(dòng)后視鏡、中控門(mén)鎖、玻璃升降器、車燈乃至其它更多的高級(jí)功能等。 電源要求及方案選擇 (BCM)設(shè)計(jì)重要 車身控制模塊的一步是確定電源要求,以及選 ...… 查看全部問(wèn)答∨ |
VC++串口上位機(jī)簡(jiǎn)單例程(源碼及詳細(xì)步驟) VC++編寫(xiě)簡(jiǎn)單串口上位機(jī)程序 2010年4月13日10:23:40 串口通信,MCU跟PC通信經(jīng)常用到的一種通信方式,做界面、寫(xiě)上位機(jī)程序的編程語(yǔ)言、編譯環(huán)境等不少,VB、C#、LABVIEW等等,我會(huì)的語(yǔ)言很少,C語(yǔ)言用得比較多,但是還沒(méi)有找到如何用C語(yǔ)言來(lái) ...… 查看全部問(wèn)答∨ |
步驟如下: 俺先啟動(dòng)了一個(gè)小懸浮窗體,永遠(yuǎn)置頂 SetWindowPos(&(wndTopMost),10,10,25,25,SWP_DRAWFRAME); 然后啟動(dòng)我的視頻程序(MFC對(duì)話框) 在OnInitDialog中 1.設(shè)定窗體位置 SetWindowPos(NULL, 0, 0, 800, 480, SWP_NOZORDER); 2. ...… 查看全部問(wèn)答∨ |
|
請(qǐng)問(wèn)tornado2.02有l(wèi)ong long 這種類型么? 請(qǐng)問(wèn)tornado2.02有l(wèi)ong long 這種類型么? 即8個(gè)字節(jié)的整形數(shù)據(jù)? 我在c文件中定義了,對(duì)這個(gè)8字節(jié)整形變量做了除法,編譯可以生成.o,但是鏈接時(shí)報(bào)錯(cuò)。 partialImage.o(.text+0x173510): undefined reference to `__divdi3\' partialImage.o(. ...… 查看全部問(wèn)答∨ |
誰(shuí)有《電子設(shè)計(jì)從零開(kāi)始》Word或txt格式的電子書(shū) 各位大哥大姐幫幫忙,要急用啊 拜托了… 查看全部問(wèn)答∨ |
Linux下LCD驅(qū)動(dòng)的開(kāi)發(fā) 有沒(méi)有人能提供LCD驅(qū)動(dòng)的例子程序作為參考。在s3c2440上,linux的移植,驅(qū)動(dòng)是靜態(tài)捆綁好還是動(dòng)態(tài)加載好? 還有驅(qū)動(dòng)開(kāi)發(fā)方面要注意些什么?… 查看全部問(wèn)答∨ |
請(qǐng)教有關(guān)atmel的at91sam7的串口程序問(wèn)題。 void Usart_init ( void ) { COM0= AT91C_BASE_US1; //* Define RXD and TXD as peripheral // Configure PIO controllers to periph mode AT91F_PIO_CfgPeriph( ...… 查看全部問(wèn)答∨ |
設(shè)計(jì)資源 培訓(xùn) 開(kāi)發(fā)板 精華推薦
- 基于GPS自動(dòng)授時(shí)的無(wú)線智能控制器的設(shè)計(jì)
- 基于PTR2000的無(wú)線氣象信息采集系統(tǒng)設(shè)計(jì)
- Microchip推出MEC175xB系列器件,為嵌入式控制器引入硬件 抗量子攻擊能力
- 無(wú)人飛行器機(jī)載穩(wěn)定云臺(tái)控制系統(tǒng)的設(shè)計(jì)
- 匠芯創(chuàng)推出面向具身智能高性能實(shí)時(shí)處理器M7000
- 基于HW2181B的航模無(wú)線遙控通信系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)
- 應(yīng)對(duì)機(jī)器人“四高”,極海推出全球首款雙核Cortex-M52 MCU G32R501
- 非道路移動(dòng)機(jī)械透射式煙度計(jì)研究與實(shí)現(xiàn)
- 基于STM32F103的角磨機(jī)開(kāi)關(guān)磁阻電機(jī)控制器的設(shè)計(jì)
- 英特爾發(fā)布全新GPU,AI和工作站迎來(lái)新選擇
- 重新思考數(shù)據(jù)中心架構(gòu),推進(jìn)AI的規(guī)模化落地
- Samtec科普 | 一文入門(mén)射頻連接器
- 垂直農(nóng)業(yè)的挑戰(zhàn) | Samtec新型農(nóng)業(yè)漫談系列一
- 比克電池亮相CIBF 2025,全品類布局構(gòu)建發(fā)展“芯”引擎
- 欣旺達(dá)閃耀CIBF 2025:以閃充/固態(tài)電池/逸風(fēng)電池等五大技術(shù)矩陣,領(lǐng)航全球能源革命
- 全新智己L6要做「下一代產(chǎn)品」
- 2025《國(guó)產(chǎn)車規(guī)芯片可靠性分級(jí)目錄》全新發(fā)布,電子版對(duì)整車和零部件企業(yè)免費(fèi)開(kāi)放
- 寧德時(shí)代推重卡換電標(biāo)準(zhǔn),計(jì)劃三年內(nèi)電動(dòng)化滲透率達(dá)50%
- 特斯拉FSD系統(tǒng)全球測(cè)試成功,無(wú)人駕駛技術(shù)再突破
- 助人為樂(lè),打榜領(lǐng)獎(jiǎng): EEWORLD月度問(wèn)答榜換新推出~
- TI機(jī)器人系統(tǒng)學(xué)習(xí)套件,低成本開(kāi)啟你的電子工程課程實(shí)戰(zhàn)之旅
- 初識(shí)易電源——聊聊你眼中的易電源!
- EEWORLD2018開(kāi)年送禮,答題贏紅包
- 泰科電子工業(yè)事業(yè)部邀您云逛展 ——打破時(shí)間、空間的限制,TE Connectivity 線上工博會(huì)為您帶來(lái)沉浸式VR觀展體驗(yàn)
- 有獎(jiǎng)直播:聯(lián)詠安防監(jiān)控方案及未來(lái)技術(shù)方向 報(bào)名開(kāi)始啦!
- 電源技術(shù)專輯第1期:快充參考設(shè)計(jì)大集合!
- 有獎(jiǎng)直播|2021年STM32峰會(huì)暨粉絲狂歡節(jié)
- TI 嵌入式主題直播月——為高效、智能、低功耗系統(tǒng)設(shè)計(jì)助力
- 基于IMU的導(dǎo)航系統(tǒng)將推動(dòng)自動(dòng)駕駛汽車應(yīng)用
- Q-Free推出互聯(lián)自動(dòng)駕駛汽車數(shù)據(jù)解決方案 大幅提升安全性和效率
- OPPO從中興通訊收購(gòu)了數(shù)十族無(wú)線通信專利
- 英飛凌合作Reality AI開(kāi)發(fā)高級(jí)傳感解決方案 為車輛提供聽(tīng)覺(jué)
- 將用于生產(chǎn)線維護(hù)與技術(shù)培訓(xùn) 斯柯達(dá)增強(qiáng)現(xiàn)實(shí)眼鏡投入測(cè)試
- 蒸汽壓縮機(jī)的工作原理_蒸汽壓縮機(jī)應(yīng)用
- 蒸汽壓縮機(jī)定義_蒸汽壓縮機(jī)組成
- ADI發(fā)布集成精密庫(kù)侖計(jì)數(shù)器的納安級(jí)功耗原電池SoH監(jiān)控器
- 爽約的蘋(píng)果AR/VR:抱怨、猜測(cè)和真相
- 全面屏Apple Watch S7線上正式發(fā)布
- 電源開(kāi)關(guān)設(shè)計(jì)秘笈30例
- 關(guān)于Lm3s看門(mén)狗喂狗問(wèn)題
- C6455 UDP sendto發(fā)送,數(shù)據(jù)超過(guò)1500bytes無(wú)法發(fā)送報(bào)錯(cuò)EMSGSIZE,請(qǐng)問(wèn)是什么原因
- 【PVC-Robot】——DIY機(jī)器人經(jīng)驗(yàn)分享
- 請(qǐng)教關(guān)于STM8的GPIO問(wèn)題
- 選擇網(wǎng)絡(luò)攝像機(jī)的十大理由
- 請(qǐng)教串口問(wèn)題
- 塑料圓形醫(yī)療連接器選用指南
- 求瑞泰創(chuàng)新的光盤(pán)
- HalAdcRead()函數(shù)的問(wèn)題