欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

 找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

搜索
查看: 4322|回復(fù): 13
打印 上一主題 下一主題
收起左側(cè)

有沒有人會(huì)解釋一下這個(gè)用C語言指針實(shí)現(xiàn)的流水燈程序

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:891154 發(fā)表于 2021-7-15 16:52 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
10黑幣
#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; //使能選擇獨(dú)立 LED
ADDR3 = 1;
ADDR2 = 1;
ADDR1 = 1;
ADDR0 = 0;

while (1)
{
P0 = ~buf; //緩沖值取反送到 P0 口
for (i=0; i<20000; i++); //延時(shí)
ShiftLeft(&buf); //緩沖值左移一位
if (buf == 0) //如移位后為 0 則重賦初值
{
buf = 0X01;
         }
       }
}
void ShiftLeft(unsigned char *p)
{

*p = *p << 1;

}

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:808634 發(fā)表于 2021-7-16 08:06 | 只看該作者
P0口0x01左移,0000 00001 左移一位 0000  0010
回復(fù)

使用道具 舉報(bào)

板凳
ID:808634 發(fā)表于 2021-7-16 08:07 | 只看該作者
buf 為0x01 然后傳給指針,然后在void shifleft函數(shù)中左移
0000 0001 左移一位 0000 0010
回復(fù)

使用道具 舉報(bào)

地板
ID:332444 發(fā)表于 2021-7-16 08:10 | 只看該作者
指針有什么?給地址,讀內(nèi)容就是.
回復(fù)

使用道具 舉報(bào)

5#
ID:332444 發(fā)表于 2021-7-16 08:11 | 只看該作者

  1. void jw(unsigned int *n, unsigned char *y, unsigned char *t, unsigned char *shi, unsigned char *fen, unsigned char *miao)
  2. {/*時(shí)間日期進(jìn)位*/
  3.         if(*miao>=60)
  4.         {
  5.                 *miao=0;
  6.                 ++*fen;
  7.         }
  8.         if(*fen>=60)
  9.         {
  10.                 *fen=0;
  11.                 ++*shi;
  12.         }
  13.         if(*shi>=24)
  14.         {
  15.                 *shi=0;
  16.                 ++*t;
  17.         }
  18.         if(*t>nyt(*n,*y))
  19.         {
  20.                 ++*y;
  21.                 *t=1;
  22.         }
  23.         if(*y>12)
  24.         {
  25.                 ++*n;
  26.                 *y=1;
  27.         }
  28. }
復(fù)制代碼
回復(fù)

使用道具 舉報(bào)

6#
ID:689247 發(fā)表于 2021-7-16 08:55 | 只看該作者
&取地址符,讀取變量的地址,*指針,可以把地址中的數(shù)據(jù)讀出來。
指針指向的就是地址,函數(shù)ShiftLeft(unsigned char *p)入口參數(shù)是指針,所以要傳入一個(gè)地址。
&buf,就把buf的地址取了出來,(buf定義的時(shí)候系統(tǒng)會(huì)分配內(nèi)存地址,真正的數(shù)據(jù)是存放在地址中的)ShiftLeft(&buf),就是把buf的地址傳入ShiftLeft函數(shù)中,在ShiftLeft函數(shù)中*p所代表的可以理解為buf地址中的內(nèi)容,直接對(duì)地址中的內(nèi)容進(jìn)行移位,下次讀取buf就是移位后的BUF。
你也可以不用指針,用全局變量也可以,現(xiàn)階段可能好理解一點(diǎn)。
回復(fù)

使用道具 舉報(bào)

7#
ID:689247 發(fā)表于 2021-7-16 08:59 | 只看該作者
學(xué)單片機(jī)的同時(shí),可以把C語言好好學(xué)習(xí)一下,僅僅使用C51,可能對(duì)未來編程影響挺大。有時(shí)間還是把C從頭到尾系統(tǒng)的學(xué)一遍。我就吃這個(gè)虧
回復(fù)

使用道具 舉報(bào)

8#
ID:934353 發(fā)表于 2021-7-16 09:52 | 只看該作者
我覺得這注釋已經(jīng)挺詳細(xì)了來著,建議好好學(xué)一下C語言的指針
回復(fù)

使用道具 舉報(bào)

9#
ID:883242 發(fā)表于 2021-7-16 13:37 | 只看該作者
8051的指令體系就不適合用指針,不信你看看生成的匯編代碼,又笨又丑。
回復(fù)

使用道具 舉報(bào)

10#
ID:81196 發(fā)表于 2021-7-16 16:55 | 只看該作者
*p = *p << 1;右側(cè)的*p是吧數(shù)據(jù)取出來,<<1是將取出的數(shù)據(jù)左移一位,,*p=是將數(shù)據(jù)再寫入到指針指向的那個(gè)空間內(nèi)
回復(fù)

使用道具 舉報(bào)

11#
ID:748788 發(fā)表于 2021-7-16 17:20 | 只看該作者
將buf變量的存放地址以指針的方式傳遞給子程序shiftleft。本來這么簡(jiǎn)單的程序用不到指針,用指針反倒讓程序復(fù)雜化了。這么做大概是給初學(xué)者講解指針的
回復(fù)

使用道具 舉報(bào)

12#
ID:917614 發(fā)表于 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;        //無符號(hào)整形變量為I
unsigned char buf = 0x01;      //無符號(hào)字符buf為0x01

ENLED = 0; //使能選擇獨(dú)立 LED
ADDR3 = 1;
ADDR2 = 1;
ADDR1 = 1;  
ADDR0 = 0;

while (1)
{
P0 = ~buf; //緩沖值取反送到 P0 口
for (i=0; i<20000; i++); //延時(shí)
ShiftLeft(&buf); //緩沖值左移一位
if (buf == 0) //如移位后為 0 則重賦初值
{
buf = 0X01;
         }
       }
}
void ShiftLeft(unsigned char *p)
{

*p = *p << 1;  //指針

}
回復(fù)

使用道具 舉報(bào)

13#
ID:490652 發(fā)表于 2021-7-16 22:18 | 只看該作者
&buf是取了buf變量的地址,送入函數(shù)ShiftLeft,函數(shù)定義成*p,就代表在函數(shù)中對(duì)指針p的修改將是對(duì)該地址內(nèi)容的修改,而不是把變量?jī)?nèi)容復(fù)制過來。
回復(fù)

使用道具 舉報(bào)

14#
ID:928284 發(fā)表于 2021-11-29 07:24 | 只看該作者
cpu小白白 發(fā)表于 2021-7-16 08:55
&取地址符,讀取變量的地址,*指針,可以把地址中的數(shù)據(jù)讀出來。
指針指向的就是地址,函數(shù)ShiftLeft(unsi ...

說的非常好,受益了。
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表