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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

光柱的單片機驅動程序(所有LED排列在一條直線上)

[復制鏈接]
跳轉到指定樓層
樓主
ID:479409 發表于 2019-4-23 16:48 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
光柱的顯示原理其實和LED點陣差不多,只不過是把所有LED排列在一條直線上,形成一條光柱,驅動時按段、按線掃描點亮即可。

本程序使用的硬件見http://www.zg4o1577.cn/bbs/dpj-156818-1.html

單片機源程序如下:
  1. /* 104線光柱的顯示

  2. 硬件型號:UQK-H101型顯示儀表。

  3. P2為8條線的開關,P0低4位為13段的開關。
  4. */

  5. #include <at89x51.h>

  6. #define uchar unsigned char
  7. #define uint unsigned int

  8. #define TIMER0 1000                //數碼管刷新率50Hz
  9. #define MAX_CNT 1000        //累計1秒的最大計數值
  10. #define TIMER0_HIGH (65536 - TIMER0)/256
  11. #define TIMER0_LOW (65536 - TIMER0)%256

  12. uchar bdata led;                        // 低4位為LED顯示狀態(定時器開關狀態)
  13. code uchar disp_seg[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e};
  14. code uchar disp_row[]={0xfc,0xfd,0xfb,0xfa,0xf9,0xf6,0xf8,0xf5,0xf4,0xf3,0xf2,0xf1,0xf0};
  15. uchar disp_buf[4];                // bit7: 不顯示; bit4: 閃爍; bit3~0: 0~9,a,B,c,d,E,F
  16. uint tm_cnt;                                        // 累計1秒的計數
  17. uchar disp_bar;                                // 0~100

  18. intr_t0() interrupt 1
  19. {
  20.         uchar i, j, ch;

  21.         tm_cnt++;
  22.         TL0+=TIMER0_LOW;
  23.         TH0=TIMER0_HIGH+(uchar)CY;
  24.         if(tm_cnt>=MAX_CNT)
  25.                 tm_cnt=0;

  26.         // LED、數碼管、光柱的顯示
  27.         i=tm_cnt%20;
  28.         if(i==4)
  29.         {
  30.                 P0=0xff;
  31.                 P2=~led|0xf0;
  32.                 P0=0xfe;                        //打開陽極
  33.         }
  34.         else if(i<4)
  35.         {
  36.                 ch=disp_buf[i];
  37.                 if(ch&0x80 || ch&0x10 && tm_cnt>=MAX_CNT/2)
  38.                                 P0=0xff;
  39.                 else
  40.                 {
  41.                         if(i==0 && tm_cnt<MAX_CNT/2)
  42.                                 j=0x7f;                                //顯示小數點
  43.                         else
  44.                                 j=0xff;
  45.                         P0=0xff;
  46.                         P2=disp_seg[ch&0x0f]&j;
  47.                         P0=~(1<<i+4);
  48.                 }
  49.         }
  50.         else
  51.         {
  52.                 i-=5;
  53.                 if(i<13)
  54.                 {
  55.                         if(disp_bar==0)
  56.                                 j=14;                                                                //不顯示
  57.                         else
  58.                                 j=(disp_bar-1)/8;                //要顯示的段(0~j)
  59.                         ch=0xff;
  60.                         if(i<j && j<13)
  61.                                 ch=0;
  62.                         else if(i==j)
  63.                         {
  64.                                 j=(disp_bar-1)%8;
  65.                                 do
  66.                                         ch>>=1;
  67.                                 while(j--!=0);
  68.                         }
  69.                         P0=0xff;
  70.                         P2=ch;
  71.                         P0=disp_row[i];
  72.                 }
  73.         }
  74. }

  75. sbit SCLK=P1^1;        //I/O時鐘
  76. sbit CS=P1^0;                //片選
  77. sbit SDO=P1^2;        //數據線

  78. uchar TLC549_ADC(void)
  79. {
  80.         uchar i, dat=0;
  81.         SCLK=0;
  82.         CS=0;
  83.         for(i=0;i<8;i++)
  84.         {
  85.                 SCLK=1;                        // 上升沿讀數據
  86.                 dat<<=1;
  87.                 dat|=SDO;
  88.                 SCLK=0;
  89.         }
  90.         CS=1;
  91.         return(dat);
  92. }

  93. void main()
  94. {
  95.         uchar i;
  96.         uint ii;

  97.         TMOD=0x01;
  98.         TH0=TIMER0_HIGH;
  99.         TL0=TIMER0_LOW;
  100.         PT0=1;
  101.         ET0=1;
  102.         EA=1;
  103.         TR0=1;

  104. ……………………

  105. …………限于本文篇幅 余下代碼請從51黑下載附件…………
復制代碼

所有資料51hei提供下載:
TLC549.rar (1.24 KB, 下載次數: 9)


評分

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

查看全部評分

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

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 欧美日韩国产精品一区二区 | 国产在线精品一区二区三区 | 国产精品久久久久久久久污网站 | 久久久久久国 | 亚洲人在线播放 | 中文在线一区二区 | 亚洲免费片 | 国产精品一区二区视频 | 伊人激情综合网 | 日日干干 | 国产不卡一 | 中文字幕在线一区 | 超碰地址| 国产精品黄色 | 亚洲精品久 | 国产精品18hdxxxⅹ在线 | 91视频免费视频 | 国产福利在线播放 | 亚洲一区二区在线视频 | 国产a爽一区二区久久久 | 日韩网| 国产欧美在线一区二区 | 精品国产欧美 | 国产精品免费视频一区 | 91一区二区 | 中文字幕在线观看日韩 | 国产午夜亚洲精品不卡 | 欧美精品一二三 | 毛片区| 97精品视频在线观看 | 精品国产免费一区二区三区演员表 | 中文字幕在线一区二区三区 | 在线中文字幕日韩 | 国产色在线| 亚洲精品一区二区三区中文字幕 | 午夜www| 91视频网址 | 99久久精品免费看国产四区 | 精品久久久久久久久久久久 | 最新国产精品 | 精品国产精品一区二区夜夜嗨 |