找回密码
 立即注册

QQ登录

只需一步,快速开始

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

C51单片机程序595一位共阳数码管显示0-9代码问题,求指教

[复制链接]
跳转到指定楼层
楼主
/*程序主要功能:通过按开关K1来实现一位7段共阳数码管从0-9循环显示,每看一下数字加1*/
//程序里有一个变量i没有使用,编译时候有一个警告,但删掉程序运行就不对了  不报错。  求大神指点
#include<reg51.h>
#define  u16  unsigned int
#define  u8  unsigned char
sbit SH_CP=P2^0;          //595_11脚
sbit DS=P2^1;         //595_14脚
sbit ST_CP=P2^2;          //595_12脚
sbit K1=P1^0;

unsigned char shengduan[10]={0x02,0x9F,0x24,0x0C,0x98,0x48,0x40,0x1E,0x00,0x08};



void delay(u8 y)
{        
    u8 i;
        u16 j;
        for(i=0;i<y;i++)
        {
                for(j=0;j<1;j++);
        }
}

void HC595SendByte(u8 dat)
{
        unsigned char a;
        SH_CP=0;
        ST_CP=0;
        DS=0;
        for(a=0;a<8;a++)
        {
                DS=dat<<7;
                dat>>=1;

                SH_CP=1;
                delay(1);//延时
                SH_CP=0;        
                delay(1);//延时
        }

        ST_CP=1;
        delay(1);
        ST_CP=0;

}

void main(void) //主函数
{

        u8 num;
                u8 i; //没有使用的变量,还不能删

            if(K1==0)
        
                {        
                          num++;
                          if(num==10)
                          num=0;

            }
                        while(!K1);        
            HC595SendByte(shengduan[num]);
            delay(1);//延时      
}


捕获.JPG (150.7 KB, 下载次数: 10)

捕获.JPG
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:213173 发表于 2022-9-5 22:01 | 只看该作者
楼主主函数写法不规范导致的异常。
  1. #include<reg51.h>
  2. #define  u16  unsigned int
  3. #define  u8  unsigned char
  4. sbit SH_CP=P2^0;      //595_11脚
  5. sbit DS=P2^1;         //595_14脚
  6. sbit ST_CP=P2^2;      //595_12脚
  7. sbit K1=P1^0;

  8. unsigned char shengduan[10]={0x02,0x9F,0x24,0x0C,0x98,0x48,0x40,0x1E,0x00,0x08};

  9. void delay(u16 y)
  10. {        
  11.         u16 i,j;
  12.         for(i=0;i<y;i++)
  13.         {
  14.                 for(j=0;j<120;j++);
  15.         }
  16. }

  17. void HC595SendByte(u8 dat)
  18. {
  19.         unsigned char a;
  20.         SH_CP=0;
  21.         ST_CP=0;
  22.         DS=0;
  23.         for(a=0;a<8;a++)
  24.         {
  25.                 DS=dat<<7;
  26.                 dat>>=1;
  27.                
  28.                 SH_CP=1;
  29.                 delay(1);//延时
  30.                 SH_CP=0;        
  31.                 delay(1);//延时
  32.         }
  33.         ST_CP=1;
  34.         delay(1);
  35.         ST_CP=0;
  36. }

  37. void main(void) //主函数
  38. {
  39.         u8 num;
  40. //        u8 i; //没有使用的变量,还不能删
  41.         while(1)
  42.         {
  43.                 if(K1==0)
  44.                 {        
  45.                         delay(10);
  46.                         if(K1==0)
  47.                         {
  48.                                 num++;
  49.                                 if(num==10)
  50.                                 num=0;
  51.                                 while(!K1);      
  52.                         }
  53.                 }
  54. //                while(!K1);        
  55.                 HC595SendByte(shengduan[num]);
  56. //                delay(1);//延时      
  57.         }
  58. }
复制代码
回复

使用道具 举报

板凳
ID:624769 发表于 2022-9-5 22:23 | 只看该作者
void main(void) //主函数
{

        u8 num;
while(1)                  // 问题的关键 是缺少这个,不是那个i
{
            if(K1==0)
      
                {      
                          num++;
                          if(num==10)
                          num=0;

            }
                        while(!K1);      
            HC595SendByte(shengduan[num]);
            delay(1);//延时      
}
}
回复

使用道具 举报

地板
ID:440585 发表于 2022-9-6 08:07 | 只看该作者
wulin 发表于 2022-9-5 22:01
楼主主函数写法不规范导致的异常。

谢谢 问题解决了   少了主循环
回复

使用道具 举报

5#
ID:440585 发表于 2022-9-6 08:09 | 只看该作者
188610329 发表于 2022-9-5 22:23
void main(void) //主函数
{

谢谢  问题解决了   主循环忘写了  
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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