找回密码
 立即注册

QQ登录

只需一步,快速开始

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

C语言程序 传的是数组一个数,为什么数显不对?

[复制链接]
跳转到指定楼层
楼主
#include <reg52.h>
#include <intrins.h>
#define SXLed_P P0//数码管数据传输
unsigned  char code Number[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7F,0x6F,0x40,0x80,0x00};//共阴极数码管0-9.-灭
void Init(void);//变量初始化        函数
void T0_Init(void);//定时器T0初始化函数
void SXLed (unsigned char location,unsigned char Num);//数码管显示函数
unsigned int i;
unsigned char SX[7];//数码管内容暂存器
sbit SXLed_W=P2^7;//数码管位选控制位
sbit SXLed_D=P2^6;//数码管段选控制位
void main(void)
{
        Init();                                                                //变量初始化                                
        T0_Init();                                                                //定时器T0初始化
       P1=0x00;                                                           //开启Led灯
        while(1);
}
void Init(void)
{
i=0;
SX[0]=11;
SX[1]=2;
SX[2]=3;
SX[3]=4;
SX[4]=5;
SX[5]=6;
SX[6]=7;
SX[7]=8;
}
void T0_Init(void)
{
TMOD|=0x01;                                                                  //定时器T0工作在16位定时模式
        EA=1;                                                                                        //开总中断
        ET0=1;                                                                                //开定时器中断
        TR0=1;                                                                                //启动定时器
        TH0=0xee;                                                                        //定时5毫秒高四位初值重装
        TL0=0x00;                                                                        //定时5毫秒高四位初值
}
void T0_Timer(void) interrupt 1
{
        TH0=0xee;                                                                        //定时5毫秒高四位初值重装
        TL0=0x00;                                                                              //定时5毫秒高四位初值重装
        SXLed(1,SX[7]);
        i++;
        if(!(i%100))
        {        
                P1=~P1;
        }
}
void SXLed (unsigned char location,unsigned char Num)//location显示位置,num显示数字
{
                SXLed_P=0xff;                                                                               //消影
                SXLed_W=1;                                                                                //打开位选锁存器
                SXLed_P=~(0x80>>location);                                                         //送位码
                SXLed_W=0;                                                                                //锁存位选数据
                SXLed_P=0xff;
                SXLed_D=1;                                                                                //打开段选锁存器
                SXLed_P=Number[Num];                                                               //送段码
                SXLed_D=0;                                                                                //锁存段选数据
}
SXLed(1,SX[7]);这里改成SXLed(1,8)就可以SXLed(1,SX[7]);这样就会显示乱码,不是传的是数组的一个吗?



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

使用道具 举报

沙发
ID:712097 发表于 2023-10-20 18:58 | 只看该作者
数组类型未定义,在变量申明区加上unsigned char SX[];试试。
回复

使用道具 举报

板凳
ID:883242 发表于 2023-10-20 19:52 | 只看该作者
unsigned char SX[7];
SX[7]=8;

这两句话自相矛盾,回去重学c语言。
回复

使用道具 举报

地板
ID:275826 发表于 2023-10-20 20:05 | 只看该作者
unsigned char SX[7];//数码管内容暂存器;改成unsigned char SX[8];
回复

使用道具 举报

5#
ID:213173 发表于 2023-10-20 21:11 | 只看该作者


  1. #include <reg52.h>
  2. #include <intrins.h>
  3. #define SXLed_P P0//数码管数据传输
  4. unsigned  char code Number[]={//共阴极数码管0-9.-灭
  5.         0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,
  6.         0x07,0x7F,0x6F,0x40,0x80,0x00};
  7. void Init(void);//变量初始化函数
  8. void T0_Init(void);//定时器T0初始化函数
  9. void SXLed ();//数码管显示函数
  10. unsigned int i;
  11. unsigned char SX[8];//数码管内容暂存器
  12. sbit SXLed_W=P2^7;//数码管位选控制位
  13. sbit SXLed_D=P2^6;//数码管段选控制位
  14. void main(void)
  15. {
  16.         Init();        //变量初始化
  17.         T0_Init();     //定时器T0初始化
  18.         P1=0x00;       //开启Led灯
  19.         while(1);
  20. }
  21. void Init(void)
  22. {
  23.         i=0;
  24.         SX[0]=Number[1];
  25.         SX[1]=Number[2];
  26.         SX[2]=Number[3];
  27.         SX[3]=Number[4];
  28.         SX[4]=Number[5];
  29.         SX[5]=Number[6];
  30.         SX[6]=Number[7];
  31.         SX[7]=Number[8];
  32. }
  33. void T0_Init(void)        //2毫秒@11.0592MHz
  34. {
  35.         TMOD= 0x01;                        //设置定时器模式
  36.         TH0 = 0xF8;                                //设置定时初始值
  37.         TL0 = 0xCD;                                //设置定时初始值
  38.         TF0 = 0;                                //清除TF0标志
  39.         TR0 = 1;                                //定时器0开始计时
  40.         EA=1;            //开总中断
  41.         ET0=1;           //开定时器中断
  42. }

  43. void T0_Timer(void) interrupt 1
  44. {
  45.         TH0 = 0xF8;        //定时2毫秒高四位初值重装
  46.         TL0 = 0xCD;        //定时2毫秒高四位初值重装
  47.         SXLed();
  48.         i++;
  49.         if(!(i%100))
  50.         {        
  51.                 P1=~P1;
  52.         }
  53. }
  54. void SXLed()
  55. {
  56.         static unsigned char i=0;
  57.         SXLed_P=0x00;        //消影
  58.         SXLed_D=1;           //打开段选锁存器
  59.         SXLed_D=0;           //锁存段选数据
  60.         SXLed_P=~(0x01<<i);  //送位码
  61.         SXLed_W=1;           //打开位选锁存器
  62.         SXLed_W=0;           //锁存位选数据
  63.         SXLed_P=SX[i];       //送段码
  64.         SXLed_D=1;           //打开段选锁存器
  65.         SXLed_D=0;           //锁存段选数据
  66.         i=++i%8;             //循环计数
  67. }
复制代码



回复

使用道具 举报

6#
ID:1095802 发表于 2023-10-20 22:02 | 只看该作者
chxelc 发表于 2023-10-20 18:58
数组类型未定义,在变量申明区加上unsigned char SX[];试试。

定义了,在前面有
回复

使用道具 举报

7#
ID:1095802 发表于 2023-10-20 22:09 | 只看该作者
Hephaestus 发表于 2023-10-20 19:52
unsigned char SX[7];
SX[7]=8;

数组是从0开始算,=8中的8是第七个元素中存放的值,哪里有问题?
回复

使用道具 举报

8#
ID:363696 发表于 2023-10-20 23:18 | 只看该作者
unsigned char SX[7],数组的元素序号从0开始,因此SX[7]=8;这句话会导致数组越界,超过访问范围,导致未定义错误发生
回复

使用道具 举报

9#
ID:883242 发表于 2023-10-21 00:04 | 只看该作者
殿堂之上 发表于 2023-10-20 22:09
数组是从0开始算,=8中的8是第七个元素中存放的值,哪里有问题?

不用脱鞋数脚趾,数你的手指就行,0、1、2……

那么你的第七根手指是几???数数也能数不明白?
回复

使用道具 举报

10#
ID:419968 发表于 2023-10-21 01:35 | 只看该作者
unsigned char SX[7] ,SX[8]  数组越界
回复

使用道具 举报

11#
ID:69038 发表于 2023-10-21 07:23 | 只看该作者
你的SX定义了7个成员,SX[7]溢出了。SX[0]到SX[6]才是真正的成员。
回复

使用道具 举报

12#
ID:526543 发表于 2023-10-22 16:47 | 只看该作者
有没有可能SX[7]啥都没有
回复

使用道具 举报

13#
ID:1097455 发表于 2023-10-27 11:28 | 只看该作者
数组超出定义范围了
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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