久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2869|回復: 11
打印 上一主題 下一主題
收起左側(cè)

大佬請進,如何利用1602節(jié)省下來的4個I/O口 在線等

[復制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:241249 發(fā)表于 2018-3-11 16:54 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
30黑幣

大佬請進,如何利用1602節(jié)省下來的4個I/O口

代碼如下 ,剩下的P1.0-1,3無法使用

真的是卡住了。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。

/********************************************************************************************/
#define

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

沙發(fā)
ID:212149 發(fā)表于 2018-3-11 20:23 | 只看該作者
看不懂你要問什么。
回復

使用道具 舉報

板凳
ID:290570 發(fā)表于 2018-3-11 22:43 | 只看該作者
不懂你說的什么
回復

使用道具 舉報

地板
ID:7485 發(fā)表于 2018-3-12 09:32 | 只看該作者
看不見你的代碼。

也看不懂你的問題。

你是不是問P1.4~P1.7已經(jīng)被1602用掉了,P1.0~P1.3怎么用?可以按位分別用,也可以按字節(jié)進行邏輯運算來讀寫P1口。方法多種多樣。
回復

使用道具 舉報

5#
ID:241249 發(fā)表于 2018-3-12 10:04 | 只看該作者
ahshmj 發(fā)表于 2018-3-12 09:32
看不見你的代碼。

也看不懂你的問題。

能指點一下么,對這塊知識有欠缺
就是如何操作 謝謝
回復

使用道具 舉報

6#
ID:241249 發(fā)表于 2018-3-12 10:12 | 只看該作者
ahshmj 發(fā)表于 2018-3-12 09:32
看不見你的代碼。

也看不懂你的問題。

晚上回去貼代碼
我就是用了1.4-1.7然后空出四個IO口,結(jié)果發(fā)現(xiàn)四個io口不受控制
搜了帖子也沒有相關(guān)的操作方法
1.0-1.3我還是想作為正常io口使用的,不然8線變4線沒什么意義吶
回復

使用道具 舉報

7#
ID:290838 發(fā)表于 2018-3-12 16:29 | 只看該作者
用sbit 位定義,單獨定義I/O
比如
sbit WR=P1^4;
回復

使用道具 舉報

8#
ID:241249 發(fā)表于 2018-3-12 17:41 | 只看該作者
ahshmj 發(fā)表于 2018-3-12 09:32
看不見你的代碼。

也看不懂你的問題。

代碼如下

//LCD1602液 晶
/********************************************************************************************/
#include <reg52.h>   
#include<intrins.h>
/********************************************************************************************/
typedef unsigned char      uint8;          // 無符號8位整型變量 //


/********************************************************************************************
// 引腳定義 //
/********************************************************************************************/
#define LCD1602_DBP1
// 數(shù)據(jù)總線,如果P1.0~P1.7在八線驅(qū)動時分別對應DB0~DB7,則在四線傳輸時候只需要接P1.4~P1.7
sbit   LCD1602_RS=P2^5;  /* Data Command Pin  1 data  0 command pin 4  */
sbit   LCD1602_RW=P2^6;  /* Read Write Pin  1 read   0 write    pin 5  */
sbit   LCD1602_E=P2^7;  /* LCD Enable Signal  pin 6  */
sbit   LCD1602_BUSY_status = P1^7;


/********************************************************************************************
// 指令集 //將所有可能用到的指令先預定義一下,方面以后的使用
/********************************************************************************************/
#define CMD_clear0x01             // 清除屏幕
#define CMD_back0x02             // DDRAM回零位
#define CMD_dec10x04             // 讀入后AC(指針)減1,向左寫
#define CMD_add10x06             // 讀入后AC(指針)加1,向右寫
#define CMD_dis_gb10x0f             // 開顯示_開光標_開光標閃爍
#define CMD_dis_gb20x0e             // 開顯示_開光標_關(guān)光標閃爍
#define CMD_dis_gb30x0c             // 開顯示_關(guān)光標_關(guān)光標閃爍
#define CMD_OFF_dis0x08             // 關(guān)顯示_關(guān)光標_關(guān)光標閃爍
#define CMD_set820x38             // 8位總線_2行顯示
#define CMD_set810x30             // 8位總線_1行顯示(上邊行)
#define CMD_set420x28             // 4位總線_2行顯示
#define CMD_set410x20             // 4位總線_1行顯示(上邊行)
#define lin_1  0x80             // 4位總線_1行顯示(上邊行)
#define lin_2  0xc0             // 4位總線_1行顯示(上邊行)


/********************************************************************************************/


/********************************************************************************************/
//讀忙信號
/********************************************************************************************/
void LCD1602_TestBusy(void){
    LCD1602_DB = 0xff;
    LCD1602_RS = 0;
    LCD1602_RW = 1;
    LCD1602_E = 1;
while(LCD1602_BUSY_status);//當1602內(nèi)部操作完成后,才可以接受下一條指令

    LCD1602_E = 0;
}
/********************************************************************************************
// 寫指令程序 //
/********************************************************************************************/
void LCD1602_WriteCMD(uint8 LCD1602_command) {
    LCD1602_TestBusy();
  LCD1602_RS = 0;
  LCD1602_RW = 0;
  LCD1602_DB=(LCD1602_command/16)<<4;
// 將傳輸過來的指令先取高四位 (為什么要除以16?因為2的4次方為16,比如1010 0100,除以16后,用8位2進制表示就為0000 1010
//再向左移動4位,就是1010 0000,傳輸時候,由于只連接了高4為那幾根線,于是1602就收到1010
  LCD1602_E = 1;
  LCD1602_E = 0;
  LCD1602_DB=(LCD1602_command%16)<<4;//同理,取低四位,傳輸?shù)?602中
  LCD1602_E = 1;
  LCD1602_E = 0;
}
/********************************************************************************************
// 寫數(shù)據(jù)程序 //


/********************************************************************************************/
void LCD1602_WriteData(uint8 LCD1602_data){
    LCD1602_TestBusy();
  LCD1602_RS = 1;
  LCD1602_RW = 0;
  LCD1602_DB=(LCD1602_data/16)<<4;//將傳輸過來的數(shù)據(jù)先取高四位
  LCD1602_E = 1;
  LCD1602_E = 0;
  LCD1602_DB=(LCD1602_data%16)<<4;//將傳輸過來的數(shù)據(jù)先取低四位
  LCD1602_E = 1;
  LCD1602_E = 0;
}
/********************************************************************************************
// 打印字符串程序 // (本函數(shù)調(diào)用指針函數(shù))
// 第一行位置 0x00~0x0f  第二行位置 0x40~0x4f
/********************************************************************************************/
void print_str(uint8 a,uint8 *str){
LCD1602_WriteCMD(a | 0x80);
while(*str != '\0'){
LCD1602_WriteData(*str++);
}
*str = 0;
}
/********************************************************************************************
// 打印單字符程序 //
/********************************************************************************************/
void print_char(uint8 a,uint8 t){
LCD1602_WriteCMD(a | 0x80);
LCD1602_WriteData(t);
}


/********************************************************************************************
// 初始化
/********************************************************************************************/
void LCD1602_Init(void){
  LCD1602_WriteCMD(CMD_set42);
  LCD1602_WriteCMD(CMD_set42);
  LCD1602_WriteCMD(CMD_clear);
  LCD1602_WriteCMD(CMD_back);
  LCD1602_WriteCMD(CMD_add1);
  LCD1602_WriteCMD(CMD_dis_gb3);

}
/********************************************************************************************/




/*********************************************************************************************/


void main()
{
LCD1602_Init();                        
print_str(0x80,"hello!");
print_char(0x40,'.');
while(1);
}
回復

使用道具 舉報

9#
ID:241249 發(fā)表于 2018-3-12 17:44 | 只看該作者
ahshmj 發(fā)表于 2018-3-12 09:32
看不見你的代碼。

也看不懂你的問題。

版主,請幫助指出問題的所在,現(xiàn)在傳送數(shù)據(jù)的時候是八位數(shù)據(jù)送出,然后低四位抹去然后移動到高四位送出。
是不是應該把數(shù)據(jù)用&和|來處理一下,使得低四位不變,只取高四位送到1.4-1.7的端口
回復

使用道具 舉報

10#
ID:84997 發(fā)表于 2018-3-15 11:52 | 只看該作者
可以直接用1602的四線模式,就可以省下4個IO口
回復

使用道具 舉報

11#
ID:241249 發(fā)表于 2018-3-15 18:48 | 只看該作者
已搞定 道道挺深
回復

使用道具 舉報

12#
ID:377803 發(fā)表于 2019-9-23 13:14 | 只看該作者

我也剛剛學習到這個,問一下樓主,這個道道在哪里,我還沒看出來。我也再想,這個LCD雖然是4線連接的(P0.4  P0.5  P0.6  P0.7)。但是寫的程序里的數(shù)據(jù)都是送到P0口的,那雖然P0口的低四位雖然沒有連接到LCD ,但它也在發(fā)送數(shù)據(jù)吧,有高低電平變化的吧?這個時候這四個IO口當作其他用,是否就是沒法正常了?
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機教程網(wǎng)

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 久久在线精品 | 久久aⅴ乱码一区二区三区 亚洲欧美综合精品另类天天更新 | 国产高清在线精品 | 欧美综合视频在线 | 欧美久久视频 | 手机av在线| 日韩欧美国产一区二区 | 超碰美女在线 | av资源网站 | 国产精品久久久久国产a级 欧美日韩国产免费 | 91精品国产91 | 日韩欧美一区二区三区免费观看 | 久久久免费 | 黄色小视频入口 | 男女视频在线观看 | 亚洲成人一级 | 国产精品免费视频一区 | 日本在线看| 日本一卡精品视频免费 | 精品国产一区二区三区久久 | 中文字幕日韩欧美一区二区三区 | 久久伊人精品 | 欧美一区二区黄 | 久久91精品久久久久久9鸭 | 日韩电影免费在线观看中文字幕 | 天天操夜夜拍 | 99福利视频 | 午夜电影合集 | 国产综合精品一区二区三区 | 国产欧美精品区一区二区三区 | 亚洲国产成人精品久久 | 国产在线精品一区二区 | 日本超碰| 国产精品久久久久久吹潮日韩动画 | 亚洲一区二区久久 | 国产福利视频 | 精品免费国产一区二区三区四区介绍 | 亚洲精品久久久久久一区二区 | 91精品国产一区二区三区 | 国产色网 | 一区二区在线 |