找回密码
 立即注册

QQ登录

只需一步,快速开始

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

单片机程序好多错误 求指导

[复制链接]
跳转到指定楼层
楼主
ID:1062123 发表于 2023-2-7 22:20 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
#include <REGX52.H>
typedef unsigned char u8;
typedef unsigned int u16;
#define SMG PORT P0
#define KEY_MATRIX_PORT P1
u8 gsmg_code[16]={0x3f,0x06,0x5b,0x4f,0x66,
0x6d,0x7d,0x07,0x7f,0x6f,0x77,
0x7c,0x39,0x5e,0x79,0x71}
void delay_10us(u16 ten_us)
{
        while(ten_us--);
}
u8 key_matrix(void)
{
         u8 key_is=0;
        KEY_MATRIX_PORT =0xf7;
         if(KEY_MATRIX_PORT!=0xf7)
         {
                 delay_10us(1000);
                switch(KEY_MATRIX_PORT )
                {
                        case 0x77:key_is 1;break;
                        case 0xb7:key_is 5;break;
                        case 0xd7:key_is 9;break;
                        case 0xe7:key_is 13;break;
                }                                          
                while(KEY_MATRIX_PORT=0Xf7);
                return key_is;
         }
         else if(KEY_MATRIX_PORT!=0xfb)
         {
                 delay_10us(1000);
                switch(KEY_MATRIX_PORT)
                {
                        case 0x7b:key is 2;break;
                        case 0xbb:key is 6;break;
                        case 0xdb:key is 10;break;
                        case 0xeb:key is 14;break;
                }
                while(KEY_MATRIX_PORT=0Xfb);
                return key is;
         }
         else if(KEY_MATRIX_PORT!=0xfd)
         {
                 delay_10us(1000);
                switch(KEY_MATRIX_PORT)
                {
                        case 0x7d:key is 3;break;
                        case 0xbd:key is 7;break;
                        case 0xdd:key is 11;break;
                        case 0xed:key is 15;break;
                }
                while(KEY  MATRIX POR=0Xfd);
                return key is;
         }
         if(KEY_MATRIX_PORT !=0xfe)
         {
                 delay_10us(1000);
                switch(KEY_MATRIX_PORT )
                {
                        case 0x7e:key is 4;break;
                        case 0xbe:key is 8;break;
                        case 0xde:key is 12;break;
                        case 0xee:key is 16;break;
                }
                while(KEY_MATRIX_PORT =0Xfe);
                return key is;
         }
}
void main()
{          u8 key=0;
         while(1)
        {
                key=key_matrix();
                if(key!=0)
                P0=gsmg[key-1];
        }
}
   
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:903582 发表于 2023-2-7 23:22 | 只看该作者
你把错误也贴出来啊 ,我们又不是编译器
回复

使用道具 举报

板凳
ID:883242 发表于 2023-2-7 23:53 | 只看该作者
只看到第一个错误
#define SMG PORT P0
这里SMG PORT中间加空格就是两个东西了,要写成SMG_PORT
回复

使用道具 举报

地板
ID:844772 发表于 2023-2-8 00:01 来自手机 | 只看该作者
key is 少_。  
回复

使用道具 举报

5#
ID:94031 发表于 2023-2-8 06:08 | 只看该作者
u8 gsmg_code[16]={0x3f,0x06,0x5b,0x4f,0x66,
0x6d,0x7d,0x07,0x7f,0x6f,0x77,
0x7c,0x39,0x5e,0x79,0x71}最后要有分号。
回复

使用道具 举报

6#
ID:94031 发表于 2023-2-8 06:32 | 只看该作者
case 0x77:key_is 1;break;应该 key_is = 1;
回复

使用道具 举报

7#
ID:94031 发表于 2023-2-8 06:38 | 只看该作者
while(KEY_MATRIX_PORT=0Xfb);应该while(KEY_MATRIX_PORT==0Xfb);
回复

使用道具 举报

8#
ID:596109 发表于 2023-2-8 08:33 | 只看该作者
                        case 0x7e:key is 4;break;                         case 0xbe:key is 8;break;                         case 0xde:key is 12;break;                         case 0xee:key is 16;break,k
回复

使用道具 举报

9#
ID:596109 发表于 2023-2-8 08:34 | 只看该作者
                        case 0x7e:key is 4;break;                         case 0xbe:key is 8;break;                         case 0xde:key is 12;break;                         case 0xee:key is 16;break //key is改成key_is =
回复

使用道具 举报

10#
ID:76318 发表于 2023-2-8 11:34 | 只看该作者
#include <REGX52.H> typedef unsigned char u8; typedef unsigned int u16; #define SMG_PORT P0                                       //P0口接数码管 #define KEY_MATRIX_PORT P1                                               //P1口接矩阵按键 u8 gsmg_code[17]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0x00};          //0~9 a~f 全灭        共阴数码管 void delay_10us(u16 ten_us) {      while(ten_us--); } u8 key_matrix(void)                                               //按键函数         高四位接行线,低四位接列线 {      u8 key_is=0;                                                                   //键值变量       KEY_MATRIX_PORT =0xf7;                                   //按键赋值        1111 0111      if(KEY_MATRIX_PORT!=0xf7)                           //有键按下               {          delay_10us(100);                         //延时          switch(KEY_MATRIX_PORT )                                  //匹配键值           {                 case 0x77:key_is=1;break;                   //0111 0111         键值1                 case 0xb7:key_is=5;break;                   //1011 0111         键值5                 case 0xd7:key_is=9;break;                   //1101 0111         键值9                 case 0xe7:key_is=13;break;                   //1110 0111         键值13           }                                                     while(KEY_MATRIX_PORT!=0xf7);                           //等待松手                   return key_is;                                                           //返回键值      }          KEY_MATRIX_PORT =0xfb;                         //按键赋值   1111 1011     if(KEY_MATRIX_PORT!=0xfb)                      //有键按下   不等于1111 1011      {          delay_10us(100);                          //延时          switch(KEY_MATRIX_PORT)                   //匹配           {                 case 0x7b:key_is=2;break;                   //0111 1011  键值2                 case 0xbb:key_is=6;break;                   //1011 1011  键值6                 case 0xdb:key_is=10;break;                   //1101 1011  键值10                 case 0xeb:key_is=14;break;                   //1110 1011  键值14           }          while(KEY_MATRIX_PORT!=0xfb);                   //等待松手             return key_is;                                                           //返回键值      }           KEY_MATRIX_PORT =0xfd;                               //按键赋值   1111 1101     if(KEY_MATRIX_PORT!=0xfd)                      //有键按下         {          delay_10us(100);                          //延时          switch(KEY_MATRIX_PORT)                   //匹配           {                 case 0x7d:key_is=3;break;          //0111 1101  键值3                 case 0xbd:key_is=7;break;                   //1011 1101  键值7                 case 0xdd:key_is=11;break;                   //1101 1101  键值11                 case 0xed:key_is=15;break;                   //1110 1101        键值15           }          while(KEY_MATRIX_PORT!=0xfd);             //等待松手            return key_is;                                   //返回键值      }           KEY_MATRIX_PORT =0xfe;                               //按键赋值        1111 1110     if(KEY_MATRIX_PORT !=0xfe)                                           //有键按下   不等于1111 1110      {           delay_10us(100);                               //延时           switch(KEY_MATRIX_PORT )                                   //匹配            {                 case 0x7e:key_is=4;break;                   //0111 1110  键值4                 case 0xbe:key_is=8;break;                   //1011 1110  键值8                 case 0xde:key_is=12;break;                   //1101 1110  键值12                 case 0xee:key_is=16;break;                   //1110 1110  键值16            }           while(KEY_MATRIX_PORT!=0xfe);            //等待松手              return key_is;                                                   //返回键值      } } void main()                                               //主函数 {              u8 key=0;                                       //定义键值变量    SMG_PORT=gsmg_code[16];                         //熄灭数码管        while(1)     {          key=key_matrix();                               //读取按键值               SMG_PORT=gsmg_code[key-1];                           //P0显示键值     } }
回复

使用道具 举报

11#
ID:1062123 发表于 2023-2-8 12:22 | 只看该作者
谢谢大家建议很好我都采纳了
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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