找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 8958|回復(fù): 5
收起左側(cè)

C51單片機(jī)+單個(gè)74HC595動(dòng)態(tài)掃描4位數(shù)碼管(原理圖+實(shí)物制作+源碼)

  [復(fù)制鏈接]
ID:424598 發(fā)表于 2018-12-8 13:20 | 顯示全部樓層 |閱讀模式
先上原理圖
74HC595 4位數(shù)碼管.png


根據(jù)原理圖焊好的板子
數(shù)碼管位用的是圓孔排插,方便更換數(shù)碼管
IMG_20181208_130706.jpg
反面
IMG_20181208_130724.jpg


開始測試
四位數(shù)碼管
IMG_20181208_124659.jpg


四位時(shí)鐘數(shù)碼管
IMG_20181208_124525.jpg


為了不占貼子長度, 源碼貼在二樓

C51 單個(gè)74HC595動(dòng)態(tài)掃描4位數(shù)碼管.zip

23.76 KB, 下載次數(shù): 166, 下載積分: 黑幣 -5

評分

參與人數(shù) 1黑幣 +100 收起 理由
admin + 100 共享資料的黑幣獎(jiǎng)勵(lì)!

查看全部評分

回復(fù)

使用道具 舉報(bào)

ID:424598 發(fā)表于 2018-12-8 13:21 | 顯示全部樓層
  1. /***********74HC595動(dòng)態(tài)掃描4位數(shù)碼管************/
  2. //MCU:AT89S52RC
  3. //晶振:11.0592M.
  4. //采用4位數(shù)碼管
  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. sbit CS1=P2^3; //數(shù)碼管段位COM1(公共端)即數(shù)碼管的12腳
  15. sbit CS2=P2^4; //數(shù)碼管段位COM2(公共端)即數(shù)碼管的9腳
  16. sbit CS3=P2^5; //數(shù)碼管段位COM3(公共端)即數(shù)碼管的8腳
  17. sbit CS4=P2^6; //數(shù)碼管段位COM4(公共端)即數(shù)碼管的6腳

  18. //本程序支持4位共陽和共陰數(shù)碼管(包插四位時(shí)鐘)可根據(jù)你的數(shù)碼管是共陰還是共陽,開啟下面匹配的tab[]
  19. //                 0    1    2    3    4    5    6    7    8    9    A    B    C    D    E    F   全亮 全滅
  20. //uchar code tab[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e,0x00,0xff}; //共陽數(shù)碼管 不顯示0xff 全亮0x00 只顯示點(diǎn)0x7f
  21. uchar code tab[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0xff,0x00}; //共陰數(shù)碼管 不顯示0x00 全亮0xff 只顯示點(diǎn)0x80
  22. uchar t;
  23. uchar count = 0;

  24. /* //延時(shí)函數(shù)
  25. void delay(uchar z)
  26. {
  27.         uchar x,y;
  28.         for(x=z;x>0;x--)
  29.                 for(y=120;y>0;y--);
  30. }
  31. */

  32. //寫數(shù)碼管函數(shù)
  33. void write595(unsigned char word,uchar k1)
  34. {
  35.         uchar num,c; //變量
  36.         if(k1==1){ //如果k1的值為1,則點(diǎn)亮?xí)r鐘數(shù)碼管的:點(diǎn)(如果是普通的四位數(shù)碼管,則點(diǎn)亮第二位的小數(shù)點(diǎn))
  37.                 num=tab[word]|0x80; //關(guān)鍵就在|0x80
  38.         } else {
  39.                 num=tab[word];
  40.         }
  41.         //循環(huán)8個(gè)LED
  42.         for(c=0;c<8;c++)
  43.         {
  44.            CLK=0;
  45.            DAT=num&0x80;
  46.            num=num<<1;
  47.            CLK=1;
  48.         }
  49.         RCLK=0;
  50.         //nop();
  51.         //nop();
  52.         RCLK=1;
  53. }

  54. void select1(void)
  55. { //第一位數(shù)碼管
  56.         CS1=0;
  57.         CS2=1;
  58.         CS3=1;
  59.         CS4=1;
  60. }

  61. void select2(void)
  62. { //第二位數(shù)碼管
  63.         CS1=1;
  64.         CS2=0;
  65.         CS3=1;
  66.         CS4=1;
  67. }

  68. void select3(void)
  69. { //第三位數(shù)碼管
  70.         CS1=1;
  71.         CS2=1;
  72.         CS3=0;
  73.         CS4=1;
  74. }

  75. void select4(void)
  76. { //第四位數(shù)碼管
  77.         CS1=1;
  78.         CS2=1;
  79.         CS3=1;
  80.         CS4=0;
  81. }

  82. void init() //啟動(dòng)定時(shí)器
  83. {
  84.     TMOD=0X01;
  85.     TH0=(65535-46080)/256;
  86.     TL0=(65535-46080)%256;
  87.     ET0=1;
  88.     EA=1;
  89.     TR0=1;
  90. }

  91. void T0_time() interrupt 1 //定時(shí)器
  92. {     
  93.         if (count == 20) {
  94.                 t++;
  95.                 count = 0;
  96.         } else {
  97.                 ++count;
  98.         }
  99. }

  100. int main(void) //主程序
  101. {   
  102. //unsigned char i;
  103.         init(); //啟動(dòng)定時(shí)器
  104.         while(1)
  105.    { //無限循環(huán)
  106.            if(t>9) {t=0;} //當(dāng)t>9,則初始為0
  107.            write595(t,0); //要寫的值
  108.            select1(); //顯示第一位數(shù)碼管  
  109.            //for(i=0;i<10;i++) _nop_();  
  110.            write595(t+1,1); //要寫的值
  111.            select2(); //顯示第二位數(shù)碼管
  112.            write595(t+2,0); //要寫的值
  113.            select3(); //顯示第三位數(shù)碼管
  114.            write595(t+3,0); //要寫的值
  115.            select4(); //顯示第四位數(shù)碼管
  116.    }
  117. }
復(fù)制代碼


回復(fù)

使用道具 舉報(bào)

ID:142652 發(fā)表于 2019-2-15 21:41 | 顯示全部樓層
謝謝分享的資料
回復(fù)

使用道具 舉報(bào)

ID:21568 發(fā)表于 2019-6-13 11:34 | 顯示全部樓層
仿真后不成功,可能程序有問題請指導(dǎo)。
回復(fù)

使用道具 舉報(bào)

ID:621733 發(fā)表于 2019-10-10 14:48 | 顯示全部樓層
下載學(xué)習(xí)學(xué)習(xí),謝謝
回復(fù)

使用道具 舉報(bào)

ID:630309 發(fā)表于 2020-6-6 07:41 | 顯示全部樓層
下載學(xué)習(xí),謝謝
回復(fù)

使用道具 舉報(bào)

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表