久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 1792|回復: 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 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 国产在线一区二区三区 | 国产亚洲精品久久久优势 | 亚洲国产成人精品女人久久久 | 国精产品一区一区三区免费完 | 久久国产亚洲 | 国产欧美视频一区二区三区 | www.国产.com | 久久在线免费 | 国产视频一区在线 | 免费一级大片 | 91精品国产综合久久久久久 | 黄页网址在线观看 | 久草成人| 日韩精品一区二区三区四区视频 | 色综合久久久久 | 久久成人18免费网站 | 欧美日韩精品在线一区 | 在线看av网址 | 2020亚洲天堂 | 欧美高清视频一区 | a免费视频 | 欧美精品一区二区在线观看 | 欧美日韩在线精品 | 我要看免费一级毛片 | 日韩国产精品一区二区三区 | 伊人在线 | 毛片免费观看 | 欧美一区二区三区一在线观看 | 精品久久久久久久久久久久久久 | 成人在线免费 | 日韩精品 电影一区 亚洲 | 久久天天躁狠狠躁夜夜躁2014 | 国产一区二区三区四区三区四 | 久久精品欧美一区二区三区麻豆 | 国产精品久久777777 | 一区二区免费 | 国产一区二区在线看 | 国产精品视频一 | 久久中文字幕一区 | 久久久国产一区二区三区四区小说 | 久久精品在线免费视频 |