久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 4942|回復: 0
收起左側

關于51單片機驅動7段數碼管顯示源程序與Proteus仿真圖

[復制鏈接]
ID:163020 發表于 2021-2-13 15:03 | 顯示全部樓層 |閱讀模式
設計目標:1.使用一個七段數碼管,在數碼管上順序顯示0~F,顯示間隔1s。
    2.使用8個七段數碼管,穩定顯示自己學號后8位。(已實現循環顯示完整學號)

本案例用到單片機定時器,數碼管等知識。

需要軟件:keil c51 (本機環境 Keil uVision5)
                 proteus  (本機環境 proteus 8.11)
仿真電路圖如下:
pro.png

需要原件: AT89C51
     74LS245 (P0口驅動不了,加245驅動數碼管)
     74LS138   (3 8 譯碼器 驅動多段位置信息)
     7SEG-MPX8-CC-BLUE
     7SEG-MPX1-CC

共陰數碼管段碼和共陽數碼管段碼加起來為FF,如顯示不正常另行計算。因本人區分不來就不誤導人了,程序中led和led8為數碼管斷碼。

驅動程序如下:

  1. #include <reg51.h>
  2. #include<stdio.h>

  3. #define uchar unsigned char
  4. #define uint  unsigned int

  5. uchar leddata[] = "124F09124847-2020.7";//學號自行修改
  6. //0x00  滅燈  0x80  點  0x40  橫杠
  7. uchar led[] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,   0x77,0x7c,0x39, 0x5e,0x79,0x71,0x80,0x40};
  8. /*0-9  A-F*/
  9. uchar led8[] = {0xC0,0xf9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,   0x88,0x83,0xC6,0xA1,0x86,0x8E};
  10. /*位信息*/
  11. //uchar wei[] = {0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};
  12. /*138譯碼器位信息*/
  13. uchar wei[] = {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07};

  14. uint Rank = 0 , charNUm = 0, tem = 0;

  15. void delay(int t){
  16.         while(t!=0)
  17.         {
  18.                 uchar i;
  19.                 for(i=124;i>0;i--);  //??124*8+10=1002us
  20.                 t--;
  21.         }
  22. }
  23. //-----------------字符查表----------------------
  24. void charToNum(uchar strs){
  25.   switch (strs)
  26.   {
  27.     case '0':
  28.       P0 = led[0];
  29.       break;
  30.     case '1':
  31.       P0 = led[1];
  32.       break;
  33.     case '2':
  34.       P0 = led[2];
  35.       break;
  36.     case '3':
  37.       P0 = led[3];
  38.       break;
  39.     case '4':
  40.       P0 = led[4];
  41.       break;
  42.     case '5':
  43.       P0 = led[5];
  44.       break;
  45.     case '6':
  46.       P0 = led[6];
  47.       break;
  48.     case '7':
  49.       P0 = led[7];
  50.       break;
  51.     case '8':
  52.       P0 = led[8];
  53.       break;
  54.     case '9':
  55.       P0 = led[9];
  56.       break;
  57.     case 'A':
  58.       P0 = led[10];
  59.       break;
  60.     case 'B':
  61.       P0 = led[11];
  62.       break;
  63.     case 'C':
  64.       P0 = led[12];
  65.       break;
  66.     case 'D':
  67.       P0 = led[13];
  68.       break;
  69.     case 'E':
  70.       P0 = led[14];
  71.       break;
  72.     case 'F':
  73.       P0 = led[15];
  74.       break;
  75.                 case '.':
  76.       P0 = led[16];
  77.       break;
  78.                 case '-':
  79.       P0 = led[17];
  80.       break;
  81.     default:
  82.       P0 = 0xff;
  83.       break;
  84.   }   
  85. }
  86. //-----------------初始化----------------------
  87. void init(){
  88.   TMOD = 0x01;
  89.   TH0  = (65536-1000)/256;
  90.   TL0  = (65536-1000)%256;
  91.   TR0  = 1;
  92.   ET0  = 1;
  93.   EA   = 1;
  94.         P0   = 0x00;
  95.         P3   = 0x00;
  96. }
  97. //-----------------單個數碼管顯示----------------------0-F
  98. void OneledRun(){
  99.         uint s = 0;
  100.   for(;s<16;s++){
  101.     P3 = led[s];
  102.     delay(3000);
  103.   }
  104. }

  105. //-----------------TT0----------------------1MS
  106. void TT0(void) interrupt 1
  107. {
  108.         P0 = 0x00;   //消影
  109.         TH0  = (65536-1000)/256;
  110.   TL0  = (65536-1000)%256;
  111.         P2 = wei[Rank];
  112.         //P0 = led[Rank];               
  113.   charToNum(leddata[Rank+charNUm]);  
  114.   Rank++;
  115.         tem++;        
  116.   if(Rank == 8) { Rank = 0; }
  117.         if(tem == 1000)
  118.         {
  119.                 charNUm++;
  120.                 if(charNUm == (sizeof(leddata) - 8)) {
  121.                         charNUm = 0;
  122.                 }
  123.                 tem = 0;
  124.         }  
  125. }

  126. //-----------------主函數----------------------
  127. void main(){
  128.           init();
  129.     delay(1000);
  130.     while (1)
  131.     {                  
  132.                         OneledRun();                        
  133.     }

  134. }
復制代碼
全部資料51hei下載地址:
led8.zip (83.73 KB, 下載次數: 26)

評分

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

查看全部評分

回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 亚洲欧洲精品一区 | 国产在线精品区 | 成人午夜在线 | 成人h动漫精品一区二区器材 | 久久免费国产视频 | 天天草草草 | 久久久久九九九女人毛片 | 亚洲国产精品久久 | 国产欧美精品一区 | 亚洲一区二区三区在线观看免费 | 欧美国产中文 | 欧美一区二区三区视频 | 日日天天 | 日日夜夜精品视频 | 亚洲午夜在线 | 福利片在线看 | 福利社午夜影院 | 伊人久久伊人 | 高清黄色网址 | www.精品国产 | 精品视频在线观看 | 永久精品 | 岛国av一区二区 | 久久精品国产亚洲 | 日韩中文字幕一区二区 | 国内久久| 久久国内精品 | 国产一区二区三区在线 | 人妖一区 | 国产一区二区三区网站 | av免费观看在线 | 一级黄色片毛片 | 成人久久18免费网站 | 97国产爽爽爽久久久 | 欧美日韩国产一区二区 | 国产91久久精品一区二区 | 欧美日韩精品一区二区三区四区 | 欧美中文字幕 | 久久久久国产 | 草久在线 | 日本aaaa|