找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 5292|回复: 1
打印 上一主题 下一主题
收起左侧

用单片机C语言的结构体实现字节、位操作

[复制链接]
跳转到指定楼层
楼主
凌阳出的教程,用来学习单片机c语言非常不错,主要讲解了结构体实现字节、位操作,下面是教程的截图,完整版本请下载本帖的51黑附件。




源码:

  1. /* ========================================================================= */
  2. /* The information contained herein is the exclusive property of             */
  3. /* Sunplus Technology Co. And shall not be distributed, reproduced,          */
  4. /* or disclosed in whole in part without prior written permission.           */
  5. /*             (C) COPYRIGHT 2004 SUNPLUS TECHNOLOGY CO.                     */
  6. /*                    ALL RIGHTS RESERVED                                    */
  7. /* The entire notice above must be reproduced on all authorized copies.      */
  8. /* ========================================================================= */
  9. /*                                                                                                                                                          */
  10. /* ========================================================================= */
  11. /* Project Name  : AN_SPMC75_0202                                                                             */
  12. /* File Name     : main.c                                                                                                          */
  13. /* Description   : Easy-to-Use Byte and Bit mode operation using C data          */
  14. /*                 structure                                                                            */
  15. /* Processor     : SPMC75F2413A                                                                                             */
  16. /* Tools             : u'nSP IDE tools v1.18.1A or later version                                 */
  17. /* ========================================================================= */
  18. /* Revision                                                                                                                                         */
  19. /* ========================================================================= */
  20. /* Version       :  1.00                                                                                                            */
  21. /* Date                         : 9.2                                                                                                 */
  22. /* Modified by   :        更换正规的文件头和最新的头文件                                                         */
  23. /* Description         :                                                                                                                     */
  24. /* ========================================================================= */

  25. #include        "AN_SPMC75_0202.H"

  26. //===========================================================================
  27. /*
  28. .Note:
  29.         将UInt16型变量variable强制转换为GENBITSDEF类型的指针,
  30.         那么这样一个指针ptr就可以具有GENBITSDEF类型所定义的
  31.         属性和成员,对其操作就可以实现对ptr所指存储空间进行操作。
  32. */
  33. #define        ptr        ((volatile GENTYPEDEF *)(&variable))        //普通变量强转换类型

  34. main()
  35. {
  36.         UInt16 variable = 0;        //UInt16 变量定义
  37.         GENBITSDEF        sBits;                //自定义类型GENBITSDEF 变量定义
  38.         GENBYTEDEF        sByte;                //自定义类型GENBYTEDEF 变量定义
  39.         GENTYPEDEF        sMixb;                //自定义类型GENTYPEDEF 变量定义

  40.         P_IOD_Attrib->W = 0xFFFF;        //IOD初始化
  41.         P_IOD_Dir->W        = 0xFFFF;
  42.         P_IOD_Buffer->W        = 0xFFFF;
  43.         P_IOD_Data->W        = 0x0000;

  44.         sBits.W = 0xA5FF;                //字(Word)操作
  45.         sBits.B.bit0  = 0;                //位(Bit)操作
  46.         sBits.B.bit15 = 0;                //位(Bit)操作

  47.         sByte.W = 0xA5FF;                //字(Word)操作
  48.         sByte.B.byte0 = 0xA5;        //字节(Byte)操作
  49.         sByte.B.byte1 = 0xFF;        //字节(Byte)操作

  50.         sMixb.Word = 0xA5FF;        //字(Word)操作
  51.         sMixb.Bits.bit14 = 1;        //位(Bit)操作
  52.         sMixb.Bits.bit15 = 0;        //位(Bit)操作
  53.         sMixb.Byte.byte0 = 0;        //字节(Byte)操作
  54.         sMixb.Byte.byte1 = 0;        //字节(Byte)操作

  55.         ptr->Word = 0x90Fe;        //转型后变量的操作方式
  56.         ptr->Bits.bit0  = 1;
  57.         ptr->Bits.bit15 = 0;
  58.         ptr->Byte.byte0 = 0xFF;
  59.         ptr->Byte.byte1 = 0x00;


  60.         while(1)
  61.         {
  62.                 LEDCHG->Byte.byte0 = 0xA5;        //对硬件(IOD)的字节(Byte)操作
  63.                 LEDCHG->Byte.byte0 = 0x5A;

  64.                 LEDCHG->Byte.byte1 = 0xA5;
  65.                 LEDCHG->Byte.byte1 = 0x5A;

  66.                 LEDCHG->Byte.byte0 = 0x00;
  67.                 LEDCHG->Byte.byte0 = 0xFF;

  68.                 LEDCHG->Byte.byte1 = 0x00;
  69.                 LEDCHG->Byte.byte1 = 0xFF;

  70.                 LEDCHG->Word           = 0x00;        //对硬件(IOD)的字(Word)操作

  71.                 LEDCHG->Bits.bit0 = 1;                //对硬件(IOD)的位(Bit)操作
  72.                 LEDCHG->Bits.bit0 = 0;

  73.                 LEDCHG->Bits.bit5 = 1;
  74.                 LEDCHG->Bits.bit5 = 0;

  75.                 LEDCHG->Bits.bit10 = 1;
  76.                 LEDCHG->Bits.bit10 = 0;

  77.                 LEDCHG->Bits.bit15 = 1;
  78.                 LEDCHG->Bits.bit15 = 0;
  79.         }
  80. }
复制代码

完整教程和源码下载:
用C语言的结构体实现字节、位操作.rar (305.49 KB, 下载次数: 46)


分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:180246 发表于 2017-3-22 15:08 | 只看该作者
好资料,51黑有你更精彩
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表