找回密码
 立即注册

QQ登录

只需一步,快速开始

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

学习一个单片机新知识点,74HC595驱动四位共阴数码管

[复制链接]
跳转到指定楼层
楼主
ID:224580 发表于 2023-8-17 15:40 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
最近学习辉芒微单片机,自己弄了一个驱动74HC595 四位共阴数码管,还在不断学习新知识。


  1. #include        "SYSCFG.h";
  2. #include         "FT62F21X.h";

  3. #define uchar unsigned char
  4. #define uint unsigned int
  5. uchar LedChar[]={
  6.         0xC0, 0xF9, 0xA4, 0xB0, 0x99, 0x92, 0x82, 0xF8,
  7.         0x80, 0x90, 0x88, 0x83, 0xC6, 0xA1, 0x86, 0x8E
  8.         };   //共阴数码管0-F真值表


  9. #define        Key1           PA2    //按键输入
  10. #define        smg_wei1   PA0    //数码管位选1
  11. #define        smg_wei2   PA1    //数码管位选2
  12. #define SER        PA3    //串行数据输入
  13. #define RCLK       PA4    //存储寄存器时钟
  14. #define SRCLK      PA5    //串行输入时钟

  15. uchar mode=0;
  16. //bit flags =0;
  17. uchar kk;

  18. void Hc595SendByte(uchar dat);
  19. //uint i;
  20. /*-------------------------------------------------
  21. * 函数名:DelayUs
  22. * 功能:  短延时函数 --16M-4T--大概快1%左右.
  23. * 输入:  Time延时时间长度 延时时长Time*2Us
  24. * 输出:  无
  25. -------------------------------------------------*/
  26. void DelayUs(unsigned char Time)
  27. {
  28.         unsigned char a;
  29.         for(a=0;a<Time;a++)
  30.         {
  31.                 NOP();
  32.         }
  33. }
  34. /*-------------------------------------------------
  35. * 函数名:DelayMs
  36. * 功能:  短延时函数 快1%
  37. * 输入: Time延时时间长度 延时时长Time ms
  38. * 输出: 无
  39. -------------------------------------------------*/
  40. void DelayMs(unsigned char Time)
  41. {
  42.         unsigned char a,b;
  43.         for(a=0;a<Time;a++)
  44.         {
  45.                 for(b=0;b<5;b++)
  46.                 {
  47.                          DelayUs(98);
  48.                 }
  49.         }
  50. }
  51. /*-------------------------------------------------
  52. * 函数名:DelayS
  53. * 功能:  短延时函数
  54. * 输入:  Time 延时时间长度 延时时长Time S
  55. * 输出:  无
  56. -------------------------------------------------*/
  57. void DelayS(unsigned char Time)
  58. {
  59.         unsigned char a,b;
  60.         for(a=0;a<Time;a++)
  61.         {
  62.                 for(b=0;b<10;b++)
  63.                 {
  64.                          DelayMs(100);
  65.                 }
  66.         }
  67. }

  68. /*******************************************************************************
  69. * 函数名         : Hc595SendByte(u8 dat)
  70. * 函数功能                   : 向74HC595发送一个字节的数据
  71. * 输入           : 无
  72. * 输出                  : 无
  73. *******************************************************************************/
  74. void Hc595SendByte(uchar dat)
  75. {
  76.         char a;
  77.         SRCLK=0;    //串行输入时钟
  78.         RCLK =0;    //存储寄存器时钟

  79.         for(a=0;a<8;a++)
  80.         {
  81.                 SER=dat>>7;
  82.                 dat<<=1;

  83.                 SRCLK=1;
  84.                 NOP();
  85.                 NOP();
  86.                 SRCLK=0;        
  87.         }

  88.         RCLK=1;
  89.         NOP();
  90.         NOP();
  91.         RCLK=0;
  92. }


  93. void POWER_INITIAL (void)
  94. {
  95.         OSCCON = 0B01110000;        //IRCF=111=16MHz/4T=4MHz,0.25us
  96.         INTCON = 0;                          //暂禁止所有中断

  97.         OPTION = 0;              // /PAPU  INTEDG T0CS T0SE PSA PS2 PS1 PS0
  98.     //PSRCA = 0;                                //00:4mA        01/10:8mA        11:28mA        bit[3:2]控制PA5源电流        bit[1:0]控制PA4源电流
  99.     //PSINKA = 0;                                //bit[1:0]        控制PA5和PA4 0:灌电流最小 1:灌电流最大
  100.     TRISA = 0B00000100;         //1:输入 0:输出 PA2为输入模式
  101.     PORTA = 0B00000100;         //1:PAx输出高电平        0:PAx输出低电平        PA2输出低电平 ,PA3输出高电平
  102.     WPUA =  0B00000100;         //1:使能PA口上拉        0:关闭PA口上拉  PA3 上拉

  103. }

  104. /*-------------------------------------------------
  105. * 函数名:main
  106. * 功能:  主函数
  107. * 输入:  无
  108. * 输出:  无
  109. --------------------------------------------------*/
  110. void main()
  111. {  
  112.      uchar i=0;
  113.          POWER_INITIAL();                //系统初始化
  114.      Hc595SendByte(LedChar[0]);                       
  115.         while(1)
  116.         {     

  117.         if(Key1==0)
  118.         {
  119.             DelayMs(10);
  120.             if(Key1==0)
  121.             {   
  122.                DelayMs(10);               
  123.                Hc595SendByte(LedChar[i]);
  124.                i++;              
  125.                if(i>=15)
  126.                {
  127.                   i=0;               
  128.                }                        
  129.             }
  130.             while(!Key1);               
  131.         }                     
  132.         }      
  133. }
复制代码

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

使用道具 举报

沙发
ID:1064915 发表于 2023-8-25 10:56 | 只看该作者
辉芒微单片机,不常用,有原理图最好
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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