欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136
標題:
有沒有人會解釋一下這個用C語言指針實現的流水燈程序
[打印本頁]
作者:
3042974988
時間:
2021-7-15 16:52
標題:
有沒有人會解釋一下這個用C語言指針實現的流水燈程序
#include <reg52.h>
sbit ADDR0 = P1^0;
sbit ADDR1 = P1^1;
sbit ADDR2 = P1^2;
sbit ADDR3 = P1^3;
sbit ENLED = P1^4;
void ShiftLeft(unsigned char *p);
void main()
{
unsigned int i;
unsigned char buf = 0x01;
ENLED = 0; //使能選擇獨立 LED
ADDR3 = 1;
ADDR2 = 1;
ADDR1 = 1;
ADDR0 = 0;
while (1)
{
P0 = ~buf; //緩沖值取反送到 P0 口
for (i=0; i<20000; i++); //延時
ShiftLeft(&buf); //緩沖值左移一位
if (buf == 0) //如移位后為 0 則重賦初值
{
buf = 0X01;
}
}
}
void ShiftLeft(unsigned char *p)
{
*p = *p << 1;
}
作者:
七禾頁
時間:
2021-7-16 08:06
P0口0x01左移,0000 00001 左移一位 0000 0010
作者:
七禾頁
時間:
2021-7-16 08:07
buf 為0x01 然后傳給指針,然后在void shifleft函數中左移
0000 0001 左移一位 0000 0010
作者:
xianfajushi
時間:
2021-7-16 08:10
指針有什么?給地址,讀內容就是.
作者:
xianfajushi
時間:
2021-7-16 08:11
void jw(unsigned int *n, unsigned char *y, unsigned char *t, unsigned char *shi, unsigned char *fen, unsigned char *miao)
{/*時間日期進位*/
if(*miao>=60)
{
*miao=0;
++*fen;
}
if(*fen>=60)
{
*fen=0;
++*shi;
}
if(*shi>=24)
{
*shi=0;
++*t;
}
if(*t>nyt(*n,*y))
{
++*y;
*t=1;
}
if(*y>12)
{
++*n;
*y=1;
}
}
復制代碼
作者:
cpu小白白
時間:
2021-7-16 08:55
&取地址符,讀取變量的地址,*指針,可以把地址中的數據讀出來。
指針指向的就是地址,函數ShiftLeft(unsigned char *p)入口參數是指針,所以要傳入一個地址。
&buf,就把buf的地址取了出來,(buf定義的時候系統會分配內存地址,真正的數據是存放在地址中的)ShiftLeft(&buf),就是把buf的地址傳入ShiftLeft函數中,在ShiftLeft函數中*p所代表的可以理解為buf地址中的內容,直接對地址中的內容進行移位,下次讀取buf就是移位后的BUF。
你也可以不用指針,用全局變量也可以,現階段可能好理解一點。
作者:
cpu小白白
時間:
2021-7-16 08:59
學單片機的同時,可以把C語言好好學習一下,僅僅使用C51,可能對未來編程影響挺大。有時間還是把C從頭到尾系統的學一遍。我就吃這個虧
作者:
開心就好hhhh
時間:
2021-7-16 09:52
我覺得這注釋已經挺詳細了來著,建議好好學一下C語言的指針
作者:
Hephaestus
時間:
2021-7-16 13:37
8051的指令體系就不適合用指針,不信你看看生成的匯編代碼,又笨又丑。
作者:
shumivan
時間:
2021-7-16 16:55
*p = *p << 1;右側的*p是吧數據取出來,<<1是將取出的數據左移一位,,*p=是將數據再寫入到指針指向的那個空間內
作者:
wwh2382
時間:
2021-7-16 17:20
將buf變量的存放地址以指針的方式傳遞給子程序shiftleft。本來這么簡單的程序用不到指針,用指針反倒讓程序復雜化了。這么做大概是給初學者講解指針的
作者:
wfl1314520
時間:
2021-7-16 21:05
#include <reg52.h> //定義52的底庫
sbit ADDR0 = P1^0; //ADDR0的引腳口為p1.0
sbit ADDR1 = P1^1; //ADDR1的引腳口為p1.1
sbit ADDR2 = P1^2; //ADDR2的引腳口為p1.2
sbit ADDR3 = P1^3; //ADDR3的引腳口為p1.3
sbit ENLED = P1^4; //ENLED的引腳口為p1.4
void ShiftLeft(unsigned char *p);
void main()
{
unsigned int i; //無符號整形變量為I
unsigned char buf = 0x01; //無符號字符buf為0x01
ENLED = 0; //使能選擇獨立 LED
ADDR3 = 1;
ADDR2 = 1;
ADDR1 = 1;
ADDR0 = 0;
while (1)
{
P0 = ~buf; //緩沖值取反送到 P0 口
for (i=0; i<20000; i++); //延時
ShiftLeft(&buf); //緩沖值左移一位
if (buf == 0) //如移位后為 0 則重賦初值
{
buf = 0X01;
}
}
}
void ShiftLeft(unsigned char *p)
{
*p = *p << 1; //指針
}
作者:
geyobing
時間:
2021-7-16 22:18
&buf是取了buf變量的地址,送入函數ShiftLeft,函數定義成*p,就代表在函數中對指針p的修改將是對該地址內容的修改,而不是把變量內容復制過來。
作者:
lsg0280
時間:
2021-11-29 07:24
cpu小白白 發表于 2021-7-16 08:55
&取地址符,讀取變量的地址,*指針,可以把地址中的數據讀出來。
指針指向的就是地址,函數ShiftLeft(unsi ...
說的非常好,受益了。
歡迎光臨 (http://m.raoushi.com/bbs/)
Powered by Discuz! X3.1