找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 3171|回復(fù): 1
打印 上一主題 下一主題
收起左側(cè)

74hc595+數(shù)碼管 單片機(jī)源程序Proteus仿真(剩用端口)

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
代碼+仿真


單片機(jī)源程序如下:
  1. #include <REGX51.H>
  2. sbit SH_CP = P0^0;// 移位寄存器的時鐘控制
  3. sbit DS = P0^1; // 數(shù)據(jù)傳輸線
  4. sbit ST_CP = P0^2;//數(shù)據(jù)輸出寄存器的時鐘控制
  5. unsigned int a[]={
  6.         0x3F,/*0*/
  7.         0x06,/*1*/
  8.         0x5B,/*2*/
  9.         0x4F,/*3*/
  10.         0x66,/*4*/
  11.         0x6D,/*5*/
  12.         0x7D,/*6*/
  13.         0x07,/*7*/
  14.         0x7F,/*8*/
  15.         0x6F,/*9*/

  16. };
  17. //延時函數(shù)
  18. void delayms(unsigned int m)
  19. {
  20.         unsigned int i, j;
  21.         for(i=0; i<m; i++)
  22.                 for(j=0; j<100; j++);
  23. }


  24. /****************************************************************
  25. 第一步:取出最高位   temp = value & 0x80;  //取最高位的值
  26. 第二步:判斷最高位是0還是1 if(temp)
  27. 第三步:向595發(fā)送最高位的值          DS = 1或0; 向595的移位寄存器發(fā)送一個1或0
  28. 第四步:向移位寄存器中發(fā)送數(shù)據(jù),將數(shù)據(jù)產(chǎn)生移位
  29.         只需給移位寄存器上升沿工作時鐘 SH_CP = 0; SH_CP = 1;
  30. 第五步:將要傳輸?shù)臄?shù)據(jù)進(jìn)行移位,目的是將最高位去掉,
  31.         將次高位變?yōu)樽罡呶?value = value <<1;/
  32. 第六步:一個字節(jié)有8位數(shù)據(jù),每次只能發(fā)送一位數(shù)據(jù),
  33.         所以我們發(fā)送8次,用for循環(huán)
  34. 第七步:八個數(shù)據(jù)全部發(fā)送到移位寄存器之后,就要將移位寄存器的數(shù)據(jù)發(fā)送到數(shù)據(jù)輸出寄存器中,
  35.                 只需要給數(shù)據(jù)輸出寄存器一個上升沿工作時鐘即可ST_CP = 0; ST_CP = 1;
  36. ***************************************************************/
  37. void hc595(unsigned int value)
  38. {
  39.         bit temp;//位變量,temp的值為0或者1
  40.         unsigned char i;
  41.         for(i=0; i<8; i++)
  42.         {
  43.                 temp = value &0x80; // 取value的最高位  0000 0001  &1000 0000
  44.                 if(temp == 1) DS = 1;//如果最高位為1,那么就向595發(fā)送一個1
  45.                 else  DS =0; //否則就向595發(fā)送一個0
  46.                 SH_CP = 0;
  47.                 SH_CP = 1;//移位寄存器產(chǎn)生一個上升沿,將數(shù)據(jù)發(fā)送到移位寄存器中,使移位寄存器的數(shù)據(jù)產(chǎn)生移位
  48.                 value = value <<1;//將最高位去掉,將此高位變成最高位,為下一次發(fā)送最高位做準(zhǔn)備               
  49.         }
  50.         ST_CP = 0;
  51.         ST_CP = 1;//產(chǎn)生一個上升沿,將移位寄存器的數(shù)據(jù)發(fā)送給數(shù)據(jù)輸出寄存器
  52. }
  53. /*************************
  54. 顯示函數(shù)
  55. 動態(tài)掃描:先寫位碼,再寫段碼,最后補(bǔ)一個延時
  56. */         
  57. void display(void)
  58. {
  59.         unsigned char n,x;
  60.         for(n=0; n<100; n++)
  61.         {
  62.                 for(x=0; x<50; x++)// 當(dāng)前數(shù)字刷新的次數(shù),起到延時的作用 每一消耗的時間20ms x  50 =1s
  63.                 {
  64.                  P3 = 0x01;//0000 0001   個位工作 位碼
  65.                   hc595(a[n%10]);//顯示0
  66.                   delayms(10);

  67.                   P3 = 0x02;//0000 0010  十位工作,位碼
  68.                   hc595(a[n/10]);//顯示1
  69.                   delayms(10);
  70.                 }        
  71.         }
  72.    
  73. }

  74. void  main(void)
  75. {
  76.         while(1)
  77.         {
  78.                 display();        
  79.         }
  80. }
復(fù)制代碼

下載: 595-雙數(shù)碼--0~99.rar (41 KB, 下載次數(shù): 62)
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏2 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:284050 發(fā)表于 2020-9-5 13:55 | 只看該作者
void hc595(unsigned int value)

這個函數(shù)給了我另外一種發(fā)送數(shù)據(jù)給595的思路,謝謝!
回復(fù)

使用道具 舉報(bào)

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

本版積分規(guī)則

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

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

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