找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索

C51单片机+单个74HC595动态扫描1位数码管(原理图+实物制作+源码)

查看数: 1954 | 评论数: 1 | 收藏 1
关灯 | 提示:支持键盘翻页<-左 右->
    组图打开中,请稍候......
发布时间: 2018-12-9 13:25

正文摘要:

原理图

回复

ID:424598 发表于 2018-12-9 13:25
  1. /***********74HC595动态扫描1位数码管************/
  2. //MCU:AT89S52RC
  3. //晶振:11.0592M.
  4. //采用1位数码管
  5. /***************************************************/
  6. #include<reg51.h>
  7. #include <INTRINS.H>
  8. #define uint unsigned int
  9. #define uchar unsigned char
  10. #define nop() _nop_();_nop_();

  11. sbit CLK=P2^0; //74HC595的11引脚
  12. sbit DAT=P2^1; //74HC595的14引脚
  13. sbit RCLK=P2^2;        //74HC595的12引脚


  14. //本程序支持1位共阳和共阴数码管可根据你的数码管是共阴还是共阳,开启下面匹配的tab[]
  15. //                 0    1    2    3    4    5    6    7    8    9    A    B    C    D    E    F   全亮 全灭
  16. //uchar code tab[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e,0x00,0xff}; //共阳数码管 不显示0xff 全亮0x00 只显示点0x7f
  17. uchar code tab[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0xff,0x00}; //共阴数码管 不显示0x00 全亮0xff 只显示点0x80
  18. uchar t;
  19. uchar count = 0;

  20. /* //延时函数
  21. void delay(uchar z)
  22. {
  23.         uchar x,y;
  24.         for(x=z;x>0;x--)
  25.                 for(y=120;y>0;y--);
  26. }
  27. */

  28. //写数码管函数
  29. void write595(unsigned char word,uchar k1)
  30. {
  31.         uchar num,c; //变量
  32.         if(k1==1){ //如果k1的值为1,则点亮小数点)
  33.                 num=tab[word]|0x80; //关键就在|0x80
  34.         } else {
  35.                 num=tab[word];
  36.         }
  37.         //循环8个LED
  38.         for(c=0;c<8;c++)
  39.         {
  40.            CLK=0;
  41.            DAT=num&0x80;
  42.            num=num<<1;
  43.            CLK=1;
  44.         }
  45.         RCLK=0;
  46.         //nop();
  47.         //nop();
  48.         RCLK=1;
  49. }



  50. void init() //启动定时器
  51. {
  52.     TMOD=0X01;
  53.     TH0=(65535-46080)/256;
  54.     TL0=(65535-46080)%256;
  55.     ET0=1;
  56.     EA=1;
  57.     TR0=1;
  58. }

  59. void T0_time() interrupt 1 //定时器
  60. {     
  61.         if (count == 20) {
  62.                 t++;
  63.                 count = 0;
  64.         } else {
  65.                 ++count;
  66.         }
  67. }

  68. int main(void) //主程序
  69. {   
  70. //unsigned char i;
  71.         init(); //启动定时器
  72.         while(1)
  73.    { //无限循环
  74.            if(t>9) {t=0;} //当t>9,则初始为0
  75.            write595(t,0); //要写的值          
  76.            //for(i=0;i<10;i++) _nop_();
  77.    }
  78. }
复制代码

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

Powered by 单片机教程网

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