找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索

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

查看数: 1350 | 评论数: 3 | 收藏 0
关灯 | 提示:支持键盘翻页<-左 右->
    组图打开中,请稍候......
发布时间: 2021-12-11 00:15

正文摘要:

求大佬帮忙,看一下,数据传输还是扫描问题 甲机子的程序: #include <reg51.h> #define uchar unsigned char #define uint unsigned int sbit k1=P1^0; sbit k2=P1^1; sbit k3=P1^2; unsigned char keyv ...

回复

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 单片机教程网

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