实验十二:串并转换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,"www.eepw.com.cn",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,"www.eepw.com.cn",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网站征稿正在进行时,欢迎踊跃投稿啦 | |
奖!发布技术笔记,技术评测贴换取您心仪的礼品 | |
打赏了!打赏了!打赏了! |