找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1346|回复: 3
打印 上一主题 下一主题
收起左侧

单片机串行控制led亮,程序没有报错,但是Proteus仿真不了,采用的是键盘扫,求大看看

[复制链接]
跳转到指定楼层
楼主

求大佬帮忙,看一下,数据传输还是扫描问题
甲机子的程序:
  1. #include <reg51.h>
  2. #define uchar unsigned char
  3. #define uint unsigned int
  4. sbit k1=P1^0;
  5. sbit k2=P1^1;
  6. sbit k3=P1^2;
  7. unsigned char keyval;
  8. uchar code DSY_CODE[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};


  9. void delay(uint xms)
  10. {
  11.         uint x,y;
  12.         for(x=xms;x>0;x--)
  13.          for(y=110;y>0;y--);
  14. }
  15. void key_scan(void)
  16. {
  17.         P1=0xff;
  18.         if((P1&0x0f)!=0x0f)
  19.         {
  20.                 delay(10);
  21.                 if(k1==0)
  22.                         keyval=1;
  23.                 if(k2==0)
  24.                         keyval=2;
  25.                 if(k3==0)
  26.                         keyval=3;
  27.         }
  28. }
  29.         void Putc_to_SerialPort(uchar c)
  30. {
  31.         SBUF=c;
  32.         while(TI==0);
  33.         TI=0;
  34. }
  35. void main()
  36. {
  37.         P0=0x00;
  38.         SCON=0x50;        
  39.         TMOD=0x20;        
  40.         PCON=0x00;        
  41.         TL1=0xfd;                          
  42.         TI=RI=0;      
  43.         TR1=1;
  44.         IE=0x90;      
  45.         keyval=0;
  46.         while(1)
  47.         {
  48.                 key_scan();
  49.                 delay(100);
  50.                 switch(keyval)
  51.                         {
  52.                                 case 1:    Putc_to_SerialPort('X'); break;
  53.                                 case 2:    Putc_to_SerialPort('A');break;
  54.                                 case 3:    Putc_to_SerialPort('B');break;
  55.                        
  56.                         }
  57.                 }
  58.         }
  59. void Serial_INT() interrupt    4
  60. {
  61.         if(RI)
  62.         {
  63.                 RI=0;
  64.                 if(SBUF>=0&&SBUF<=9)
  65.                 {
  66.                         P0=DSY_CODE[SBUF];
  67.                 }
  68.                        
  69.                 else
  70.                 {
  71.                         P0=0x00;
  72.                 }
  73.                        
  74.         }
  75. }
复制代码


乙机的程序:

#include <reg51.h>
#define uchar unsigned char
#define uint unsigned int
sbit LED1=P1^0;
sbit LED2=P1^1;
sbit K2=P1^7;
uchar NumX=-1;
void DelayMS(uint ms)
{
        uchar i;
        while(ms--)
        {
                for(i=0;i<120;i++);
        }
               
}
void main()
{
        LED1=LED2=1;
        SCON=0x50;         
        TMOD=0x20;        
        TH1=0xfd;           
        TL1=0xfd;
        PCON=0x00;         
        RI=TI=0;
        TR1=1;
        IE=0x90;
        while(1)
        {
                DelayMS(100);
                if(K2==0)
                {
                        while(K2==0);
                        NumX=++NumX;  
                        SBUF=NumX;
                        if(NumX==10)
                        {
                                NumX=-1;
                        }
                        while(TI==0);
                        TI=0;
                }
        }
}
void Serial_INT() interrupt 4
{
        if(RI)      
        {
                RI=0;
                switch(SBUF)
                {
                             
                        case 'X':  LED1=0;LED2=1;break;   
                        case 'A':  LED2=0;LED1=1;break;   
                        case 'B':  LED1=LED2=0;            
                }
        }
}
麻烦大佬看下
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

地板
ID:908826 发表于 2021-12-11 14:34 | 只看该作者
行哎你,整多机通讯?
回复

使用道具 举报

板凳
ID:983158 发表于 2021-12-11 11:23 | 只看该作者
谢谢大佬改进,我去试试
回复

使用道具 举报

沙发
ID:213173 发表于 2021-12-11 07:52 | 只看该作者

  1. #include <reg51.h>
  2. #define uchar unsigned char
  3. #define uint unsigned int
  4. //sbit k1=P1^0;
  5. //sbit k2=P1^1;
  6. //sbit k3=P1^2;
  7. unsigned char keyval;
  8. uchar code DSY_CODE[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};

  9. void delay(uint xms)
  10. {
  11.         uint x,y;
  12.         for(x=xms;x>0;x--)
  13.                 for(y=110;y>0;y--);
  14. }
  15. void key_scan(void)
  16. {
  17.         if((P1&0x07)!=0x07)
  18.         {
  19.                 delay(10);
  20.                 if((P1&0x07)!=0x07)
  21.                 {
  22.                         switch(P1&0x07)
  23.                         {
  24.                                 case 0x06: keyval=1; break;
  25.                                 case 0x05: keyval=2; break;
  26.                                 case 0x03: keyval=3; break;
  27.                         }
  28.                         while(!((P1&0x07)!=0x07));
  29.                 }
  30.         }
  31. }

  32. void Putc_to_SerialPort(uchar c)
  33. {
  34.         SBUF=c;
  35.         while(TI==0);
  36.         TI=0;
  37. }

  38. void main()
  39. {
  40.         P0=0x00;
  41.         SCON=0x50;        
  42.         TMOD=0x20;        
  43.         PCON=0x00;        
  44.         TL1=0xfd;
  45.         TH1=0xfd;     
  46.         TR1=1;
  47.         IE=0x90;      
  48.         keyval=0;
  49.         while(1)
  50.         {
  51.                 key_scan();
  52.                 switch(keyval)
  53.                 {
  54.                         case 1: Putc_to_SerialPort('X');keyval=0;break;
  55.                         case 2: Putc_to_SerialPort('A');keyval=0;break;
  56.                         case 3: Putc_to_SerialPort('B');keyval=0;break;
  57.                 }
  58.         }
  59. }

  60. void Serial_INT() interrupt 4
  61. {
  62.         if(RI)
  63.         {
  64.                 RI=0;
  65.                 P0=DSY_CODE[SBUF];
  66.         }
  67. }
复制代码
  1. #include <reg51.h>
  2. #define uchar unsigned char
  3. #define uint unsigned int

  4. sbit LED1=P1^0;
  5. sbit LED2=P1^1;
  6. sbit K2=P1^7;
  7. uchar NumX=-1;

  8. void DelayMS(uint ms)
  9. {
  10.         uchar i;
  11.         while(ms--)
  12.         {
  13.                 for(i=0;i<120;i++);
  14.         }
  15. }

  16. void main()
  17. {
  18.         SCON=0x50;         
  19.         TMOD=0x20;        
  20.         TH1=0xfd;           
  21.         TL1=0xfd;
  22.         PCON=0x00;         
  23.         TR1=1;
  24.         IE=0x90;
  25.         while(1)
  26.         {
  27.                 if(K2==0)
  28.                 {
  29.                         DelayMS(10);
  30.                         if(K2==0)
  31.                         {
  32.                                 NumX=++NumX%10;  
  33.                                 SBUF=NumX;
  34.                                 while(TI==0);
  35.                                 TI=0;
  36.                                 while(K2==0);
  37.                         }
  38.                 }
  39.         }
  40. }

  41. void Serial_INT() interrupt 4
  42. {
  43.         RI=0;
  44.         switch(SBUF)
  45.         {       
  46.                 case 'X':  LED1=0;LED2=1;break;
  47.                 case 'A':  LED2=0;LED1=1;break;
  48.                 case 'B':  LED1=LED2=0;  break;
  49.         }
  50. }
复制代码




回复

使用道具 举报

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

本版积分规则

小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表