找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索

小白菜的学习之路系列之四—欢天喜地摇摇棒

查看数: 5144 | 评论数: 4 | 收藏 4
关灯 | 提示:支持键盘翻页<-左 右->
    组图打开中,请稍候......
发布时间: 2014-12-20 18:22

正文摘要:

一 背景话说年就要过去了,某人的生日也快到了。送个什么东西好呢?小白菜开始思考了,上次送是一条小白菜自己设计定做的项链(银的,不贵的,同学们可以试一下哦,保证让小女生感动的不得了……咳咳,有点跑题了。 ...

回复

ID:71861 发表于 2015-1-8 17:06
不错不错
ID:70650 发表于 2014-12-20 18:27
Delay.c文件:
  1. /*
  2. ================================================================================
  3. * 开发环境  : Keil4
  4. * 文件名    : Delay.C
  5. * 程序员    : 3htech
  6. * 开发时间  : 2012-06-08
  7. * 描述      : 软件延时函数驱动。不同内核的单片机、晶振、分频数、指令所用的周期数不同
  8. *           :都会导致延时时间的不同。所以本驱动需要进行移植修改。
  9. * 生存条件  :
  10. ===============================================================================
  11. //修 改  :
  12. //日 期  :
  13. //描  述  :
  14. ================================================================================
  15. ================================================================================
  16. */

  17. //------------------------------    程序开关    ------------------------------//
  18. //----------------------------------------------------------------------------//
  19. // 名称 :
  20. // 功能 :
  21. //----------------------------------------------------------------------------//


  22. //------------------------------ 系统头文件包含 ------------------------------//

  23. //----------------------------- 自定义头文件包含 -----------------------------//
  24. #include"Delay.h"



  25. ////////////////////////////////////////////////////////////////////////////////
  26. //                            本文件专用函数定义                              //
  27. ////////////////////////////////////////////////////////////////////////////////
  28. //----------------------------------------------------------------------------//
  29. //                      xxxx函数 (仅限本文件使用)
  30. //函数名称:
  31. //函数功能:
  32. //入口参数:无
  33. //出口参数:无
  34. //重要说明:无
  35. //----------------------------------------------------------------------------//
  36. //修改日期:
  37. //修改人员:
  38. //修改内容:
  39. //----------------------------------------------------------------------------//

  40. ////////////////////////////////////////////////////////////////////////////////
  41. //                          本文件专用函数定义结束                            //
  42. ////////////////////////////////////////////////////////////////////////////////







  43. ////////////////////////////////////////////////////////////////////////////////
  44. //                             对外服务函数定义                               //
  45. ////////////////////////////////////////////////////////////////////////////////

  46. //----------------------------------------------------------------------------//
  47. //                      软件延时n个毫秒函数 (对外提供服务)
  48. //函数名称:Delay_MS
  49. //函数功能:STC90C52,Fcpu = 12MHz,12T条件下,精确的软件延时n个毫秒。
  50. //入口参数:n,8位无符号数,延时的毫秒数。n的最大值为255,即255毫秒。小心您的看门狗。
  51. //出口参数:无。
  52. //重要说明:
  53. //编写日期:2012-11-29
  54. //----------------------------------------------------------------------------//
  55. extern void Delay_MS(uint8 n)
  56. {
  57.     uint8 i;
  58.     for( ; n > 0; n--)
  59.     {
  60.         for(i = 200; i > 0; i--)
  61.         {
  62.             // 空。
  63.         }
  64.         for(i = 200; i > 0; i--)
  65.         {
  66.             // 空。
  67.         }
  68.         for(i = 94; i > 0; i--)
  69.         {
  70.             // 空。
  71.         }
  72.     }
  73. }

  74. //----------------------------------------------------------------------------//
  75. //                      软件延时n个毫秒函数 (对外提供服务)
  76. //函数名称:Delay_us
  77. //函数功能:STC90C52,Fcpu = 12MHz,12T条件下,精确的软件延时n x 50个毫秒。
  78. //入口参数:n,8位无符号数,延时50微秒的倍数。n的最大值为255,即255 x 50微秒秒。
  79. //出口参数:无。
  80. //重要说明:
  81. //编写日期:2012-11-29
  82. //测试结果:
  83. //  期望值-->实际值:
  84. //   50us -->  63us
  85. //  100us --> 112us
  86. //  150us --> 161us
  87. //  200us --> 210us
  88. //  250us --> 259us
  89. //  300us --> 308us
  90. //  400us --> 406us
  91. //  500us --> 504us
  92. //----------------------------------------------------------------------------//
  93. extern void Delay_50us(uint8 n)
  94. {
  95.     uint8 i;

  96.     if(0 == n)
  97.     {
  98.         return;
  99.     }

  100.     for( ; n > 0; n--)
  101.     {
  102.         for(i = 20; i > 0; i--)
  103.         {
  104.             // 空。
  105.         }
  106.     }
  107. }
  108. ////////////////////////////////////////////////////////////////////////////////
  109. //                           对外服务函数定义结束                             //
  110. ////////////////////////////////////////////////////////////////////////////////



  111. //------------------------------    文件结束    ------------------------------//
复制代码
ID:70650 发表于 2014-12-20 18:26
TypeRedefine.H文件:
  1. /*
  2. ********************************************************************************
  3. *                                     WIT
  4. *                             淄博威特电气有限公司
  5. *
  6. *     地址:山东省淄博市张店区淄博市高新技术开发区政通路135号高创中心E座2层
  7. *                  (c) Copyright 2012,   All Rights Reserved
  8. *                                www.weitedq.com
  9. * 开发环境  : Keil4
  10. * 文件名    : TypeRedefine.H
  11. * 程序员    : 3htech
  12. * 开发时间  : 2012-06-04
  13. * 描述      : 类型重新定义。
  14. * 生存条件  : 自由存在。
  15. *-------------------------------------------------------------------------------
  16. * 修 改    :
  17. * 日 期    :
  18. * 描  述    :
  19. *-------------------------------------------------------------------------------
  20. ********************************************************************************
  21. */


  22. //------------------------------    文件开关    ------------------------------//
  23. // 防止文件包含时多次编本文件,与本文件结尾处的endif对应。
  24. #ifndef     _TYPEREDEFINE_H_
  25.     #define _TYPEREDEFINE_H_
  26. //----------------------------------------------------------------------------//




  27. //------------------------------ 系统头文件包含 ------------------------------//
  28. #include<stdio.H>       // 为了使用NULL的定义。

  29. //----------------------------- 自定义头文件包含 -----------------------------//
  30. //无
  31. //--------------------------------  类型声明  --------------------------------//
  32. //----------------------------------------------------------------------------//
  33. //类型名称:
  34. //类型功能:
  35. //成员详解:
  36. //重要说明:
  37. //----------------------------------------------------------------------------//


  38. //------------------------------  全局变量定义  ------------------------------//
  39. //无


  40. //--------------------------------------------------------------//
  41. //                     类型重新定义
  42. //名称:类型重新定义
  43. //功能:
  44. //      51系列单片机应用下的类型重新定义。
  45. //      使用的是8位单片机,因此char是8位,int为16位,long为32位
  46. //--------------------------------------------------------------//

  47. typedef  bit  bdata   uint1;    //  无符号1 位整型变量需要加前缀u1

  48. typedef unsigned char uint8;    // 无符号8 位整型,前缀u8
  49. typedef   signed char  int8;    // 有符号8 位整型,前缀i8

  50. typedef unsigned int  uint16;   // 无符号16位整型,前缀u16
  51. typedef   signed int   int16;   // 有符号16位整型,前缀i16

  52. typedef unsigned long uint32;   // 无符号32位整型,前缀u32
  53. typedef   signed long  int32;   // 有符号32位整型,前缀i32

  54. typedef  float         flt32;   // 单精度浮点数(32位长度),前缀f32



  55. //-------------------------------   宏定义   ---------------------------------//
  56. //----------------------------------------------------------------------------//
  57. //宏名    :TURE, FALSE
  58. //功能    :错误标志或操作完成标志。
  59. //重要说明:无
  60. //----------------------------------------------------------------------------//
  61. #ifndef TRUE
  62.     #define TRUE  0
  63. #endif

  64. #ifndef FALSE
  65.     #define FALSE 1
  66. #endif
  67. //------------------------------    文件开关    ------------------------------//
  68. // 防止文件包含时多次编本文件,与本文件开头处的 #ifndef 对应。
  69. #endif
  70. //----------------------------------------------------------------------------//


  71. //------------------------------    文件结束    ------------------------------//
复制代码
ID:70650 发表于 2014-12-20 18:24
主程序预览:
  1. #include "Config.H"


  2. //========================================================================//
  3. //                              惯性开关                                  //
  4. //========================================================================//
  5. sbit InertiaSwitch = P2^7;  // 为0时表示开关闭合了。
  6. //========================================================================//
  7. //                      显示允许函数 (对外提供服务)
  8. //函数名称:App_YYB_Disp_Enable ()
  9. //函数功能:检查当前是否允许显示
  10. //入口参数:无。
  11. //出口参数:TRUE = 运动到最左边,口线电平被拉低,允许启动显示。FALSE = 其他位置,不允许显示。
  12. //重要说明:
  13. //编写日期:2012-11-29
  14. //测试结果:
  15. //========================================================================//
  16. // 函数返回值:
  17. extern uint8 App_YYB_Disp_Enable(void)
  18. {
  19.     // 闭合后口线电平为低
  20.     if(0 == InertiaSwitch)
  21.     {
  22.         Delay_MS(30);   // 在刚触发时,摇摇棒刚行进到最左边,此时速度很低,因而若立即启动显示,则必然会使字显示的很少,所以延时一段时间。
  23.                         // 在摇摇棒速度上来之后再启动显示。

  24.         return TRUE;
  25.     }
  26.     else
  27.     {
  28.         return FALSE;
  29.     }
  30. }

  31. //========================================================================//
  32. //                              显示部分                                  //
  33. //========================================================================//


  34. //========================================================================//
  35. //变量名称:u8Picture
  36. //变量功能:保存需要显示的数据
  37. //作用域  :全局变量、仅限本文件
  38. //重要说明:,仅适用于本程序。
  39. //========================================================================//

  40. static uint8 code u8Picture[4][32] =
  41. {

  42.     0xFF,0xFF,0xFF,0xEF,0xFF,0xEF,0xFE,0xEF,0x00,0x6F,0x80,0xEF,0xEE,0xEF,0xEE,0xEF,    // 与
  43.     0xEE,0xEF,0xEE,0xEF,0xEE,0xCF,0xEE,0xED,0xEE,0xFC,0xCE,0x01,0xFC,0x03,0xFE,0xFF,

  44.     0xFF,0xFF,0xFE,0xFF,0xFE,0xFF,0xFE,0xFF,0xBE,0xFF,0xBE,0xFF,0xBE,0xFD,0xBE,0xFD,    // 子
  45.     0xB8,0x00,0xB0,0x01,0xA6,0xFF,0x8E,0xFF,0x1E,0xFF,0xBE,0xFF,0xFC,0xFF,0xFE,0xFF,

  46.     0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x80,0x01,0xB7,0xFF,0xB4,0x07,0xB6,0x0F,0xB6,0xEF,    // 同
  47.     0xB6,0xEF,0xB6,0x07,0xA4,0x0D,0xB6,0xFD,0x80,0x00,0x00,0x01,0xBF,0xFF,0xFF,0xFF,

  48.     0xFF,0xFF,0xFB,0xDF,0xF7,0xBF,0xCE,0x00,0x18,0x01,0xBD,0xFF,0xFF,0xFF,0xFB,0xFF,    // 行
  49.     0xBB,0xFF,0xBB,0xFD,0xBB,0xFD,0xB8,0x00,0xB8,0x01,0x3B,0xFF,0xB3,0xFF,0xFB,0xFF,

  50. };

  51. //========================================================================//
  52. //                      显示一列数据函数 (对外提供服务)
  53. //函数名称:App_YYB_Disp_Colum ()
  54. //函数功能:显示一列数据。
  55. //入口参数:u8UpByte为16位的上半部分数据,u8DownByte为下半部分数据
  56. //出口参数:无。
  57. //重要说明:
  58. //编写日期:2012-11-29
  59. //测试结果:
  60. //========================================================================//
  61. static void App_YYB_Disp_Colum(uint8 u8UpByte, uint8 u8DownByte)
  62. {
  63.     P1 = u8UpByte;
  64.     P0 = u8DownByte;

  65.     Delay_50us(10);  // 延时500us,可自行调节

  66.     P1 = 0xFF;      // 关闭显示
  67.     P0 = 0xFF;
  68. }
  69. //========================================================================//
  70. //                      显示图像函数 (对外提供服务)
  71. //函数名称:App_YYB_Disp()
  72. //函数功能:显示一幅图片。汉字点阵实际上也是一幅图片
  73. //入口参数:u8disp_Enable:是否起动显示。TRUE = 允许起动显示,FALSE = 不允许显示。
  74. //出口参数:无。
  75. //重要说明:
  76. //编写日期:2012-11-29
  77. //测试结果:
  78. //========================================================================//
  79. extern void App_YYB_Disp(uint8 u8disp_Enable)
  80. {
  81.     uint8 i, k;

  82.     if(FALSE == u8disp_Enable)
  83.     {
  84.         return; // 一个函数最好只有一个出口,显然,这里不符合要求。
  85.     }


  86.     for(i = 0; i < 4; i++)  // 要显示的4个汉字
  87.     {
  88.         for(k = 0; k < 16; k++) // 这里,一个汉字有16列
  89.         {
  90.             App_YYB_Disp_Colum(u8Picture[i][2*k], u8Picture[i][2*k + 1]);
  91.         }

  92.         Delay_MS(1);
  93.     }

  94.     Delay_MS(20);
  95. }
  96. //========================================================================//
  97. //                               主函数                                   //
  98. //========================================================================//
  99. void main(void)
  100. {
  101.     uint8 u8State;

  102.     while(1)
  103.     {
  104.         u8State = App_YYB_Disp_Enable();

  105.         App_YYB_Disp(u8State);
  106.     }
  107. }




复制代码

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

Powered by 单片机教程网

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