找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索

51单片机两片595驱动共阴极数码管的问题

查看数: 1055 | 评论数: 2 | 收藏 1
关灯 | 提示:支持键盘翻页<-左 右->
    组图打开中,请稍候......
发布时间: 2024-11-22 13:00

正文摘要:

代码: #include <reg52.h> #include <intrins.h> #define uchar unsigned char uchar code Table[] = { // 0         1          2&nbs ...

回复

ID:1133081 发表于 2024-11-22 21:41


  1. #include <reg51.H>
  2. #define uint unsigned int
  3. #define uchar unsigned char
  4. sbit P_HC595_SER   = P1^0;
  5. sbit P_HC595_RCLK  = P1^1;
  6. sbit P_HC595_SRCLK = P1^2;

  7. uchar code table[]={
  8.         0x3f,0x06,0x5b,0x4f,
  9.         0x66,0x6d,0x7d,0x07,
  10.         0x7f,0x6f,0x77,0x7c,
  11.         0x39,0x5e,0x79,0x71,0x40};
  12. uchar data dis_buf[8];
  13. uchar shi=12,fen=59,miao=30;
  14. uint  cnt;
  15. bit   flag;
  16. /**************** 向HC595发送一个字节函数 ******************/
  17. void Send_595(uchar dat)
  18. {               
  19.         uchar i;
  20.         for(i=0;i<8;i++)
  21.         {
  22.                 dat <<= 1;
  23.                 P_HC595_SER  = CY; //溢出位赋值数据输出端
  24.                 P_HC595_SRCLK = 1; //移位时钟
  25.                 P_HC595_SRCLK = 0;
  26.         }
  27. }
  28. /**************** 向HC595发送2个字节驱动码 ******************/
  29. void DisplayScan()
  30. {       
  31.         static uchar i;
  32.         Send_595(~(0x01<<i));//向HC595发送位码
  33.         Send_595(table[dis_buf[i]]);//向HC595发送段码
  34.         P_HC595_RCLK = 1;//锁存输出数据
  35.         P_HC595_RCLK = 0;
  36.         i++;
  37.         i%=8;
  38. }

  39. void TimerInit()         //定时器0初始化
  40. {
  41.         TMOD = 0x01;
  42.         TH0 = (65536-2000)/256;        //2ms初值
  43.         TL0 = (65536-2000)%256;
  44.         EA = 1;
  45.         ET0 = 1;
  46.         TR0 = 1;
  47. }

  48. void main()
  49. {
  50.         P_HC595_SRCLK = 0;//初始化移位时钟端
  51.         P_HC595_RCLK  = 0;//初始化锁存输出端
  52.         dis_buf[0]=shi/10;//初始化显示缓存
  53.         dis_buf[1]=shi%10;
  54.         dis_buf[2]=16;
  55.         dis_buf[3]=fen/10;
  56.         dis_buf[4]=fen%10;
  57.         dis_buf[5]=16;
  58.         dis_buf[6]=miao/10;
  59.         dis_buf[7]=miao%10;
  60.         TimerInit();
  61.         while(1)
  62.         {
  63.                 if(flag)
  64.                 {
  65.                         flag=0;
  66.                         dis_buf[0]=shi/10;
  67.                         dis_buf[1]=shi%10;
  68.                         dis_buf[3]=fen/10;
  69.                         dis_buf[4]=fen%10;
  70.                         dis_buf[6]=miao/10;
  71.                         dis_buf[7]=miao%10;
  72.                         DisplayScan();
  73.                 }
  74.         }
  75. }


  76. void Timer0() interrupt 1
  77. {      
  78.         TH0 = (65536-2000)/256;
  79.         TL0 = (65536-2000)%256;
  80.         cnt++;
  81.         if(cnt>=500)
  82.         {
  83.                 cnt = 0;
  84.                 miao++;
  85.                 if(miao == 60)
  86.                 {
  87.                         miao = 0;
  88.                         fen++;
  89.                         if(fen==60)
  90.                         {
  91.                                 fen = 0;
  92.                                 shi++;
  93.                                 if(shi==24)
  94.                                 {
  95.                                         shi=0;
  96.                                 }
  97.                         }
  98.                 }
  99.         }
  100.         flag=1;
  101. }


复制代码



ID:1109793 发表于 2024-11-22 15:26
共阳极改共阴极,位选和段数据都加个~不久行了?
还有这样每一位的时间太短了吧。
都不如直接上1638这样的芯片了。不过好像仿真不好搞

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

Powered by 单片机教程网

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