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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 3694|回復: 13
打印 上一主題 下一主題
收起左側

有沒有人會解釋一下這個用C語言指針實現的流水燈程序

[復制鏈接]
跳轉到指定樓層
樓主
ID:891154 發表于 2021-7-15 16:52 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
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; //使能選擇獨立 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;

}

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

5#
ID:332444 發表于 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. {/*時間日期進位*/
  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. }
復制代碼
回復

使用道具 舉報

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

使用道具 舉報

7#
ID:689247 發表于 2021-7-16 08:59 | 只看該作者
學單片機的同時,可以把C語言好好學習一下,僅僅使用C51,可能對未來編程影響挺大。有時間還是把C從頭到尾系統的學一遍。我就吃這個虧
回復

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

12#
ID:917614 發表于 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;  //指針

}
回復

使用道具 舉報

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

使用道具 舉報

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

說的非常好,受益了。
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 天天操妹子 | 亚洲精品中文在线 | 偷拍自拍第一页 | 欧美黄色片 | 国产视频久久久 | 日韩中文字幕在线视频 | 日韩在线中文 | 欧美日韩专区 | 久久久久久免费毛片精品 | 免费黄色的视频 | 人人做人人澡人人爽欧美 | 久久久久久久综合 | 免费黄色录像视频 | 一区二区三区在线观看视频 | www.狠狠干 | 国产精品毛片av | 中文字幕 国产 | 亚洲一区二区精品 | 91色在线视频| 日韩免费电影 | 日韩欧美一级片 | 人人澡人人射 | 北条麻妃99精品青青久久主播 | 福利视频网址 | 91精品国产综合久久久久 | 亚洲色图在线观看 | 在线观看国产视频 | 国产精品99久久久久久宅男 | 精品日韩一区 | 中文字幕免费在线 | 久久aⅴ乱码一区二区三区 亚洲欧美综合精品另类天天更新 | 欧美专区在线视频 | 欧美一区二区三区的 | 手机在线一区二区三区 | 国产精品亚洲一区二区三区在线观看 | 免费观看av| 日韩av在线一区二区 | 欧美激情视频网站 | 在线免费观看欧美 | 在线播放国产一区二区三区 | 在线看91 |