找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3293|回复: 8
收起左侧

九齐单片机NY8B062E 5PIN_188数码管驱动代码

  [复制链接]
ID:15745 发表于 2023-9-10 12:01 | 显示全部楼层 |阅读模式
分享一个基于九齐单片机NY8B062E做的数码管驱动,亲测显示OK,附源程序

屏幕截图.png

单片机源程序如下:
  1. // =========================================================================
  2. // Created by NYIDE.
  3. // User: ZHANG
  4. // Date: 2021/9/22
  5. // Description:
  6. // =========================================================================
  7. #include <at8.h>
  8. #include "at8_constant.h"
  9. __sbit PIN1 = PORTA:7;
  10. __sbit PIN2 = PORTA:6;
  11. __sbit PIN3 = PORTA:4;
  12. __sbit PIN4 = PORTA:3;
  13. __sbit PIN5 = PORTA:2;

  14. #define       uint8_t   (unsigned char)      // 无符号8位整型变量
  15. #define       uint16_t   (unsigned short)     // 无符号16位整型变量

  16. unsigned char SEG;
  17. unsigned char Data[3]={ 0,0,0};
  18. unsigned char ch[11]={ 0X3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0};//显示数字0~9

  19. void Display(unsigned char data0,unsigned char data1,unsigned char data2);
  20. void LED_Scan(void);
  21. void delay(int);

  22. void isr(void) __interrupt(0)//中断服务函数
  23. {
  24. if(INTFbits.T0IF)//1.02ms
  25. {
  26.         LED_Scan();
  27.         INTF= (unsigned char)~(C_INT_TMR0);        // Clear T0IF flag bit
  28. }
  29. }
  30. void main(void)
  31. {
  32.         IOSTA = 0;
  33.         IOSTB = 0;                                                //set PortB as output mode
  34.        
  35.         PORTA=0x00;                                        //LED = off
  36.         PORTB=0x00;                                        //LED = off
  37.         static unsigned int a = 0;
  38.         while(1)
  39.         {
  40.                 a++;
  41.                 switch(a/500)
  42.                 {
  43.                         case 0:
  44.                                 Display(1,1,9);
  45.                                 LED_Scan();
  46.                                 break;
  47.                         case 1:
  48.                                 Display(1,3,9);
  49.                                 LED_Scan();
  50.                                 break;
  51.                         case 2:
  52.                                 Display(1,5,9);
  53.                                 LED_Scan();
  54.                                 break;
  55.                         case 3:
  56.                                 Display(1,7,9);
  57.                                 LED_Scan();
  58.                                 break;
  59.                         case 4:
  60.                                 Display(1,9,9);
  61.                                 LED_Scan();
  62.                                 break;
  63.                         default:
  64.                                 Display(1,8,8);
  65.                                 LED_Scan();
  66.                                 break;
  67.                 }
  68.                         if(a>3000)
  69.                                 a=0;
  70.         }
  71. }

  72. //数码管对应位置显示数字
  73. void Display(unsigned char data0,unsigned char data1,unsigned char data2)
  74. {
  75.         Data[0]=ch[data0];
  76.         Data[1]=ch[data1];
  77.         Data[2]=ch[data2];
  78. }

  79. //16颗LED逐一扫描
  80. //当用到其中任意两个IO口的时候,需要将剩余三个IO口设置为输入模式,防止互相干扰
  81. void LED_Scan(void)
  82. {
  83.         SEG++;if(SEG>16)SEG=1;
  84.         PIN1=PIN2=PIN3=PIN4=PIN5=0;
  85.         if(SEG == 1){IOSTA=0xE7;if(Data[0]&0x02)PIN3=1;else PIN3=0;PIN4=0;}//B1
  86.         if(SEG == 2){IOSTA=0xB7;if(Data[0]&0x04)PIN2=1;else PIN2=0;PIN4=0;}//C1
  87.         if(SEG == 3){IOSTA=0xAF;if(Data[1]&0x01)PIN2=1;else PIN2=0;PIN3=0;}//A2
  88.         if(SEG == 4){IOSTA=0xAF;if(Data[1]&0x02)PIN3=1;else PIN3=0;PIN2=0;}//B2
  89.         if(SEG == 5){IOSTA=0xE7;if(Data[1]&0x04)PIN4=1;else PIN4=0;PIN3=0;}//C2
  90.         if(SEG == 6){IOSTA=0xB7;if(Data[1]&0x08)PIN4=1;else PIN4=0;PIN2=0;}//D2
  91.         if(SEG == 7){IOSTA=0xBB;if(Data[1]&0x10)PIN5=1;else PIN5=0;PIN2=0;}//E2
  92.         if(SEG == 8){IOSTA=0xEB;if(Data[1]&0x20)PIN5=1;else PIN5=0;PIN3=0;}//F2
  93.         if(SEG == 9){IOSTA=0xF3;if(Data[1]&0x40)PIN5=1;else PIN5=0;PIN4=0;}//G2
  94.         if(SEG == 10){IOSTA=0x3F;if(Data[2]&0x01)PIN1=1;else PIN1=0;PIN2=0;}//A3
  95.         if(SEG == 11){IOSTA=0x3F;if(Data[2]&0x02)PIN2=1;else PIN2=0;PIN1=0;}//B3
  96.         if(SEG == 12){IOSTA=0x6F;if(Data[2]&0x04)PIN1=1;else PIN1=0;PIN3=0;}//C3
  97.         if(SEG == 13){IOSTA=0x6F;if(Data[2]&0x08)PIN3=1;else PIN3=0;PIN1=0;}//D3
  98.         if(SEG == 14){IOSTA=0x77;if(Data[2]&0x10)PIN1=1;else PIN1=0;PIN4=0;}//E3
  99.         if(SEG == 15){IOSTA=0x77;if(Data[2]&0x20)PIN4=1;else PIN4=0;PIN1=0;}//F3
  100.         if(SEG == 16){IOSTA=0x7B;if(Data[2]&0x40)PIN5=1;else PIN5=0;PIN1=0;}//G3
  101. }
复制代码


评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

回复

使用道具 举报

ID:562099 发表于 2023-9-10 15:59 | 显示全部楼层
九齐单片机的,烧录跟51一样吗。没用过
回复

使用道具 举报

ID:15745 发表于 2023-9-17 14:21 | 显示全部楼层
周工58 发表于 2023-9-10 15:59
九齐单片机的,烧录跟51一样吗。没用过

要九齐专用的烧录器
回复

使用道具 举报

ID:433219 发表于 2023-9-20 10:48 | 显示全部楼层
188这种数码管,只适合mcu非常   闲    的场合
回复

使用道具 举报

ID:180919 发表于 2023-10-12 09:29 | 显示全部楼层
wkman 发表于 2023-9-20 10:48
188这种数码管,只适合mcu非常   闲    的场合

1T的单片机,跑188还可以
回复

使用道具 举报

ID:307150 发表于 2023-10-15 16:44 | 显示全部楼层
学习下   这个操作   有定时器输出 PWM 的写法吗
回复

使用道具 举报

ID:1125252 发表于 2024-7-18 13:40 | 显示全部楼层
liminmod 发表于 2023-10-15 16:44
学习下   这个操作   有定时器输出 PWM 的写法吗

看我的帖子
回复

使用道具 举报

ID:1125252 发表于 2024-7-22 15:36 | 显示全部楼层
后面的摄氏度和F符号怎么点亮?
回复

使用道具 举报

ID:1125252 发表于 2024-7-22 16:33 | 显示全部楼层
if(Data[0]&0x02)这个是什么操作,为啥这个与后,PIN3=1,与的结果是PIN4=0吗?
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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