找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 542|回复: 0
收起左侧

FD650b的单片机驱动程序

[复制链接]
ID:20012 发表于 2024-4-5 14:36 | 显示全部楼层 |阅读模式
FD650b驱动
  1. #include "my_fd650b.h"
  2. #include"stc15f2k60s2.h"
  3. #include"dingshiqi.h"
  4. u8 key_fd650b_data = 0;
  5. sbit din  = P3^0;
  6. sbit sclk = P3^1;
  7. sbit FD650b_SDA_READ = P3^0;

  8. #define FD650b_SCL_SET()        {sclk = 1;}
  9. #define FD650b_SCL_CLR()        {sclk = 0;}

  10. #define FD650b_SDA_SET()        {din = 1;}
  11. #define FD650b_SDA_CLR()        {din = 0;}
  12. /* the numbering of the frontpanel LED:
  13.            --0--
  14.          5|     |1
  15.            --6--
  16.          4|     |2
  17.            --3-- .7
  18. */

  19. u8 code FD650b_SegCode[]= {0x3F, 0x06, 0x5B, 0x4F, 0x66, 0x6D, 0x7D, 0x07, 0x7F, 0x6F, 0x77, 0x7C, 0x39, 0x5E, 0x79, 0x71};         //共阴段码

  20. void dela_xus(u8 i)
  21. {
  22.          u8 j,k;
  23.         for(k=0;k<i;k++)for(j=0;j<10;j++);
  24. }
  25. void FD650b_Start(void)
  26. {
  27. //        FD650_SDA_D_OUT();         //SDA输出模式
  28.         FD650b_SDA_SET();
  29.         FD650b_SCL_SET();
  30.         //FD650_DELAY();
  31.         dela_xus(2);
  32.         FD650b_SDA_CLR();
  33.         //FD650_DELAY();
  34.         dela_xus(2);
  35.         FD650b_SCL_CLR();
  36. }
  37. void FD650b_Stop(void)
  38. {
  39. //        FD650_SDA_D_OUT();         //SDA输出模式
  40.         FD650b_SDA_CLR();
  41.         
  42.         dela_xus(2);
  43.         FD650b_SCL_SET();

  44.         dela_xus(2);
  45.         FD650b_SDA_SET();

  46.         dela_xus(2);
  47. //        FD650_SDA_D_IN();                //SDA输入模式
  48. }

  49. void FD650b_WriteOneByte(u8 WriteByte)
  50. {
  51.         u8 i;

  52.         for(i = 0; i != 8; i++)
  53.         {
  54.                 if(WriteByte & 0x80)
  55.                 {
  56.                         FD650b_SDA_SET();
  57.                 }
  58.                 else
  59.                 {
  60.                         FD650b_SDA_CLR();
  61.                 }
  62.          
  63.                  dela_xus(2);
  64.                 FD650b_SCL_SET();
  65.                 WriteByte <<= 1;
  66.         
  67.                 dela_xus(2);
  68.                   FD650b_SCL_CLR();
  69.         }

  70.         FD650b_SDA_SET();

  71.         dela_xus(2);
  72.         FD650b_SCL_SET();

  73.         dela_xus(2);
  74.         FD650b_SCL_CLR();
  75. }
  76. void FD650b_SDA_D_IN(){                 //SDA输入模式

  77.         FD650b_Start();
  78.         FD650b_WriteOneByte(0x4f);        //68H,6AH,6CH,6EH对应4个数码管

  79. }        
  80. u8 FD650b_ReadOneByte(void)
  81. {
  82.         u8 i, ReadByte = 0;
  83.         
  84.         FD650b_SDA_D_IN();                //SDA输入模式
  85.         FD650b_SDA_SET();
  86.         for(i = 0; i != 8; i++)
  87.         {
  88.                 dela_xus(2);
  89.                 FD650b_SCL_SET();
  90.                 dela_xus(2);
  91.                 ReadByte <<= 1;
  92.                
  93.                 if(FD650b_SDA_READ) ReadByte++;
  94.                 FD650b_SCL_CLR();
  95.         }
  96.         FD650b_SDA_SET();
  97.         dela_xus(2);
  98.         FD650b_SCL_SET();
  99.         dela_xus(2);
  100.         FD650b_SCL_CLR();
  101.         return ReadByte;
  102. }

  103. void my_FD650_WriteCommand(u8 comm,u8 dat)
  104. {
  105.         FD650b_Start();
  106.         FD650b_WriteOneByte(comm);        //68H,6AH,6CH,6EH对应4个数码管
  107.         FD650b_WriteOneByte(dat);
  108.         FD650b_Stop();
  109. }
  110. void my_FD650_Display(u8 Data1, u8 Data2, u8 Data3, u8 Data4, u8 Brightness)//FD650b_DispSegCode
  111. {
  112.         my_FD650_WriteCommand(0x48 , 0x11);
  113. //        my_FD650_WriteCommand(0x48 , Brightness);
  114.         my_FD650_WriteCommand(0x68 , FD650b_SegCode[Data1]); //FD650_DIG0 = 0x1400
  115.         my_FD650_WriteCommand(0x6a , FD650b_SegCode[Data2]); //FD650_DIG1 = 0x1500
  116.         my_FD650_WriteCommand(0x6c , FD650b_SegCode[Data3]); //FD650_DIG2 = 0x1600
  117.         my_FD650_WriteCommand(0x6e , FD650b_SegCode[Data4]); //FD650_DIG3 = 0x1700
  118. }
  119. /*
  120.   0x44-0x7f有效,不按下也有码输出,是之前码的,有按下时+0X40

  121. */
  122. void read_fd650key()
  123. {
  124.    u8 key_fd650 ;
  125.    key_fd650b_data = 0;
  126.    key_fd650 = FD650b_ReadOneByte();

  127.    
  128.         switch(key_fd650){
  129.            case 0x6f:
  130.                   key_fd650b_data = 1;
  131.            break;
  132.            case 0x47:
  133.                   key_fd650b_data = 2;
  134.            break;
  135.            case 0x5f:
  136.                   key_fd650b_data = 3;
  137.            break;
  138.            case 0x67:
  139.                   key_fd650b_data = 4;
  140.            break;
  141.            case 0x57:
  142.                   key_fd650b_data = 5;
  143.            break;
  144.            case 0x4f:
  145.                   key_fd650b_data = 6;
  146.            break;
  147.           default: break;
  148.         }
  149.            my_FD650_WriteCommand(0x48 , 0x11);
  150. //        my_FD650_WriteCommand(0x48 , Brightness);
  151.         my_FD650_WriteCommand(0x68 , FD650b_SegCode[key_fd650b_data ]); //FD650_DIG0 = 0x1400
  152.         my_FD650_WriteCommand(0x6a , FD650b_SegCode[2]); //FD650_DIG1 = 0x1500
  153.         my_FD650_WriteCommand(0x6c , FD650b_SegCode[key_fd650 >> 4]); //FD650_DIG2 = 0x1600
  154.         my_FD650_WriteCommand(0x6e , FD650b_SegCode[key_fd650 & 0x0f]); //FD650_DIG3 = 0x1700

  155. }
复制代码

my_fd650b.h
  1. #ifndef __MY_FD650B_H
  2. #define __MY_FD650B_H
  3. #define         u8  unsigned char
  4. #define         u16 unsigned int
  5. #define         u32 unsigned long
  6. void read_fd650key();
  7. void my_FD650_Display(u8 Data1, u8 Data2, u8 Data3, u8 Data4, u8 Brightness);//FD650b_DispSegCode
  8. #endif
复制代码





回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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