4272|2

2

帖子

0

TA的资源

一粒金砂(中级)

楼主
 

求高手指教如何处理数码管与液晶显示器同时使用接口? [复制链接]

数码管与液晶同时显示时,共用了P2口,影响了数码管上得值,怎样才能不相互影响?
此帖出自单片机论坛

最新回复

这个问题不需要贴代码出来吧 总之就是控制液晶的时候通过数码管的位选把数码管显示关闭就可以了 同样,数码管显示的时候通过液晶的片选使液晶不受控制  详情 回复 发表于 2011-12-3 22:52
点赞 关注
 

回复
举报

2

帖子

0

TA的资源

一粒金砂(中级)

沙发
 

附上程序代码

#include
#include
#include
#include
#define uchar unsigned char
#define uint unsigned int
typedef unsigned char U8;
typedef unsigned int   U16;
//*********定义变量区*******************
sbit lcdrs=P1^0;                 //数据命令选择控制
sbit lcdrw=P1^1;                 //读/写选择控制
sbit lcden=P1^2;                 //使能信号
sbit DHT = P3^3;
sbit fm=P3^4;
sbit jdq=P3^5;
U8 code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,
0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0x40,0x80,0x63 };
U8 code wema[]={0xf0,0xf1,0xf2,0xf3,0xf4,0xf5,0xf6,0xf7};
uchar tab_key[32];
uchar code tab[]="0123456789.-#de ";   
uchar code tab1[]="Tem:            " ;
uchar code tab2[]="RH :            " ;
uchar n,temp,key;
uchar flag=0;
U8 U8FLAG,U8temp;
U8 shidu_shi,shidu_ge,wendu_shi,wendu_ge;
U8 U8T_data_H,U8T_data_L,U8RH_data_H,U8RH_data_L,U8checkdata;
U8 U8T_data_H_temp,U8T_data_L_temp,U8RH_data_H_temp,U8RH_data_L_temp,U8checkdata_temp;
U8 U8comdata;
void lcd_disp();          //LCD显示函数
void lcd_init();          //LCD初始化函数
void write_com(uchar);    //写命令函数
void write_data(uchar);   //写数据函数
void delay(uint);         //延迟函数
void key_scan();          //键盘扫描函数
void key_manage1();       //键盘功能分配函数
void key_manage2();
void key_manage3();
void key_manage4();
void key_manage5();
void key_manage6();
void key_manage7();
void key_manage8();
void key_manage9();
void key_manage10();
void key_manage11();
void key_manage12();
void key_manage13();
void key_manage14();
void key_manage15();
void key_manage16();
void  RH();
void warn();

void main()
{
lcd_init();
write_com(1);
while(1)
{
//P2=0;
RH();
key_scan();
lcd_disp();
if(n>8)
warn();
}
}
void warn()
{
uchar tem1,tem2,rh1,rh2;
uchar rh,tem;
rh= U8RH_data_H;
tem= U8T_data_H;
tem1=tab_key[0]*10+tab_key[1]+tab_key[3]/10;
tem2=tab_key[4]*10+tab_key[5]+tab_key[7]/10;
rh1=tab_key[8]*10+tab_key[9]+tab_key[11]/10;
rh2=tab_key[12]*10+tab_key[13]+tab_key[18]/10;
if(temtem2)
{
delay(1000);
fm=0;
delay(1000);
fm=1;
}
if(n>=16)
{if(rhrh2)
{
delay(115);
jdq=0;
delay(115);
jdq=1;
}
}
}
void Delay(U16 z)
{
U8 x,y;
for(x=z;x>0;x--)
   for(y=110;y>0;y--);
}
void Delay_10us(void)
   {
     U8 i;
     i--;
     i--;
     i--;
     i--;
     i--;
     i--;
    }

void COM(void)
{     
    U8 i;         
    for(i=0;i<8;i++)   
    {

     U8FLAG=2;
     while((!DHT)&&U8FLAG++);
     Delay_10us();
     Delay_10us();
     Delay_10us();
     U8temp=0;
     if(DHT)U8temp=1;
     U8FLAG=2;
     while((DHT)&&U8FLAG++);   
     if(U8FLAG==1)break;   
     U8comdata<<=1;
     U8comdata|=U8temp;
     }   
}


void display(U8 shidu_shi,U8 shidu_ge,U8 wendu_shi,U8 wendu_ge)
{

P2=table[shidu_shi];
P1=wema[2];
Delay(5);

P2=table[shidu_ge];
P1=wema[3];
Delay(5);

P2=table[wendu_shi];
P1=wema[4];
Delay(5);

P2=table[wendu_ge];
P1=wema[5];
Delay(5);
}
void RH()
{
    U8 rh,tem;
    DHT=0;
    Delay(34);
    DHT=1;
    Delay_10us();
    Delay_10us();
    Delay_10us();
    Delay_10us();
    DHT=1;   
     if(!DHT)
     {
      U8FLAG=2;
      while((!DHT)&&U8FLAG++);
      U8FLAG=2;
      while((DHT)&&U8FLAG++);
      COM();
      U8RH_data_H_temp=U8comdata;
      COM();
      U8RH_data_L_temp=U8comdata;
      COM();
      U8T_data_H_temp=U8comdata;
      COM();
      U8T_data_L_temp=U8comdata;
      COM();
      U8checkdata_temp=U8comdata;
      DHT=1;
      U8temp=(U8T_data_H_temp+U8T_data_L_temp+U8RH_data_H_temp+U8RH_data_L_temp);
       if(U8temp==U8checkdata_temp)
       {
          U8RH_data_H=U8RH_data_H_temp;
          U8RH_data_L=U8RH_data_L_temp;
          U8T_data_H=U8T_data_H_temp;
          U8T_data_L=U8T_data_L_temp;
          U8checkdata=U8checkdata_temp;
       }
         shidu_shi=U8RH_data_H/10;
         shidu_ge=U8RH_data_H%10;
         wendu_shi=U8T_data_H/10;
         wendu_ge=U8T_data_H%10;   
               
    }   
        display(shidu_shi,shidu_ge,wendu_shi,wendu_ge);
}

//**********LCD显示函数开始***********
void lcd_disp()
{
uchar a,i=0;
uchar m=0;
write_com(0x80);
for(i=0;i<4;i++)
{
write_data(tab1);
delay(0);
}
write_com(0x80+8);
write_data(tab[11]);
write_com(0x80+9);
write_data(tab[11]);
write_com(0x80+0x40);
for(i=0;i<4;i++)
{
write_data(tab2);
delay(0);
}
write_com(0x80+0x40+8);
write_data(tab[11]);
write_com(0x80+0x40+9);
write_data(tab[11]);

for(i=0;i<=n;i++)
{  
  a=tab_key;
  if(i<4)
   {
    write_com(0x80+i+4);
    write_data(tab[a]);
           delay(0);
   }
   if(i>=4&&i<8)
   {
    write_com(0x80+i+6);
    write_data(tab[a]);
           delay(0);
        }
        if(i>=8&&i<12)
        {
        write_com(0x80+i+4+0x40-8);
    write_data(tab[a]);
           delay(0);
        }
        if(i>=12)
        {
        write_com(0x80+i+6+0x40-8);
    write_data(tab[a]);
           delay(0);
        }
}
  
}

//**********LCD初始化函数开始*********
void lcd_init()
{
lcden=0;
lcdrw=0;
write_com(0x38);      //设置显示模式:16X2,5X7,8位数据接口
write_com(0x01);
write_com(0x0c);      //开显示,显示光标,光标闪烁
write_com(0x06);      //读写一个字符后,地址指针及光标加一整屏显示不移动
write_com(0x80);      //设置光标指针
}

//**********写命令函数开始************
void write_com(uchar com)
{
lcdrs=0;      //低电平写命令
P2=com;       //写入命令
delay(5);     //延时约3ms
lcden=1;      //LCD使能端置高电平
delay(5);     //延时约5ms
lcden=0;      //LCD使能端拉低电平
}
//**********写数据函数开始************
void write_data(uchar dat)
{
   lcdrs=1;      //低电平写数据
   P2=dat;       //写入命令
   delay(5);     //延时约3ms
   lcden=1;      //LCD使能端置高电平
   delay(5);     //延时约5ms
   lcden=0;      //LCD使能端拉低电平
}
//**********键盘扫描函数开始****
void key_scan()
{
//**********扫描第一行*********
P0=0xfe;         
temp=P0;
temp=temp&0xf0;
if(temp!=0xf0)
{
delay(100);
if(temp!=0xf0)
   {
    temp=P0;
    switch(temp)
     {
      case 0xee:
           key_manage1();
           break;
      case 0xde:
           key_manage2();
           break;
       case 0xbe:
            key_manage3();
            break;
       case 0x7e:
            key_manage4();
            break;
      }
     while(temp!=0xf0)
      {
       temp=P0;
       temp=temp&0xf0;
      }
     }
   }
//**********扫描第二行*********
P0=0xfd;         
temp=P0;
temp=temp&0xf0;
   if(temp!=0xf0)
    {
     delay(100);
     if(temp!=0xf0)
      {
       temp=P0;
       switch(temp)
        {
         case 0xed:
              key_manage5();
              break;
         case 0xdd:
              key_manage6();
              break;
         case 0xbd:
              key_manage7();
              break;
         case 0x7d:
              key_manage8();
              break;
         }
       while(temp!=0xf0)
        {
         temp=P0;
         temp=temp&0xf0;
        }
      }
    }
//**********扫描第三行*********   
P0=0xfb;      
temp=P0;
temp=temp&0xf0;
if(temp!=0xf0)
   {
    delay(100);
    if(temp!=0xf0)
     {
      temp=P0;
      switch(temp)
      {
        case 0xeb:
             key_manage9();
             break;
        case 0xdb:
             key_manage10();
             break;
         case 0xbb:
              key_manage11();
              break;
         case 0x7b:
              key_manage12();
              break;
        }
      while(temp!=0xf0)
         {
          temp=P0;
          temp=temp&0xf0;
         }
        }
     }

//**********扫描第四行*********
P0=0xf7;
temp=P0;
temp=temp&0xf0;
if(temp!=0xf0)
   {
    delay(100);
    if(temp!=0xf0)
     {
      temp=P0;
      switch(temp)
       {
        case 0xe7:
             key_manage13();
             break;
        case 0xd7:
             key_manage14();
             break;
        case 0xb7:
             key_manage15();
             break;
        case 0x77:
             key_manage16();
             break;
      }
    while(temp!=0xf0)
     {
      temp=P0;
      temp=temp&0xf0;
     }
    }
}
}  
//*********延时函数开始**************
/*void delay(uint k)
{
uint i,j;
for(i=k;i>0;i--)
   for(j=50;j>0;j--);
}
   */
//******键盘功能分配函数群开始********
//       键盘功能示意图
//       设计者:聂金波
//** 1 ** 2 ** 3 ** 4 **  
//** 5 ** 6 ** 7 ** 8 **
//** 9 ** 0 ** s ** c **
//** M1** M2** M3** M4**  

void key_manage1()
{
tab_key[n]=0;
n++;
}
void key_manage2()
{

tab_key[n]=1;
n++;

}
void key_manage3()
{
tab_key[n]=2;
n++;
}
void key_manage4()
{
tab_key[n]=3;
n++;
}
void key_manage5()
{
tab_key[n]=4;
n++;
}
void key_manage6()
{
tab_key[n]=5;
n++;
}
void key_manage7()
{
tab_key[n]=6;
n++;
}
void key_manage8()
{
tab_key[n]=7;
n++;
}
void key_manage9()
{
tab_key[n]=8;
n++;
}
void key_manage10()
{
tab_key[n]=9;
n++;
}
void key_manage11()
{
tab_key[n]=10;
n++;
}
void key_manage12()
{
tab_key[n]=11;
n++;
}
void key_manage13()
{
tab_key[n]=12;
n++;
}
void key_manage14()
{
tab_key[n]=13;
n++;
}
void key_manage15()
{
tab_key[n]=14;
n++;
}
void key_manage16()
{
flag++;
}
此帖出自单片机论坛
 
 

回复

1469

帖子

0

TA的资源

五彩晶圆(中级)

板凳
 
这个问题不需要贴代码出来吧

总之就是控制液晶的时候通过数码管的位选把数码管显示关闭就可以了

同样,数码管显示的时候通过液晶的片选使液晶不受控制
此帖出自单片机论坛
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 2/10 下一条
TI 处理器AM62L深度讲解,报名直播赢【双肩包、充电器、胶囊伞】
【直播要点】• 如何实现安全节能设计;• 开箱体验和demo;• 软件和硬件
【直播时间】3月21日(周五)上午10:00

查看 »

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

 
机器人开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表