实验十二:串并转换PCF8574芯片
先上个电路图:
上传PCF8574程序文件,这个程序与网上随便下的差不多,主要注意几个方面的事
1.总线开始的延时时间需要4.7US;
2.器件的地址
3.IO的输入与输出的转换(为了更好提现IO的变化关系,我程序中写的有点罗嗦不明了)
下载:PCF8574.zip
设计思路:
1. 采用IIC总线方式实现双向准IO,选择PCF8574芯片
2.PCF8574资料下载8574.cn.pdf
3.扩展出四个按键和两路指示灯;
4.可以用查询方式和中断方式实现按键扫描
你看看我的程序对不对?
void delay(unsigned int x)
{
unsigned int i,j;
for(i=x;i>0;i--)
for(j=2000;j>0;j--);
}
unsigned char table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
unsigned char table1[]={
0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,
0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f};
void main(void)
{
/* Start user code. Do not edit comment generated here */
unsigned int i=0;
P2=0X07;
while (1U)
{
P1=table[i];
i=(i+1)%10;
delay(1000);
}
对应的是我上次发你的那个电路图里的数码管
看了你这个程序,,你没有明白怎么让数码管动起来。。
电路图如下:
根据你电路可以知道只能动态方式实现
程序设计要求:
1. 给P0口数据-要显示的数据
2.给P2.0---P2.2数据--要点亮的那个数据管(138 的资料你自己上网找)
3. 动态扫描需要的时间(如果时间太长的话会闪烁)
while(1U)
{
P0=table[i];//写数据
P2=i; //写地址
i++;
if(i>=8)i=0;//只八个数据码地址0-7
dealy(1); //时间你自己调一下,不闪烁就行。
}
结果显示应该是:76543210
电路图如下:
根据你电路可以知道只能动态方式实现
程序设计要求:
1. 给P0口数据-要显示的数据
2.给P2.0---P2.2数据--要点亮的那个数据管(138 的资料你自己上网找)
3. 动态扫描需要的时间(如果时间太长的话会闪烁)
while(1U)
{
P0=table[i];//写数据
P2=i; //写地址
i++;
if(i>=8)i=0;//只八个数据码地址0-7
dealy(1); //时间你自己调一下,不闪烁就行。
}
结果显示应该是:76543210
LCD程序规划:
1. LCD采用240*160点阵液晶;
2. 按键采用 PCF8574口扩展IO;
3. MCU板;
程序规划:
1. 显示主界面(主界面划表各显示)
2. 做二级菜单(通过对主界面可进入多级菜单)
3. 二级菜单显示数据可设置
4. 通过按键可调整
程序:
void main(void)
{
LCD_init();
asm("nop");
// LCD_init();
delayms(1);
ClearSCR();
delayms(10);
put_str_xy (72,0,"电子产品世界",0,FONT_NORMAL);
put_str_xy (60,16," m.amcfsurvey.com",0,FONT_NORMAL);
put_str_xy (70,128,"湖南鼎能科技",0,FONT_NORMAL);
put_str_xy (82,144,"ID:LZ1135",0,FONT_NORMAL);
line(0, 34, 0, 126, 1);//原点下划线
line(80, 34, 80, 126, 1);//X80下划线
line(160, 34, 160, 126, 1);
line(240, 34, 240, 126, 1);
line(0, 34, 240, 34, 1);//原点开始横线
line(0, 57, 240, 57, 1);
line(0, 80, 240, 80, 1);//Y69横线
line(0, 103, 240, 103, 1);
line(0, 126, 240, 126, 1);
put_str_xy (3,34+4,"A",0,FONT_NORMAL);
put_str_xy (80+3,34+4,"B",0,FONT_NORMAL);
put_str_xy (160+3,34+4,"C",0,FONT_NORMAL);
put_str_xy (3,57+4,"D",0,FONT_NORMAL);
put_str_xy (80+3,57+4,"E",0,FONT_NORMAL);
put_str_xy (160+3,57+4,"F",0,FONT_NORMAL);
put_str_xy (3,80+4,"G",0,FONT_NORMAL);
put_str_xy (80+3,80+4,"H",0,FONT_NORMAL);
put_str_xy (160+3,80+4,"I",0,FONT_NORMAL);
put_str_xy (3,103+4,"J",0,FONT_NORMAL);
put_str_xy (80+3,103+4,"K",0,FONT_NORMAL);
put_str_xy (160+3,103+4,"L",0,FONT_NORMAL);
while(1U)
{
R_WDT_Restart();
if(KEY_sign==0)
{
IRcvByte(PCF8574_WriteDadd,&KeyNum);
// KEY_sign
if(KeyNum==0xff||KeyNum==0x00)
{
P77=0;
P70=1;
}
else
{
P70=0;
P77=1;
KeyNum=KeyNum&KEYMASK;
key_old=KeyNum;
delayms(100);
// delayms(100);
IRcvByte(PCF8574_WriteDadd,&KeyNum);
KeyNum=KeyNum&KEYMASK;
if(KeyNum==key_old)
//Key_Pro();
KEY_sign=1;
}
}//end key_pro
else
{
IRcvByte(PCF8574_WriteDadd,&KeyNum);
if(KeyNum==0xff||KeyNum==0x00)
{
KeyNum=key_old;
Key_Pro();
KEY_sign=0;
}
}
}
/* End user code. Do not edit comment generated here */
}
显示主界面请看下图:
视屏地址: http://v.eepw.com.cn/video/play/id/2005
1. LCD采用240*160点阵液晶;
2. 按键采用 PCF8574口扩展IO;
3. MCU板;
程序规划:
1. 显示主界面(主界面划表各显示)
2. 做二级菜单(通过对主界面可进入多级菜单)
3. 二级菜单显示数据可设置
4. 通过按键可调整
程序:
void main(void)
{
LCD_init();
asm("nop");
// LCD_init();
delayms(1);
ClearSCR();
delayms(10);
put_str_xy (72,0,"电子产品世界",0,FONT_NORMAL);
put_str_xy (60,16," m.amcfsurvey.com",0,FONT_NORMAL);
put_str_xy (70,128,"湖南鼎能科技",0,FONT_NORMAL);
put_str_xy (82,144,"ID:LZ1135",0,FONT_NORMAL);
line(0, 34, 0, 126, 1);//原点下划线
line(80, 34, 80, 126, 1);//X80下划线
line(160, 34, 160, 126, 1);
line(240, 34, 240, 126, 1);
line(0, 34, 240, 34, 1);//原点开始横线
line(0, 57, 240, 57, 1);
line(0, 80, 240, 80, 1);//Y69横线
line(0, 103, 240, 103, 1);
line(0, 126, 240, 126, 1);
put_str_xy (3,34+4,"A",0,FONT_NORMAL);
put_str_xy (80+3,34+4,"B",0,FONT_NORMAL);
put_str_xy (160+3,34+4,"C",0,FONT_NORMAL);
put_str_xy (3,57+4,"D",0,FONT_NORMAL);
put_str_xy (80+3,57+4,"E",0,FONT_NORMAL);
put_str_xy (160+3,57+4,"F",0,FONT_NORMAL);
put_str_xy (3,80+4,"G",0,FONT_NORMAL);
put_str_xy (80+3,80+4,"H",0,FONT_NORMAL);
put_str_xy (160+3,80+4,"I",0,FONT_NORMAL);
put_str_xy (3,103+4,"J",0,FONT_NORMAL);
put_str_xy (80+3,103+4,"K",0,FONT_NORMAL);
put_str_xy (160+3,103+4,"L",0,FONT_NORMAL);
while(1U)
{
R_WDT_Restart();
if(KEY_sign==0)
{
IRcvByte(PCF8574_WriteDadd,&KeyNum);
// KEY_sign
if(KeyNum==0xff||KeyNum==0x00)
{
P77=0;
P70=1;
}
else
{
P70=0;
P77=1;
KeyNum=KeyNum&KEYMASK;
key_old=KeyNum;
delayms(100);
// delayms(100);
IRcvByte(PCF8574_WriteDadd,&KeyNum);
KeyNum=KeyNum&KEYMASK;
if(KeyNum==key_old)
//Key_Pro();
KEY_sign=1;
}
}//end key_pro
else
{
IRcvByte(PCF8574_WriteDadd,&KeyNum);
if(KeyNum==0xff||KeyNum==0x00)
{
KeyNum=key_old;
Key_Pro();
KEY_sign=0;
}
}
}
/* End user code. Do not edit comment generated here */
}
显示主界面请看下图:
视屏地址: http://v.eepw.com.cn/video/play/id/2005
回复
有奖活动 | |
---|---|
请大声喊出:我要开发板! | |
【有奖活动】EEPW网站征稿正在进行时,欢迎踊跃投稿啦 | |
【有奖活动】智能可穿戴设备AR/VR如何引领科技新潮流! | |
奖!发布技术笔记,技术评测贴换取您心仪的礼品 | |
【有奖活动】震撼来袭!这场直播将直击工程师的心灵! |
打赏帖 | |
---|---|
【换取手持数字示波器】+AT89C2051串口接收数据显示到LCD1602上被打赏50分 | |
【分享评测,赢取加热台】+AT89C2051控制NRF24L01收发数据被打赏50分 | |
【分享评测,赢取加热台】迪文屏设计实战技巧被打赏40分 | |
“DFRobot盖革计数器模块评测”基础模型搭建被打赏50分 | |
【换取手持数字示波器】+角点检测----Harris被打赏40分 | |
【换取手持数字示波器】常见音频指标被打赏20分 | |
【分享评测,赢取加热台】从零配置MCX-N947——PWM(SCtimer)被打赏50分 | |
【分享评测,赢取加热台】实际测试MCX-N947——PWM(Ctimer)被打赏50分 | |
【换取手持数字示波器】红外触摸框及各类红外设备的工作原理被打赏20分 | |
【换取手持数字示波器】+精英板驱动两相四线步进电机被打赏10分 |