[KungFu8位 MCU] LED数码管点亮

[复制链接]
 楼主| 小明的同学 发表于 2023-3-23 20:10 | 显示全部楼层 |阅读模式
  1. /*************************************************************************************
  2. * KF8F系列单片机开发板演示程序
  3. * 标         题: LED硬件驱动
  4. * 项  目  名: 13-LED-Drive_TEST
  5. * 开发环境:ChipON IDE
  6. * 版          本: V1.0 (2015/10/09)
  7. * 使用芯片:KF8F4156
  8. * 作          者:上海芯旺微电子技术有限公司
  9. * 功能简述: 实现LED显示的开启和关闭,实现模拟定时下的计时累加
  10. *
  11. * 跳线接法:需给单片机供电,同时连接JP2 以及码输出P3口和段输出P00 P01 P03 P04,
  12. *                                可以连接P12和J21  当LED显示时灭灯,关闭时亮灯
  13. * 特殊说明:这里采用LED共阴极模块,同时电源应该选择5V工作。
  14. *************************************************************************************/
  15. #include<KF8F4156.h>


  16. //0x80 1段共阴  0x83 1段共阳;
  17. //0x84 2段共阴  0x87 2段共阳;
  18. //0x88 3段共阴  0x8B 3段共阳;
  19. //0x8C 4段共阴  0x8F 4段共阳;
  20. //0x90 5段共阴  0x93 5段共阳;
  21. //0x94 6段共阴  0x97 6段共阳;
  22. //0x98 7段共阴  0x9B 7段共阳;
  23. //0x9C 8段共阴  0x9F 8段共阳;
  24. #define  LED_WORK_MODE        0x8C

  25. unsigned char  L_1,L_2,L_3,L_4;  // 目标显示值
  26. unsigned int  timer;                         // 时间计数
  27. unsigned char work_flag=1;                // 显示与否的标志

  28. unsigned char ARR_List[18]={        // 0亮 1灭 码值与引脚连接相关
  29.                                                         0xC0,                // 0
  30.                                                         0xF9,                // 1
  31.                                                         0xA4,                // 2
  32.                                                         0xB0,                // 3
  33.                                                         0x99,                // 4
  34.                                                         0x92,                // 5
  35.                                                         0x82,                // 6
  36.                                                         0xF8,                // 7
  37.                                                         0x80,                // 8
  38.                                                         0x90,                // 9
  39.                                                         0x88,                // a
  40.                                                         0x83,                // b
  41.                                                         0xA7,                // c
  42.                                                         0xA1,                // d
  43.                                                         0x86,                // e
  44.                                                         0x8E,                // f
  45.                                                         0xBF,                // -
  46.                                                         0xFF,                // 空
  47. };
  48. //;******************************************************************************
  49. //;* 函 数 名: init_mcu()
  50. //;* 函数功能: 初始化
  51. //;* 入口参数: 无
  52. //;* 返    回: 无
  53. //;******************************************************************************
  54. void init_mcu()
  55. {
  56.         //晶振频率选择
  57.         OSCCTL = 0x60;           //8M

  58.         //端口初始化
  59.         TR0 = 0x04;
  60.         TR1 = 0x00;
  61.         TR2 = 0x00;
  62.         TR3 = 0x00;          // LED输出

  63.         P0LR = 0X1B;        // COM 端高电平
  64.         P1LR = 0X00;
  65.         P2LR = 0X00;
  66.         P3LR = 0X00;

  67.         OPTR=0x44;                //使能上拉,T0计时模式,等待启动

  68.         AIE=1;
  69. }
  70. //;************************************************************************************
  71. //;* 函 数 名:  led_init
  72. //;* 函数功能: 选择参数
  73. //;* 入口参数:
  74. //;* 返    回:
  75. //;************************************************************************************
  76. void led_init()
  77. {
  78.         //输出模式选项 : 0 ——推挽          1 ——开漏
  79.         LEDOMS0=0x00;                        //LED-COMx端输出模式设置位
  80.         LEDOMS1=0x00;                        //LED-SEGx端输出模式设置位
  81.         //开漏方式选择:  1——P管                  0——N管
  82.         LEDODS0=0xFF;                        //LED-COMx端开漏方式选择位
  83.         LEDODS1=0xFF;                        //LED-SEGx端开漏方式选择位
  84.         // 辉度调节 0 15:16  1 14:16  2 12:16  3  10:16
  85.         // 辉度调节 4 8:16   5 6:16   6 4:16   7  2:16
  86.         LEDLUM=0x01;
  87.         // 扫描频率: B7-B4 时钟分频  B3-B0 预分频 更多见数据手册
  88.         // CLK(led)=SCLK  /  (   ((B3~B0)+1)  *   POWER(2,(B7~B4))  )
  89.         // 视觉停留需要至少50HZ不闪烁,LED模块内部还有1个32分频,
  90.         // 因此4段下需要4*50*32=6.4k的设定频率
  91.         // 因此8段下需要8*50*32=12.8k的设定频率
  92.         LEDPRE=0x72;

  93.         LEDDATA3=ARR_List[10];                                                                //千位
  94.         LEDDATA2=ARR_List[11];                                                                 //百位
  95.         LEDDATA1=ARR_List[12];                                                                 //十位
  96.         LEDDATA0=ARR_List[13];  //   0 亮 1灭,与共阴共阳无关         //个位

  97.         LEDCTL=LED_WORK_MODE;  // 默认开启 显示  ABCD
  98.         //while(1);
  99. }
  100. //;************************************************************************************
  101. //;* 函 数 名:  Start_for_led
  102. //;* 函数功能: 启动LED的显示
  103. //;* 入口参数:
  104. //;* 返    回:
  105. //;************************************************************************************
  106. void Start_for_led()
  107. {
  108.         //计数初始值
  109.         L_1=9;
  110.         L_2=9;
  111.         L_3=8;
  112.         L_4=7;
  113.         timer=0;
  114.         // 启动LED
  115.         LEDCTL=LED_WORK_MODE;
  116.         // 启动计时 计数
  117.         T0=0x64;
  118.         T0IE=1;
  119.         work_flag=1;
  120. }
  121. //;************************************************************************************
  122. //;* 函 数 名:  Stop_for_led
  123. //;* 函数功能: 关闭LED的显示
  124. //;* 入口参数:
  125. //;* 返    回:
  126. //;************************************************************************************
  127. void Stop_for_led()
  128. {
  129.         T0IE=0;
  130.         LEDCTL=0x00;
  131.         work_flag=0;
  132. }
  133. //主函数
  134. void main()
  135. {
  136.         unsigned int timeA=0,timeB=0;

  137.         init_mcu();
  138.         led_init();
  139.         Start_for_led();// 优先LED显示
  140.         P1LR2=0;
  141.         while(1)
  142.         {
  143.                 LEDDATA3=ARR_List[L_1];
  144.                 LEDDATA2=ARR_List[L_2];
  145.                 LEDDATA1=ARR_List[L_3];
  146.                 LEDDATA0=ARR_List[L_4];

  147.                 // 开启关闭切换
  148.                 timeA++;
  149.                 if(timeA>20000)
  150.                 {
  151.                         timeA=0;
  152.                         timeB++;
  153.                         if(timeB>5)
  154.                         {
  155.                                 timeB=0;
  156.                                 if(!work_flag)
  157.                                 {
  158.                                         Start_for_led();
  159.                                         P1LR2=0;
  160.                                 }
  161.                                 else
  162.                                 {
  163.                                         Stop_for_led();
  164.                                         P1LR2=1;
  165.                                 }
  166.                         }
  167.                 }
  168.         }
  169. }
  170. //===================================================
  171. //中断函数0:0X04入口地址
  172. void int_fun0() __interrupt (0)
  173. {
  174. //===================================================
  175.         if(T0IF)
  176.         {
  177.                 T0IF=0;
  178.                 T0=0x64;

  179.                 timer++;
  180.                 if(timer>80)        // 加快慢控制
  181.                 {
  182.                         timer=0;
  183.                         //------
  184.                         L_4++;
  185.                         if(L_4==10)
  186.                         {
  187.                                 L_4=0;
  188.                                 L_3++;
  189.                                 if(L_3==10)
  190.                                 {
  191.                                         L_3=0;
  192.                                         L_2++;
  193.                                         if(L_2==10)
  194.                                         {
  195.                                                 L_2=0;
  196.                                                 L_1++;
  197.                                                 if(L_1==10)
  198.                                                 {
  199.                                                    L_1=0;
  200.                                                 }
  201.                                         }
  202.                                 }
  203.                         }
  204.                 }
  205.         }
  206. //===================================================
  207. }
  208. //中断函数1:0x14入口地址
  209. void int_fun1() __interrupt (1)
  210. {

  211. //;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  212. }


 楼主| 小明的同学 发表于 2023-3-23 20:10 | 显示全部楼层
__sfr  __at(0x2007) CONFIG =0x1f94;
您需要登录后才可以回帖 登录 | 注册

本版积分规则

156

主题

1617

帖子

2

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