您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 信息化管理 > 74HC165连级使用方法及程序实例
74HC165连级使用方法及程序实例发布:2010-4-1310:42|作者:pcb_dz|来源:本站|查看:237次|字号:小中大74HC165是一种并入串出的芯片,我们可以用它来做按键检测。它可以外接8个接键,然后将数据转成串行的送入单片机。如果用74HC165做键盘的话,能节省很多IO口。LCD程序是采用wang1jin带您从零学单片机里面的1602程序修改。#includeAT89X52.H#includeLCD.h#defineuint16unsignedint#defineuint8unsignedchar#defineAUDIO_OUTP0///////////////////////////////////////////////////////sbitHC165_CE=P1^1;//HC165控制端L有效sbitHC165_PL=P1^2;//HC165锁存引脚H高效sbitHC165_CLK=P1^0;//HC165时钟引脚sbitHC165_IN=P1^3;//HC165数据输出引脚uint8Address=0;//本地地址变量uint8Priority=0;//优先级变量///////////////////////////////////////////////////////uint8LCD_DATA1[]={'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};voidInit_INT(void);voidRead_HC165(void);voidmain(void){Init_INT();LCD1602();Init_Lcd();while(1){Read_HC165();Display_LCD_Byte(0,0,'0');Display_LCD_Byte(0,1,'x');Display_LCD_Byte(0,2,LCD_DATA1[Address/16]);Display_LCD_Byte(0,3,LCD_DATA1[Address%16]);Display_LCD_Byte(1,0,'0');Display_LCD_Byte(1,1,'x');Display_LCD_Byte(1,2,LCD_DATA1[Priority/16]);Display_LCD_Byte(1,3,LCD_DATA1[Priority%16]);}}////////////////////////////////////////////////定时器初始化//////////////////////////////////////////////voidInit_INT(void){TMOD=0x01;ET0=1;TR0=1;EA=1;TH0=0xF8;TL0=0xC5;}////////////////////////////////////////////////读取优先级和本机地址//当执行本次程序时//函数会将165的信号优先级//以及本机的地址送到Priority和Address//////////////////////////////////////////////voidRead_HC165(void){uint8i=0;//临时变量uint8BJ_Address=0;uint8BJ_Priority=0;HC165_CE=0;//打开165选通端HC165_PL=0;//允许数据进入165for(i=0;i8;i++)//读8次数据{HC165_PL=1;//允许数据移位HC165_CLK=0;//低电平时读取数据if(HC165_IN)//数据高位在前{BJ_Priority|=0x80i;}HC165_CLK=1;//数据移位}for(i=0;i8;i++)//读取下一个165的数据{HC165_CLK=0;if(HC165_IN){BJ_Address|=0x80i;}HC165_CLK=1;}HC165_CE=1;HC165_PL=0;Address=BJ_Address;Priority=BJ_Priority;}#ifndef_LCD_H_#define_LCD_H_#includeAT89X52.H#defineLCD_DATAP3sbitRS=P1^5;sbitRW=P1^6;sbitEN=P1^7;voidLCD1602(void);voidRead_Busy(void);voidWrite_Lcd(unsignedcharValue,biti);voidInit_Lcd(void);voidDelay(unsignedinti);voidDisplay_LCD_Byte(unsignedchary,unsignedcharx,unsignedcharValue);#endif#includeLCD.hvoidLCD1602(void){EN=0;RS=1;RW=1;LCD_DATA=0xFF;}voidRead_Busy(void){LCD_DATA=0xFF;RS=0;RW=1;EN=1;//while(LCD_DATA&0x80);Delay(100);EN=0;}voidWrite_Lcd(unsignedcharValue,biti)//i=0写指令.i=1写数据;{Read_Busy();LCD_DATA=Value;RS=i;RW=0;EN=1;EN=0;}voidInit_Lcd(void){Delay(15000);Write_Lcd(0x38,0);Delay(5000);Write_Lcd(0x38,0);Delay(5000);Write_Lcd(0x38,0);Write_Lcd(0x08,0);Write_Lcd(0x01,0);Write_Lcd(0x06,0);Write_Lcd(0x0c,0);}voidDisplay_LCD_Byte(unsignedchary,unsignedcharx,unsignedcharValue){y&=0x01;//y不能大于1x&=0x0F;//x不能大于15if(y)//是否显示在第二行;{x+=0x40;//显示在第二行,加0X40;}x+=0x80;Write_Lcd(x,0);//写入显示的位置Write_Lcd(Value,1);//写入显示数据}voidDelay(unsignedinti){while(--i);}参考链接:=1224
本文标题:74HC165连级使用方法及程序实例
链接地址:https://www.777doc.com/doc-3750460 .html