欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 3862|回復: 1
打印 上一主題 下一主題
收起左側

C51單片機+單個74HC595動態掃描6位數碼管程序

[復制鏈接]
跳轉到指定樓層
樓主
原理圖








C51 單個74HC595動態掃描6位數碼管.7z

11.95 KB, 下載次數: 43, 下載積分: 黑幣 -5

評分

參與人數 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎勵!

查看全部評分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏1 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:424598 發表于 2018-12-9 18:48 | 只看該作者
  1. /***********74HC595動態掃描6位數碼管************/
  2. //MCU:AT89S52RC
  3. //晶振:11.0592M.
  4. //采用6位數碼管
  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; //數碼管段位COM1(公共端)即數碼管的1腳
  15. sbit CS2=P2^4; //數碼管段位COM2(公共端)即數碼管的2腳
  16. sbit CS3=P2^5; //數碼管段位COM3(公共端)即數碼管的3腳
  17. sbit CS4=P2^6; //數碼管段位COM4(公共端)即數碼管的4腳
  18. sbit CS5=P2^7; //數碼管段位COM5(公共端)即數碼管的5腳
  19. sbit CS6=P0^7; //數碼管段位COM6(公共端)即數碼管的6腳

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

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

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

  56. void select1(void)
  57. { //第一位數碼管
  58.         CS1=0;CS2=1;CS3=1;CS4=1;CS5=1;CS6=1;
  59. }

  60. void select2(void)
  61. { //第二位數碼管
  62.         CS1=1;CS2=0;CS3=1;CS4=1;CS5=1;CS6=1;
  63. }

  64. void select3(void)
  65. { //第三位數碼管
  66.         CS1=1;CS2=1;CS3=0;CS4=1;CS5=1;CS6=1;
  67. }

  68. void select4(void)
  69. { //第四位數碼管
  70.         CS1=1;CS2=1;CS3=1;CS4=0;CS5=1;CS6=1;
  71. }

  72. void select5(void)
  73. { //第五位數碼管
  74.         CS1=1;CS2=1;CS3=1;CS4=1;CS5=0;CS6=1;
  75. }

  76. void select6(void)
  77. { //第六位數碼管
  78.         CS1=1;CS2=1;CS3=1;CS4=1;CS5=1;CS6=0;
  79. }

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

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

  98. int main(void) //主程序
  99. {   
  100.         uchar i;
  101.         init(); //啟動定時器
  102.         while(1)
  103.    { //無限循環
  104.            if(t>5) {t=0;} //當t>5,則初始為0
  105.            write595(2,0); //要寫的值
  106.            select1(); //顯示第一位數碼管  
  107.            for(i=0;i<10;i++) _nop_();  
  108.            write595(3,1); //要寫的值
  109.            select2(); //顯示第二位數碼管
  110.            for(i=0;i<10;i++) _nop_();  
  111.            write595(5,0); //要寫的值
  112.            select3(); //顯示第三位數碼管
  113.            for(i=0;i<10;i++) _nop_();  
  114.            write595(6,1); //要寫的值
  115.            select4(); //顯示第四位數碼管
  116.            for(i=0;i<10;i++) _nop_();  
  117.            write595(5,0); //要寫的值
  118.            select5(); //顯示第五位數碼管
  119.            for(i=0;i<10;i++) _nop_();  
  120.            write595(t,0); //要寫的值
  121.            select6(); //顯示第六位數碼管
  122.            for(i=0;i<10;i++) _nop_();  
  123.    }
  124. }
復制代碼
回復

使用道具 舉報

無效樓層,該帖已經被刪除
無效樓層,該帖已經被刪除
您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表