找回密码
 立即注册
楼主: liji***

STC32G12K128和STC8H8K64U驱动四位数码管显示

[复制链接]
  • TA的每日心情
    开心
    昨天 13:15
  • 签到天数: 64 天

    [LV.6]常住居民II

    6

    主题

    275

    回帖

    487

    积分

    中级会员

    积分
    487
    发表于 2024-5-15 10:55:11 | 显示全部楼层
    angmall 发表于 2024-5-14 22:31
    芯片动画 74HC595 逻辑工作原理

    做的太好了!
    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    开心
    昨天 00:05
  • 签到天数: 203 天

    [LV.7]常住居民III

    9

    主题

    933

    回帖

    3637

    积分

    论坛元老

    积分
    3637
    发表于 2024-5-16 13:27:30 | 显示全部楼层
    cadplus 发表于 2024-3-19 09:01
    大佬好,有没有16位数码管的驱动例子?8位的参照范例弄成功了,16位的却不行 ...


    3个 595,1个驱动数码管段选(a-g,p),2个驱动数码管位选(com1-16) 用扫描方式驱动

    094028k44xf9wo2fysw42e.png



    • /****************************************************************
    • * 文件名:code.c
    • * 说  明:Chip=STC89C52; Crystal=12MHz;12T
    • * 功  能:3*74xx595 显示16数码管
    • * 修  订:FreeFish 2019
    • * 版  本:V0.1
    • ****************************************************************/
    • #include<reg52.h>
    • sbit   Dat=P2^0;
    • sbit   RCK=P2^2;
    • sbit   SCK=P2^3;
    • unsigned char index,k;
    • unsigned int  position;
    • unsigned char code table[]={
    •   0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e};
    • unsigned char Dat_Buf[3];        //要送出的3个字节数据  (段数据-位数据-位数据)
    • unsigned char Dat_Disp[16];        //要显示的16个字符。
    • /****************************************************************
    • * 函数功能:595写入数据
    • ****************************************************************/
    • void write595(unsigned char Data)
    • {
    •   unsigned char i;
    •   for (i=0;i<8;i++)
    •   {
    •     Dat = ((Data & 0x80)==0x80)?1:0;
    •     Data = Data << 1;               
    •     SCK = 1;
    •     SCK = 0;
    •   }
    • }
    • void InitTimer0(void)        //1ms
    • {
    •   TMOD = 0x01;
    •   TH0 = 0x0FC;
    •   TL0 = 0x18;
    •   EA = 1;
    •   ET0 = 1;
    •   TR0 = 1;
    • }
    • /****************************************************************
    • * 函数功能:主函数
    • ****************************************************************/
    • void main()
    • {      
    •   InitTimer0();
    •   Dat_Disp[0]=3;
    •   Dat_Disp[1]=1;
    •   Dat_Disp[2]=4;
    •   Dat_Disp[3]=1;
    •   Dat_Disp[4]=5;
    •   Dat_Disp[5]=9;
    •   Dat_Disp[6]=2;
    •   Dat_Disp[7]=6;
    •   Dat_Disp[8]=5;
    •   Dat_Disp[9]=3;
    •   Dat_Disp[10]=5;
    •   Dat_Disp[11]=8;
    •   Dat_Disp[12]=9;
    •   Dat_Disp[13]=7;
    •   Dat_Disp[14]=9;
    •   Dat_Disp[15]=3;
    •   while(1)
    •   {
    •     if(index==0)
    •       Dat_Buf[0]=table[Dat_Disp[index]]-0x80;//装载段数据
    •     else         
    •       Dat_Buf[0]=table[Dat_Disp[index]];//装载段数据
    •     position=1<<index;
    •     Dat_Buf[1]=position/256;        //位选16-9
    •     Dat_Buf[2]=position%256;        //位选8-1
    •     for (k=0;k<3;k++)
    •     {
    •       write595(Dat_Buf[k]);  //
    •     }
    •     RCK=1;          //更新数据
    •     RCK=0;                //准备下一次
    •     //Delay(10); //点亮一段时间
    •   }
    • }
    • void Timer0Interrupt(void) interrupt 1        //1ms
    • {
    •   TH0 = 0x0FC;
    •   TL0 = 0x18;
    •   //add your code here!
    •   index++;
    •   index=index%16;
    • }






    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    开心
    昨天 13:14
  • 签到天数: 28 天

    [LV.4]偶尔看看III

    0

    主题

    22

    回帖

    240

    积分

    中级会员

    积分
    240
    发表于 2024-5-17 09:28:03 | 显示全部楼层
    angmall 发表于 2024-5-16 13:27
    3个 595,1个驱动数码管段选(a-g,p),2个驱动数码管位选(com1-16) 用扫描方式驱动

    非常感谢大佬!
    我是TB上买的2块8位数码管,每块有2片595,因为IO不够用,将2块三线串联成16位一起使用,与你的有点区别。
    没有编程基础,对位的没有认识,也不会仿真,硬是靠笨办法试,N多次摸索下载实测
    已经试验成功,回过头一看,其实跟一块8位数码管一样的驱动,一块的时候发段码-发位码-锁存,
    两块串一起的时候,就是发段码-发位码-发段码-发位码-锁存,让4片595都收到数据后锁存
    回复 支持 反对 送花

    使用道具 举报

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

    本版积分规则

    QQ|手机版|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

    GMT+8, 2024-6-15 02:11 , Processed in 0.055471 second(s), 37 queries .

    Powered by Discuz! X3.5

    © 2001-2024 Discuz! Team.

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