欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

 找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

搜索
查看: 4046|回復(fù): 10
打印 上一主題 下一主題
收起左側(cè)

請(qǐng)問(wèn)1602更改8位總線為4位總線后,去掉的4個(gè)IO口怎么用

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:241249 發(fā)表于 2018-3-10 21:43 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
請(qǐng)問(wèn)1602更改8位總線為4位總線后,去掉的4個(gè)IO口怎么用
現(xiàn)在使用的是P1.4-1.7四個(gè)口傳送數(shù)據(jù),也實(shí)現(xiàn)了
但是想利用剩下節(jié)省的4個(gè)IO口的時(shí)候發(fā)現(xiàn)定義完畢后沒有反應(yīng)

請(qǐng)幫忙,我現(xiàn)在用P1.1安裝了一個(gè)蜂鳴器,不響,但是定義了其他IO口就可以正常響
我想問(wèn)問(wèn)用這四個(gè)節(jié)省下來(lái)的IO口有什么限制沒有

#define                LCM2402_DB0_DB7                P1                         // 定義LCM1602的數(shù)據(jù)總線
sbit LCM2402_RS      = P3 ^ 2;                                        // 定義LCM1602的RS控制線
sbit LCM2402_RW      = P3 ^ 7;                                        // 定義LCM1602的RW控制線
sbit LCM2402_E       = P3 ^ 4;                                        // 定義LCM1602的E控制線
sbit LCM2402_Busy = P1 ^ 7;                                        // 定義LCM1602的測(cè)忙線(與LCM1602_DB0_DB7關(guān)聯(lián))

sbit BUZZ_BIT  = P1 ^ 1;

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

使用道具 舉報(bào)

沙發(fā)
ID:290279 發(fā)表于 2018-3-11 09:12 | 只看該作者
沒有限制,省下來(lái)的四個(gè)引腳就是沒有用,你可以隨便用于其他功能,從你當(dāng)前發(fā)的代碼來(lái)看,你現(xiàn)在用的還是8位數(shù)據(jù)線
回復(fù)

使用道具 舉報(bào)

板凳
ID:213173 發(fā)表于 2018-3-11 09:31 | 只看該作者
因?yàn)?define  LCM2402_DB0_DB7  P1,所以對(duì)LCM2402_DB0_DB7操作時(shí)寫P1高4位必須保留低4位狀態(tài)不變才不會(huì)影響P1.0-1.3的使用。
回復(fù)

使用道具 舉報(bào)

地板
ID:241249 發(fā)表于 2018-3-11 10:01 | 只看該作者
xiaok 發(fā)表于 2018-3-11 09:12
沒有限制,省下來(lái)的四個(gè)引腳就是沒有用,你可以隨便用于其他功能,從你當(dāng)前發(fā)的代碼來(lái)看,你現(xiàn)在用的還是8 ...

是不是這四個(gè)腳就不能用了,隨便用于其他功能是什么意思,貌似都不能輸出高低電平了
這省下來(lái)的意義是什么呢
回復(fù)

使用道具 舉報(bào)

5#
ID:241249 發(fā)表于 2018-3-11 10:03 | 只看該作者
wulin 發(fā)表于 2018-3-11 09:31
因?yàn)?define  LCM2402_DB0_DB7  P1,所以對(duì)LCM2402_DB0_DB7操作時(shí)寫P1高4位必須保留低4位狀態(tài)不變才不會(huì)影 ...

能詳解一下么。怎么做才能用這P1.0-1.3
因?yàn)槿绻∠聛?lái)的四個(gè)口不能用,意義就沒了

謝謝
回復(fù)

使用道具 舉報(bào)

6#
ID:213173 發(fā)表于 2018-3-11 21:39 | 只看該作者
weiwei850113 發(fā)表于 2018-3-11 10:03
能詳解一下么。怎么做才能用這P1.0-1.3
因?yàn)槿绻∠聛?lái)的四個(gè)口不能用,意義就沒了

給你一個(gè)示例程序:
#include <AT89X51.H>
#define uchar unsigned char
#define uint  unsigned int                         
#define LCD1602 P1
sbit LED1=P1^0;
sbit LED2=P1^1;
sbit LED3=P1^2;
sbit LED4=P1^3;
uchar num=1;
uint Cnt1ms;
/***********定時(shí)器初始化程序****************/
void Timer0Init()                //1毫秒@11.0592MHz
{
        TMOD = 0x01;                //設(shè)置定時(shí)器模式
        TL0 = 0x66;                //設(shè)置定時(shí)初值
        TH0 = 0xFC;                //設(shè)置定時(shí)初值
        TF0 = 0;                //清除TF0標(biāo)志
        TR0 = 1;                //定時(shí)器0開始計(jì)時(shí)
        EA=1;                //開總中斷
        ET0=1;                //開定時(shí)器0中斷       
}
/***************主程序****************/
void main()
{
        Timer0Init();
        while(1);

}
/**************中斷服務(wù)程序*****************/
void timer0() interrupt        1
{
        TL0 = 0x66;                //設(shè)置定時(shí)重載值
        TH0 = 0xFC;                //設(shè)置定時(shí)重載值
        Cnt1ms++;                                //中斷變量Cnt1ms自+1
        if(Cnt1ms>=1000)                //1秒
        {
                Cnt1ms=0;
/********操作P1高4位保留低4位狀態(tài)不變**********/
                if(num%2==0)
                {
                        LCD1602&=0x0f;
                        LCD1602|=0xa0;
                }
                if(num%3==0)
                {
                        LCD1602&=0x0f;
                        LCD1602|=0x50;
                }
/****單獨(dú)控制P1低4位狀態(tài)不影響高4位狀態(tài)*****/
                switch(num)
                {
                        case 1:
                                LED1=0;LED2=1;LED3=1;LED4=1;break;
                        case 2:
                                LED1=1;LED2=0;LED3=1;LED4=1;break;
                        case 3:
                                LED1=1;LED2=1;LED3=0;LED4=1;break;
                        case 4:
                                LED1=1;LED2=1;LED3=1;LED4=0;break;
                        case 5:
                                LED1=1;LED2=0;LED3=0;LED4=1;break;
                        case 6:
                                LED1=0;LED2=1;LED3=1;LED4=0;break;
                        case 7:
                                LED1=1;LED2=0;LED3=1;LED4=0;break;
                        case 8:
                                LED1=0;LED2=1;LED3=0;LED4=1;break;
                        case 9:
                                LED1=1;LED2=1;LED3=1;LED4=1;break;
                        default: break;
                }
                num++;
                if(num>=10)
                        num=1;
        }
}
回復(fù)

使用道具 舉報(bào)

7#
ID:241249 發(fā)表于 2018-3-12 19:26 | 只看該作者
wulin 發(fā)表于 2018-3-11 21:39
給你一個(gè)示例程序:
#include
#define uchar unsigned char

代碼如下 請(qǐng)幫忙指點(diǎn) 實(shí)在不知道怎么處理

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


/********************************************************************************************
// 引腳定義 //
/********************************************************************************************/
#define LCD1602_DBP1
// 數(shù)據(jù)總線,如果P1.0~P1.7在八線驅(qū)動(dòng)時(shí)分別對(duì)應(yīng)DB0~DB7,則在四線傳輸時(shí)候只需要接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;


/********************************************************************************************
// 指令集 //將所有可能用到的指令先預(yù)定義一下,方面以后的使用
/********************************************************************************************/
#define CMD_clear0x01             // 清除屏幕
#define CMD_back0x02             // DDRAM回零位
#define CMD_dec10x04             // 讀入后AC(指針)減1,向左寫
#define CMD_add10x06             // 讀入后AC(指針)加1,向右寫
#define CMD_dis_gb10x0f             // 開顯示_開光標(biāo)_開光標(biāo)閃爍
#define CMD_dis_gb20x0e             // 開顯示_開光標(biāo)_關(guān)光標(biāo)閃爍
#define CMD_dis_gb30x0c             // 開顯示_關(guān)光標(biāo)_關(guān)光標(biāo)閃爍
#define CMD_OFF_dis0x08             // 關(guān)顯示_關(guān)光標(biāo)_關(guān)光標(biāo)閃爍
#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行顯示(上邊行)


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


/********************************************************************************************/
//讀忙信號(hào)
/********************************************************************************************/
void LCD1602_TestBusy(void){
    LCD1602_DB = 0xff;
    LCD1602_RS = 0;
    LCD1602_RW = 1;
    LCD1602_E = 1;
while(LCD1602_BUSY_status);//當(dāng)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;
// 將傳輸過(guò)來(lái)的指令先取高四位 (為什么要除以16?因?yàn)?的4次方為16,比如1010 0100,除以16后,用8位2進(jìn)制表示就為0000 1010
//再向左移動(dòng)4位,就是1010 0000,傳輸時(shí)候,由于只連接了高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;//將傳輸過(guò)來(lái)的數(shù)據(jù)先取高四位
  LCD1602_E = 1;
  LCD1602_E = 0;
  LCD1602_DB=(LCD1602_data%16)<<4;//將傳輸過(guò)來(lái)的數(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);
}
回復(fù)

使用道具 舉報(bào)

8#
ID:291034 發(fā)表于 2018-3-12 22:43 | 只看該作者
#define LCD1602_DB P1  //這里還是定義了8位
如果要用低4位的IO單獨(dú)控制,請(qǐng)參考5樓的的例程,對(duì)LCD1602_DB操作之前 ,要保持低4位的數(shù)據(jù)不變。
回復(fù)

使用道具 舉報(bào)

9#
ID:241249 發(fā)表于 2018-3-13 13:32 | 只看該作者
woti 發(fā)表于 2018-3-12 22:43
#define LCD1602_DB P1  //這里還是定義了8位
如果要用低4位的IO單獨(dú)控制,請(qǐng)參考5樓的的例程,對(duì)LCD1602_ ...

能幫我指點(diǎn)一下代碼怎么改么 謝謝
回復(fù)

使用道具 舉報(bào)

10#
ID:151348 發(fā)表于 2018-3-14 12:20 | 只看該作者
直接在網(wǎng)上搜4線驅(qū)動(dòng)1602,程序有很多,并不會(huì)占用多的4個(gè)IO
回復(fù)

使用道具 舉報(bào)

11#
ID:241249 發(fā)表于 2018-3-15 18:52 | 只看該作者
imxuheng 發(fā)表于 2018-3-14 12:20
直接在網(wǎng)上搜4線驅(qū)動(dòng)1602,程序有很多,并不會(huì)占用多的4個(gè)IO

已搞定 謝謝
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表