找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

利用8*8點陣實現(xiàn)0-9的顯示的單片機仿真與源程序

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:389518 發(fā)表于 2018-8-28 08:11 | 只看該作者 |只看大圖 回帖獎勵 |倒序瀏覽 |閱讀模式
附上實驗結(jié)果的截圖,完整電路圖和程序在壓縮包內(nèi)

仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)


單片機源程序如下:
  1. /*8x8LED顯示從0到9數(shù)據(jù) */
  2. #include <reg51.h>
  3. #define        uint        unsigned int
  4. #define        uchar        unsigned char

  5. //74HC595 行選
  6. sbit     LOCK  = P2^3;  //禁止輸出
  7. sbit     SCLK  = P2^4;  //時鐘引腳
  8. sbit     DATA  = P2^5;  //數(shù)據(jù)

  9. //74HC138  列選
  10. sbit    hc138_A   = P2^0;
  11. sbit    hc138_B   = P2^1;
  12. sbit    hc138_C   = P2^2;

  13. //數(shù)字字模,10個數(shù)字0~9,每個數(shù)字8個字節(jié)(縱向,正序)
  14. uchar code shuzi[10][8]=
  15.                                                   {
  16.                                                         {0x00,0x00,0x3e,0x41,0x41,0x41,0x3e,0x00},          //0
  17.                                                     {0x00,0x00,0x00,0x00,0x21,0x7f,0x01,0x00},         //1
  18.                                                         {0x00,0x00,0x27,0x45,0x45,0x45,0x39,0x00},         //2
  19.                                                         {0x00,0x00,0x22,0x49,0x49,0x49,0x36,0x00},         //3
  20.                                                         {0x00,0x00,0x0c,0x14,0x24,0x7f,0x04,0x00},         //4
  21.                                                         {0x00,0x00,0x72,0x51,0x51,0x51,0x4e,0x00},         //5
  22.                                                         {0x00,0x00,0x3e,0x49,0x49,0x49,0x26,0x00},         //6
  23.                                                         {0x00,0x00,0x40,0x40,0x40,0x4f,0x70,0x00},         //7
  24.                                                         {0x00,0x00,0x36,0x49,0x49,0x49,0x36,0x00},         //8
  25.                                                         {0x00,0x00,0x32,0x49,0x49,0x49,0x3e,0x00},         //9
  26.                                                   };


  27. //數(shù)字字模指針                                                                                                                                                                
  28. uchar col=0;

  29. //第幾個字符           
  30. uchar count=0;

  31. //定時器定時次數(shù)               
  32. uchar time = 0;                                                                

  33. //595串行輸入的行數(shù)據(jù)
  34. uchar d=0;

  35. //8位數(shù)據(jù)從74HC595的串行輸入,并行輸出
  36. void   dat74595(unsigned char d)
  37. {
  38.    unsigned char i;
  39.    for (i=0;i<8;i++)        //8位數(shù)據(jù)串行輸入
  40.    {
  41.     SCLK = 0;
  42.     DATA = (bit)(d&0x80);
  43.     SCLK = 1;                 
  44.     d=d<<1;
  45.    }
  46.    DATA = 1;
  47.    LOCK=0;LOCK=1;                //8位數(shù)據(jù)并行輸出
  48. }

  49. void main(void)
  50. {         
  51.         TMOD=0x01;                                                     //定時器0方式1
  52.         TH0=(65536-5000)/256;                                     //設(shè)置定時計數(shù)初值,5ms
  53.         TL0=(65536-5000)%256;
  54.           TR0=1;
  55.           ET0=1;                                                  //打開定時器0中斷
  56.           EA=1;

  57.           while(1);
  58. }


  59. /*定時器0中斷服務(wù)程序,5ms中斷一次,掃描一列*/
  60. void Timer0Int(void) interrupt 1
  61. {       
  62.         TH0=(65536-5000)/256;      
  63.           TL0=(65536-5000)%256;
  64.   
  65.           switch(col)  //列選通
  66.    {
  67.       case 0:  hc138_C =0;  hc138_B=0;  hc138_A=0;  // 選擇第0列顯示
  68.                break;                              
  69.       case 1:  hc138_C =0;  hc138_B=0;  hc138_A=1;  // 選擇第1列顯示
  70.                       break;
  71.       case 2:  hc138_C =0;  hc138_B=1;  hc138_A=0;   // 選擇第2列顯示
  72.                    break;
  73.       case 3:  hc138_C =0;  hc138_B=1;  hc138_A=1;   // 選擇第3列顯示
  74.                          break;
  75.       case 4:  hc138_C =1;  hc138_B=0;  hc138_A=0;   // 選擇第4列顯示
  76.                          break;
  77.       case 5:  hc138_C =1;  hc138_B=0;  hc138_A=1;   // 選擇第5列顯示
  78.                          break;
  79.       case 6:  hc138_C =1;  hc138_B=1;  hc138_A=0;   // 選擇第6列顯示
  80.                          break;
  81.       case 7:  hc138_C =1;  hc138_B=1;  hc138_A=1;   // 選擇第7列顯示

  82.       default:   break;
  83.         }

  84.         d=shuzi[count][col];           //行,送數(shù)字字模
  85.     dat74595(d);                       //把數(shù)一位一位的傳給74HC595
  86.           col++;
  87.           if(col==8)
  88.         {
  89.                 col=0;
  90.         }
  91.          
  92.         time++;
  93.         if (time >= 200)                                        //定時200次,1s,每個數(shù)字顯示1s
  94.         {
  95.                 time = 0;

  96.                 count++;                                                //準(zhǔn)備顯示下一個數(shù)字
  97.                 if (count >= 10)
  98.                 {
  99.                         count = 0;
  100.                 }
  101.         }
  102. }
復(fù)制代碼


所有資料51hei提供下載:
點陣.zip (61.44 KB, 下載次數(shù): 108)


評分

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

查看全部評分

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

使用道具 舉報

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

本版積分規(guī)則

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

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

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