找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1915|回复: 15
收起左侧

单片机8*8点阵程序的警告找不出来,麻烦各位大佬帮忙看一看

[复制链接]
ID:939657 发表于 2021-6-20 14:55 | 显示全部楼层 |阅读模式
8*8点阵程序,我检查很多次,都看不出程序的问题,可还是会有一个警告,麻烦各位大佬帮忙看一下,这到底是哪里出问题了
1624171934(1).png
单片机源程序如下:
  1.         //          ***************************************************************************************/

  2. #include "reg51.h"                         //此文件中定义了单片机的一些特殊功能寄存器
  3. #include<intrins.h>

  4. typedef unsigned int u16;          //对数据类型进行声明定义
  5. typedef unsigned char u8;

  6. sbit SRCLK=P3^6;
  7. sbit RCLK=P3^5;
  8. sbit SER=P3^4;
  9. sbit buzzer=P1^5;

  10.   unsigned char code ledduan[17][8]={
  11.                      {0x00,0x00,0x3e,0x41,0x41,0x41,0x3e,0x00},
  12.                                         {0x00,0x00,0x24,0x7C,0x04,0x00,0x00,0x00},
  13.                                          {0x00,0x00,0x26,0x4A,0x52,0x22,0x00,0x00},
  14.                                          {0x00,0x00,0x2A,0x2A,0x2A,0x3E,0x00,0x00},
  15.                                          {0x00,0x08,0x18,0x28,0x7E,0x08,0x00,0x00},
  16.                                          {0x00,0x00,0x7A,0x4A,0x4E,0x00,0x00,0x00},
  17.                                          {0x00,0x00,0x7E,0x4A,0x4E,0x00,0x00,0x00},
  18.                                          {0x00,0x40,0x40,0x40,0x7E,0x00,0x00,0x00},
  19.                                          {0x00,0x7E,0x4A,0x4A,0x7E,0x00,0x00,0x00},
  20.                                          {0x00,0x7A,0x4A,0x4A,0x7E,0x00,0x00,0x00},
  21.                                          {0x00,0x7A,0x4A,0x4A,0x7E,0x00,0x00,0x00},
  22.                                          {0x00,0x00,0x7E,0x48,0x78,0x00,0x00,0x00},
  23.                                          {0x00,0x00,0x7E,0x48,0x48,0x00,0x00,0x00},
  24.                                          {0x40,0x40,0x7E,0x40,0x40,0x00,0x00,0x00},
  25.                                          {0x00,0x00,0x3E,0x02,0x02,0x00,0x00,0x00},
  26.                                          {0x00,0x00,0x3E,0x02,0x3E,0x00,0x00,0x00},
  27.                                          {0x00,0x30,0x48,0x24,0x24,0x48,0x30,0x00}
  28.                           } ;
  29. unsigned char code ledwei[8]={0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe};
  30.   void delay1(u16 i)
  31.   {
  32.         while(i--);
  33.   }
  34.   void beep()
  35. {
  36. u16 i;
  37. for(i=0;i<100;i++)
  38. {
  39. delay1(100);
  40. buzzer=~buzzer;
  41. }}
  42.   void delay(unsigned int time)
  43.   {
  44.           unsigned int i,j;
  45.         for (i=0;i<time;i++)
  46.           for (j=0;j<121;j++);
  47.   
  48.   }
  49. /*******************************************************************************
  50. * 函数名         : Hc595SendByte(u8 dat)
  51. * 函数功能                   : 向74HC595发送一个字节的数据,从高位开始到低位
  52. * 输入           : 无
  53. * 输出                  : 无
  54. *******************************************************************************/
  55. void Hc595SendByte(u8 dat)
  56. {
  57.         u8 a;
  58.         SRCLK=0;
  59.         RCLK=0;
  60.         for(a=0;a<8;a++)
  61.         {
  62.                 SER=dat>>7;//运算时,先将dat的值复制到一个临时单元,向右移位运算的是临时单元的值,而不是dat,所以移位后, dat的值不变。
  63.                 dat<<=1;

  64.                 SRCLK=1;
  65.                 _nop_();
  66.                 _nop_();
  67.                 SRCLK=0;        
  68.         }

  69.         RCLK=1;
  70.         _nop_();
  71.         _nop_();
  72.         RCLK=0;
  73. }

  74. /*******************************************************************************
  75. * 函 数 名       : main
  76. * 函数功能                 : 主函数
  77. * 输    入       : 无
  78. * 输    出             : 无
  79. *******************************************************************************/
  80. void main()
  81. {        
  82.         unsigned char tab,j;
  83.         unsigned int i;        
  84.         while(1)
  85.         {
  86.                   
  87.                           for (i=0;i<50;i++)
  88.                     { for(tab=0;tab<8;tab++)
  89.                    {          Hc595SendByte(0x00);//消隐,去掉重影
  90.                     P0=ledwei[tab];
  91.                     Hc595SendByte(ledduan[j][tab]);
  92.                     delay(2);
  93.                     
  94.          }
  95.               }
  96.         }
  97.         j++;
  98.         beep();
  99.         if(j==17)
  100.         {
  101.         j=0;
  102.         }        
  103. }

复制代码

回复

使用道具 举报

ID:824490 发表于 2021-6-20 16:02 | 显示全部楼层
你定义了一个BEEP的函数,却没有调用过它。。。就是这个意思,,
回复

使用道具 举报

ID:94031 发表于 2021-6-20 16:24 | 显示全部楼层
main 程序有问题
回复

使用道具 举报

ID:939657 发表于 2021-6-20 19:13 | 显示全部楼层
名字不是重点 发表于 2021-6-20 16:02
你定义了一个BEEP的函数,却没有调用过它。。。就是这个意思,,

用了,主程序j++下面的程序
回复

使用道具 举报

ID:939657 发表于 2021-6-20 19:14 | 显示全部楼层

请问是主程序哪里有问题呢?
回复

使用道具 举报

ID:94031 发表于 2021-6-20 19:41 | 显示全部楼层
tyq666 发表于 2021-6-20 19:14
请问是主程序哪里有问题呢?

你发的程序,你编译通过了吗?
回复

使用道具 举报

ID:939657 发表于 2021-6-20 19:44 | 显示全部楼层
xuyaqi 发表于 2021-6-20 19:41
你发的程序,你编译通过了吗?

编译过了,上面的图片就是编译后出现的问题,有一个警告
回复

使用道具 举报

ID:94031 发表于 2021-6-20 20:04 | 显示全部楼层
tyq666 发表于 2021-6-20 19:44
编译过了,上面的图片就是编译后出现的问题,有一个警告

警告c294看到了吗?
警告c294.png

回复

使用道具 举报

ID:922355 发表于 2021-6-20 20:22 | 显示全部楼层
这个警告我教你怎么看。可以不用管,segment那里PR?后面那个BEEP意思是提醒你可能有声明了BEEP函数但是你没有用它。如果要用到它,调用它,不用他就注掉,或者你不用管那个警告不会影响编译运行。

评分

参与人数 1黑币 +20 收起 理由
admin + 20 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

ID:941075 发表于 2021-6-20 21:48 | 显示全部楼层
谢谢楼主也谢谢51黑平台!
回复

使用道具 举报

ID:878061 发表于 2021-6-20 22:29 | 显示全部楼层
你把beep()函数放在了死循环while(1)的大括号外面,永远执行不到beep(),所以警告
回复

使用道具 举报

ID:939657 发表于 2021-6-21 22:50 | 显示全部楼层
Carose 发表于 2021-6-20 20:22
这个警告我教你怎么看。可以不用管,segment那里PR?后面那个BEEP意思是提醒你可能有声明了BEEP函数但是你没 ...

要用的,我就在j++下面加了
回复

使用道具 举报

ID:939657 发表于 2021-6-21 22:52 | 显示全部楼层
xuyaqi 发表于 2021-6-20 20:04
警告c294看到了吗?

这个没问题吧,我用keil4编译,它只出现一个警告
回复

使用道具 举报

ID:811711 发表于 2021-6-22 08:58 | 显示全部楼层
说的很清楚啊 有个函数你没有调用
回复

使用道具 举报

ID:155507 发表于 2021-6-22 10:13 | 显示全部楼层
给你改了,对比一下就知道哪里错了。

  1. //  ***************************************************************************************/

  2. #include "reg51.h"                         //此文件中定义了单片机的一些特殊功能寄存器
  3. #include<intrins.h>

  4. typedef unsigned int u16;          //对数据类型进行声明定义
  5. typedef unsigned char u8;

  6. sbit SRCLK=P3^6;
  7. sbit RCLK=P3^5;
  8. sbit SER=P3^4;
  9. sbit buzzer=P1^5;

  10. unsigned char code ledduan[17][8]={
  11.         {0x00,0x00,0x3e,0x41,0x41,0x41,0x3e,0x00},
  12.         {0x00,0x00,0x24,0x7C,0x04,0x00,0x00,0x00},
  13.         {0x00,0x00,0x26,0x4A,0x52,0x22,0x00,0x00},
  14.         {0x00,0x00,0x2A,0x2A,0x2A,0x3E,0x00,0x00},
  15.         {0x00,0x08,0x18,0x28,0x7E,0x08,0x00,0x00},
  16.         {0x00,0x00,0x7A,0x4A,0x4E,0x00,0x00,0x00},
  17.         {0x00,0x00,0x7E,0x4A,0x4E,0x00,0x00,0x00},
  18.         {0x00,0x40,0x40,0x40,0x7E,0x00,0x00,0x00},
  19.         {0x00,0x7E,0x4A,0x4A,0x7E,0x00,0x00,0x00},
  20.         {0x00,0x7A,0x4A,0x4A,0x7E,0x00,0x00,0x00},
  21.         {0x00,0x7A,0x4A,0x4A,0x7E,0x00,0x00,0x00},
  22.         {0x00,0x00,0x7E,0x48,0x78,0x00,0x00,0x00},
  23.         {0x00,0x00,0x7E,0x48,0x48,0x00,0x00,0x00},
  24.         {0x40,0x40,0x7E,0x40,0x40,0x00,0x00,0x00},
  25.         {0x00,0x00,0x3E,0x02,0x02,0x00,0x00,0x00},
  26.         {0x00,0x00,0x3E,0x02,0x3E,0x00,0x00,0x00},
  27.         {0x00,0x30,0x48,0x24,0x24,0x48,0x30,0x00}
  28. } ;
  29. unsigned char code ledwei[8]={0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe};
  30. void delay1(u16 i)
  31. {
  32.         while(i--);
  33. }
  34. void beep()
  35. {
  36.         u16 i;
  37.         for(i=0;i<100;i++)
  38.         {
  39.                 delay1(100);
  40.                 buzzer=~buzzer;
  41.         }}
  42. void delay(unsigned int time)
  43. {
  44.         unsigned int i,j;
  45.         for (i=0;i<time;i++)
  46.         for (j=0;j<121;j++);

  47. }
  48. /*******************************************************************************
  49. * 函数名         : Hc595SendByte(u8 dat)
  50. * 函数功能                   : 向74HC595发送一个字节的数据,从高位开始到低位
  51. * 输入           : 无
  52. * 输出                  : 无
  53. *******************************************************************************/
  54. void Hc595SendByte(u8 dat)
  55. {
  56.         u8 a;
  57.         SRCLK=0;
  58.         RCLK=0;
  59.         for(a=0;a<8;a++)
  60.         {
  61.                 SER=dat>>7;//运算时,先将dat的值复制到一个临时单元,向右移位运算的是临时单元的值,而不是dat,所以移位后, dat的值不变。
  62.                 dat<<=1;

  63.                 SRCLK=1;
  64.                 _nop_();
  65.                 _nop_();
  66.                 SRCLK=0;        
  67.         }

  68.         RCLK=1;
  69.         _nop_();
  70.         _nop_();
  71.         RCLK=0;
  72. }

  73. /*******************************************************************************
  74. * 函 数 名       : main
  75. * 函数功能                 : 主函数
  76. * 输    入       : 无
  77. * 输    出             : 无
  78. *******************************************************************************/
  79. void main()
  80. {        
  81.         unsigned char tab,j;
  82.         unsigned int i;        
  83.         while(1)
  84.         {
  85.                
  86.                 for (i=0;i<50;i++)
  87.                 { for(tab=0;tab<8;tab++)
  88.                         {          Hc595SendByte(0x00);//消隐,去掉重影
  89.                                 P0=ledwei[tab];
  90.                                 Hc595SendByte(ledduan[j][tab]);
  91.                                 delay(2);
  92.                                
  93.                         }
  94.                 }
  95.             //} <-------
  96.                 j++;
  97.                 beep();
  98.                 if(j==17)
  99.                 {
  100.                         j=0;
  101.                 }        
  102.         }
  103. } //<-----


复制代码
回复

使用道具 举报

ID:934353 发表于 2021-6-29 17:27 | 显示全部楼层
很简单,就是你定义了beep函数,却没有调用过它,因为你把beep函数放在while(1)死循环后面了,而且你的死循环里也没有跳出的条件,所以你跳不出死循环就执行不到beep函数,包括j++那些都执行不到的
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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