0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

串行口驅(qū)動LED顯示的C語言源代碼

Wildesbeast ? 來源:單片機教程網(wǎng) ? 作者:單片機教程網(wǎng) ? 2020-09-26 11:36 ? 次閱讀

//本文介紹一個串行口驅(qū)動led顯示的c語言源程序

//一個74hc595位移寄存器驅(qū)動三極管驅(qū)動led位,

//兩個74hc595驅(qū)動led段,方式位5位x8段x2=10個數(shù)碼管

//5分頻,每次掃描時間位1.25ms

//定義特殊符號

#define nul 0xf

#define qc 0xc

#define qb 0xb

#define q_ 0xa

#define q__ 0xd

#define q___ 0xe

#define qp 0x10

#define qe 0x11

#define qj 0x12

#define qn 0x13

#define qf 0x14

#define qa 0x15

#define qr 0x16

#define qd 0x17

#define qu 0x18

#define ql 0x19

#define qh 0x1a

#define qwen 0x1b

#define qt 0x1c

#define qla 0x1d

#define qlb 0x1e

#define qlc 0x1f

#define qld 0x20

#define qle 0x21

#define qlf 0x22

#define qlg 0x23

#define qldp 0x24

//顯示段信息,不同led排列組合的段信息只需更改8個數(shù)值即可。

//因此,該定義具有通用性。

// 顯示

// -d 20

// |c 40 |e 10

// - g 80

// |b 2 |f 4

// _a1 .dp 8

#define pa 1

#define pb 2

#define pc 0x40

#define pd 0x20

#define pe 0x10

#define pf 4

#define pg 0x80

#define pdp 8

//--------------

#define l0 pdp+pg

#define l1 255-pf-pe

#define l2 pdp+pc+pf

#define l3 pdp+pc+pb

#define l4 pdp+pa+pb+pd

#define l5 pdp+pb+pe

#define l6 pdp+pe

#define l7 pdp+pc+pg+pb+pa

#define l8 pdp

#define l9 pdp+pb

#define la pdp+pa

#define lb pdp+pd+pe

#define lc pdp+pg+pe+pf

#define ld pdp+pc+pd

#define le pdp+pe+pf

#define lf pdp+pe+pf+pa

#define l_ 255-pg

#define lnul 255

#define ll pdp+pg+pd+pf+pe

#define lp pdp+pa+pf

#define lt pdp+pd+pe+pf

#define lr pdp+pe+pf+pg+pa

#define ln pdp+pg+pa

#define lh pdp+pd+pe+pa

#define ly pdp+pb+pd

#define lu pdp+pg+pd

#define l__ pdp+pg+pb+pc+pe+pf

#define l___ l__-pg

#define l_1 255-pa

#define l_2 255-pa-pg

#define lj 255-(pe+pf+pa)

#define lwen 255-(pd+pe+pg+pb)

#define lall 0

#define lla 255-pa

#define llb 255-pb

#define llc 255-pc

#define lld 255-pd

#define lle 255-pe

#define llf 255-pf

#define llg 255-pg

#define lldp 255-pdp

//串行口驅(qū)動led顯示程序定義結(jié)束

//串行送出的位信息,目前是10位led顯示。

unsigned char code un_dig[]={0x7f,0xbf,0xdf,0xef,0xf7,0xfb};

//串行送出的短信息。

unsigned char code un_disp[]={l0,l1,l2,l3,l4,l5,l6,l7,l8,l9,l_,lb,lc,l__,l___,lnul,lp,le,lj,ln,lf,la,lr,ld,lu,

ll,lh,lwen,lt,lla,llb,llc,lld,lle,llf,llg,lldp,lnul};

sbit d_clk=P0^0; //移位時鐘

sbit d_dat=P0^1; //移位數(shù)據(jù)

sbit d_st=P0^2; //移位鎖定

unsigned char dig; //位掃描計數(shù)器

unsigned char d[10]; //顯示緩沖

//送出8位串行數(shù)據(jù)

void out_disp(unsigned char dd) {

unsigned char i;

for (i=0;i《8;i++) {

if (dd&1) d_dat=1; else d_dat=0;

d_clk=0;

dd》》=1;

d_clk=1;

}

}

//控制小數(shù)點和閃爍,顯示數(shù)據(jù)|0x040表示有小數(shù)點;顯示數(shù)據(jù)|0x80表示閃爍。

void out_displ(unsigned char dd) {

if (dd》=0x80) {

if (s001》flash_time) {out_disp(0xff);return;}

}

dd&=0x7f;

if (dd》=0x40) {

dd=un_disp[dd&0x3f]^pdp;

} else dd=un_disp[dd];

out_disp(dd);

}

unsigned int s001; //閃爍時間參考

void int_t0(void) interrupt 1 {

unsigned char dd;

TL0=TL0+30;TH0=0xfb; //800

time++;

if ((++s001)》=800) s001=0;

// 顯示

if ((++dig)》4) dig=0;

d_st=0;

dd=d[dig+5];

out_displ(dd);

dd=d[dig];

out_displ(dd);

out_disp(un_dig[dig]);

d_st=1;

}

//串行口驅(qū)動led顯示程序主程序開始

void main(void) {

unsigned char i;

TMOD=0x1;

TR0=ET0=1;

EA=1;

for (i=0;i《10;i++) d[i]=i; //display test

while (1) {}

}

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • led
    led
    +關(guān)注

    關(guān)注

    240

    文章

    23062

    瀏覽量

    657050
  • 三極管
    +關(guān)注

    關(guān)注

    142

    文章

    3590

    瀏覽量

    121500
  • 寄存器
    +關(guān)注

    關(guān)注

    31

    文章

    5294

    瀏覽量

    119814
收藏 人收藏

    評論

    相關(guān)推薦

    串行口的編程

    如何用簡單的C語言串行口
    發(fā)表于 12-22 16:22

    《微機原理與匯編語言》89C51串行口串行通信技術(shù)

    `《微機原理與匯編語言》89C51串行口串行通信技術(shù)[hide][/hide]`
    發(fā)表于 04-05 12:51

    51單片機 匯編語言 串行口發(fā)送,求代碼

    用匯編語言寫,串行口發(fā)送10個數(shù)據(jù),用中斷的方式,求代碼
    發(fā)表于 12-14 16:56

    如何用串行口擴展并行輸出口

    串行口擴展并行輸出口一、實驗?zāi)康亩?、實驗?nèi)容三、實驗步驟四、C代碼如下五、實驗結(jié)果六、實驗體會一、實驗?zāi)康恼莆誂T89C52串行口方式0的
    發(fā)表于 12-06 06:20

    單片機串行口應(yīng)用舉例

    單片機串行口應(yīng)用舉例:       在計算機分布式測控系統(tǒng)中,經(jīng)常要利用串行通信方式進行數(shù)據(jù)傳輸。80C51單片機的串行口
    發(fā)表于 12-03 22:54 ?105次下載

    80C51的串行口

    80C51的串行口:6.2.1  80C51串行口的結(jié)構(gòu)      有兩個物理上獨立的接收、發(fā)送緩沖器SBUF,它們占用同一地址99H
    發(fā)表于 12-03 22:56 ?30次下載

    串行口動態(tài)掃描顯示電路

    單片機并行I/O數(shù)量總是有限的,有時并行需作其他更重要的用途,一般也不會用數(shù)量眾多的并行I/O專門用來驅(qū)動顯示電路,能否用80
    發(fā)表于 04-03 23:49 ?1310次閱讀

    PC串行口引腳定義圖

    PC串行口引腳定義圖 PC/AT 機上的串行口是 9 針公插座,引腳定義為:  
    發(fā)表于 11-27 12:38 ?1796次閱讀
    PC<b class='flag-5'>串行口</b>引腳定義圖

    串行口動態(tài)掃描顯示電路編程實例

    串行口動態(tài)掃描顯示電路編程實例 單片機并行I/O數(shù)量總是有限的,有時并行需作其他更重要的用途,一般也不會用
    發(fā)表于 03-14 14:18 ?1899次閱讀
    <b class='flag-5'>串行口</b>動態(tài)掃描<b class='flag-5'>顯示</b>電路編程實例

    51系列單片機中模擬串行口C語言實現(xiàn)_栗小寬

    5 1 系列單片機中模擬串行口C 語言實現(xiàn).pdf
    發(fā)表于 10-29 11:34 ?4次下載

    串行口

    串行口
    發(fā)表于 12-16 15:36 ?0次下載

    《微機原理與匯編語言》89C51串行口串行通信技術(shù)

    《微機原理與匯編語言》89C51串行口串行通信技術(shù)
    發(fā)表于 12-14 15:07 ?0次下載

    SPI總線驅(qū)動C語言源代碼詳細概述

    本文檔的主要內(nèi)容詳細介紹的是SPI總線驅(qū)動C語言源代碼詳細概述。
    的頭像 發(fā)表于 09-26 11:36 ?7090次閱讀

    基于C語言LED呼吸燈簡單源代碼

    基于C語言LED呼吸燈簡單源代碼
    發(fā)表于 03-10 10:49 ?16次下載
    基于<b class='flag-5'>C</b><b class='flag-5'>語言</b>的<b class='flag-5'>LED</b>呼吸燈簡單<b class='flag-5'>源代碼</b>

    CC2540驅(qū)動C語言源代碼

    CC2540驅(qū)動C語言源代碼
    發(fā)表于 03-10 11:13 ?5次下載
    CC2540<b class='flag-5'>驅(qū)動</b>的<b class='flag-5'>C</b><b class='flag-5'>語言</b><b class='flag-5'>源代碼</b>