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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2551|回復: 25
收起左側

Keil報錯C247,是不是數值不能直接賦予變量值

  [復制鏈接]
ID:298743 發表于 2024-5-9 10:48 | 顯示全部樓層 |閱讀模式
keil報錯,是不能直接賦予數組dat[5]={dat1,dat2,dat3,dat4,datL};這樣的變量值嗎?
void led_hc595_drive(unsigned char dat1,unsigned char dat2,unsigned char dat3,unsigned char dat4,unsigned char datL)
{
unsigned char dat[5]={dat1,dat2,dat3,dat4,datL};
unsigned char i,j;

for(j = 0;j < 5;j++)
{
unsigned char temp = dat[j];
for(i=0;i<8;i++)
{
HC595_DS=(temp&0x80)?1:0;
HC595_SH_CP=0;
HC595_SH_CP=1;
temp<<=1;
}
}
HC595_ST_CP = 0;//上升沿 移位寄存器的數據移到存儲寄存器
HC595_ST_CP = 1;


HC595_SH_CP = 0;//拉低,提高抗干擾
HC595_ST_CP = 0;
HC595_DS = 0;

}
回復

使用道具 舉報

ID:277550 發表于 2024-5-9 12:59 | 顯示全部樓層
unsigned char dat[5]={dat1,dat2,dat3,dat4,datL};改成定義和賦值分開
回復

使用道具 舉報

ID:161164 發表于 2024-5-9 13:23 | 顯示全部樓層
是數組不能直接用變量初始化
回復

使用道具 舉報

ID:298743 發表于 2024-5-9 13:24 | 顯示全部樓層
devcang 發表于 2024-5-9 12:59
unsigned char dat[5]={dat1,dat2,dat3,dat4,datL};改成定義和賦值分開

把定義和賦值分開也不行
回復

使用道具 舉報

ID:1109793 發表于 2024-5-9 14:08 | 顯示全部樓層
你這綠色背景怎么弄的啊
回復

使用道具 舉報

ID:77589 發表于 2024-5-9 14:15 | 顯示全部樓層
unsigned char dat[5]={dat1,dat2,dat3,dat4,datL}; 不能在函數內部這樣寫。
回復

使用道具 舉報

ID:607298 發表于 2024-5-9 15:09 | 顯示全部樓層
這樣試試吧
unsigned char dat[5];
dat[0] = dat1;
dat[1] = dat2;
dat[2] = dat3;
dat[3] = dat4;
dat[4] = datL;
回復

使用道具 舉報

ID:1109793 發表于 2024-5-9 15:12 | 顯示全部樓層
asdadqw2 發表于 2024-5-9 13:24
把定義和賦值分開也不行

要這樣,dat[0] = dat1;dat[1]=……
回復

使用道具 舉報

ID:1119939 發表于 2024-5-9 15:47 | 顯示全部樓層
unsigned char dat[5]={dat1,dat2,dat3,dat4,datL};
回復

使用道具 舉報

ID:1119939 發表于 2024-5-9 15:49 | 顯示全部樓層
unsigned char dat[5]={0}; dat[0]=dat1;dat[1]=dat2;dat[2]=dat3;dat[3]=dat4;dat[4]=datL;
回復

使用道具 舉報

ID:883242 發表于 2024-5-9 16:20 | 顯示全部樓層
不能這樣賦值,回去看c語言教材。
回復

使用道具 舉報

ID:298743 發表于 2024-5-9 17:36 | 顯示全部樓層
小H丶 發表于 2024-5-9 15:49
unsigned char dat[5]={0}; dat[0]=dat1;dat[1]=dat2;dat[2]=dat3;dat[3]=dat4;dat[4]=datL;

試過了,不行
回復

使用道具 舉報

ID:298743 發表于 2024-5-9 17:36 | 顯示全部樓層
xiaobendan001 發表于 2024-5-9 14:08
你這綠色背景怎么弄的啊

不清楚
回復

使用道具 舉報

ID:298743 發表于 2024-5-9 17:37 | 顯示全部樓層
試過這樣寫,還是不行
unsigned char dat[5]={0};
dat[0] = dat1;
dat[1] = dat2;
dat[2] = dat3;
dat[3] = dat4;
dat[4] = datL;
回復

使用道具 舉報

ID:883242 發表于 2024-5-9 19:10 | 顯示全部樓層
asdadqw2 發表于 2024-5-9 17:37
試過這樣寫,還是不行
unsigned char dat[5]={0};
dat[0] = dat1;

報什么錯?
回復

使用道具 舉報

ID:624769 發表于 2024-5-9 19:22 | 顯示全部樓層
為啥要弄個數組 給自己找不痛快呢? 直接用指針不香么?

void led_hc595_drive(unsigned char dat1,unsigned char dat2,unsigned char dat3,unsigned char dat4,unsigned char datL)
{
        unsigned char *p;
        unsigned char i;
       
        p        = &dat1;
        while(p <= &datL)
        {
                for(i=0;i<8;i++)
                {
                        HC595_DS=(*p&0x80)?1:0;
                        HC595_SH_CP=0;
                        HC595_SH_CP=1;
                        *p<<=1;
                }
                p++;
        }
        HC595_ST_CP = 0;//上升沿 移位寄存器的數據移到存儲寄存器
        HC595_ST_CP = 1;
       
        HC595_SH_CP = 0;//拉低,提高抗干擾
        HC595_ST_CP = 0;
        HC595_DS = 0;
}
回復

使用道具 舉報

ID:1118092 發表于 2024-5-9 19:46 | 顯示全部樓層
看著同問題
回復

使用道具 舉報

ID:712493 發表于 2024-5-9 20:49 | 顯示全部樓層
unsigned char dat1,unsigned char dat2,unsigned char dat3,unsigned char dat4,unsigned char datL這個會自己變成連續地址?
回復

使用道具 舉報

ID:624769 發表于 2024-5-9 22:17 | 顯示全部樓層
fj51hei 發表于 2024-5-9 20:49
unsigned char dat1,unsigned char dat2,unsigned char dat3,unsigned char dat4,unsigned char datL這個會 ...

你可以看一下關于傳參的設定,只要傳參超過3個就一定是獨立的連續地址。
回復

使用道具 舉報

ID:879348 發表于 2024-5-10 08:51 | 顯示全部樓層
定義變量賦值是編譯的時候完成的,所以不能賦值變量
回復

使用道具 舉報

ID:1109793 發表于 2024-5-10 10:44 | 顯示全部樓層
asdadqw2 發表于 2024-5-9 17:37
試過這樣寫,還是不行
unsigned char dat[5]={0};
dat[0] = dat1;

定義要寫在前邊,賦值要寫函數里面的吧。
main(){
dat[0] = dat1;
……
while(1);
}
回復

使用道具 舉報

ID:77589 發表于 2024-5-10 17:37 | 顯示全部樓層
asdadqw2 發表于 2024-5-9 17:37
試過這樣寫,還是不行
unsigned char dat[5]={0};
dat[0] = dat1;

可能是編譯器的問題,上面寫法,我用MDK就能編譯通過。
把unsigned char dat[5]={0};修改成unsigned char dat[5];試試。
回復

使用道具 舉報

ID:883242 發表于 2024-5-11 22:08 | 顯示全部樓層
Longan.Wang 發表于 2024-5-10 17:37
可能是編譯器的問題,上面寫法,我用MDK就能編譯通過。
把unsigned char dat[5]={0};修改成unsigned cha ...

c99標準里面是可以隨用隨定義變量的。

c89標準變量定義必須在實體語句,比如賦值,前面才可以,有了實體語句就不能再定義變量了。

C51是永遠都不可能支持c99標準了。
回復

使用道具 舉報

ID:517951 發表于 2024-5-31 08:10 | 顯示全部樓層
上面程序完全沒必要用到數組, 如果要HC595送20個, 30個,100個unsigned char 數據怎么辦, 單片機的棧空間要壓爆. 要送的數據長度是可變的怎么辦? c51是不支持可變數組的.

可以考慮傳指針+數據長度的方法/或者就傳一個unsigned char 參數, 也是能解決問題的.
回復

使用道具 舉報

ID:421260 發表于 2024-5-31 09:34 | 顯示全部樓層

這樣寫行
unsigned char dat[5]={0};//定義
unsigned char dat1,dat2,dat3,dat4,datL;
//下面幾行在程序中運行
dat[0] = dat1;
dat[1] = dat2;
dat[2] = dat3;
dat[3] = dat4;
dat[4] = datL;
回復

使用道具 舉報

ID:1121978 發表于 2024-5-31 10:55 | 顯示全部樓層
這種錯誤提示通常是因為在Keil中初始化數組時,dat1, dat2, dat3, dat4等變量的值可能無法直接獲取或不符合數據類型要求。你可以嘗試分別給數組dat的各個元素賦值來避免這個問題。你可以嘗試使用如下方式初始化數組:  dat[0] = dat1; dat[1] = dat2; dat[2] = dat3; dat[3] = dat4; dat[4] = datL; 這通常會避免一些編譯錯誤,希望對你有幫助!
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 天天爽爽 | 黄色片在线观看视频 | 国产精品一品二区三区的使用体验 | 91久久国产综合久久91精品网站 | 在线观看中文字幕 | 欧美亚洲天堂 | 国产对白videos麻豆高潮 | 日韩免费高清 | 亚洲欧美网站 | 福利网站在线观看 | 欧美大片一区二区 | 精品一区二区三区视频 | 日韩伦理视频 | av不卡一区 | 两性免费视频 | 97超碰在线免费观看 | 日本不卡在线 | 日韩免费在线 | 欧美在线视频播放 | av在线免费观看网站 | 黄色一级视频在线观看 | 黄色大片视频 | 五月婷婷色 | 自拍偷拍亚洲 | 日韩精品一二三 | 国产福利在线看 | 日本美女一级片 | 一级片在线免费观看 | 欧美一级在线观看 | 久热精品在线 | 欧美1区2区 | 日本精品视频在线 | 日韩亚洲欧美在线 | 欧美精品一区二区三区四区 | 免费看成人片 | 美日韩在线视频 | 日韩一级大片 | 免费性网站| 精品一区二区三 | 亚洲天堂网在线观看 | 香蕉视频导航 |