C語言數碼管是共陰共陽程序,C語言實現共陰極數碼管操作

共陰極或者共陽極數碼管,因為其需要電流大,而一般51輸出電流低,需要鎖存器。買的開發板使用的共陰極數碼管。

至于其構造,找個相關方面的書看看,這里主要是對做好的電路板進行編程。

剛開始的時候,感覺在數碼管上顯示數字很厲害。但是等到自己寫這篇日志的時候,才發現了了。。

在對數碼管編程前,需要對鎖存器有所了解。買的開發板上用的是74HC573貼片式的。

74HC573真值表

輸入 輸出

!OE LE D | Q

L H H | H

L H L | L

L L X | Q0

H X X | X

使用的時候74HC573的 !OE 引腳需要接低電平,否則D跟Q都成任意電平了,不聽自己使喚了。失去鎖存器的作用,因此必須讓!OE為低電平。

通過74HC573在LE端為高電平時,把單片機的IO電平信號鎖存。然后把LE變為低電平,這樣不論單片機的IO電平如何變化,74HC573的輸出口電平都保存LE變為低電平之前的數值,從而實現鎖存。

由于多位數碼管的段都是接在相同的IO口上,因此在買的這塊開發板上分別用兩個573對多位數碼管的段、位進行鎖存。

一、靜態數碼管顯示的實現

這個實現比較簡單,通過位鎖存器數據判斷那個數碼管點亮,那個不點亮。然后通過段鎖存器顯示被選中的數碼管上的數字或字母。

位:

由于是共陰極數碼管,當該位置0時,該位數碼管被選中,即通電后點亮。

段:

這個就是顯示被選中的數碼管顯示什么內容了。網上有數碼管小助手。或者自己一個個的計算得到。

顯示多位數碼管中某一個數碼管的代碼:

顯示字母“L”

#include

#include "hj_init.h"

sbit WE = P2^1;

sbit DU = P2^0;

void main()

{

WE = 1;

P0 = 0xfe;

WE = 0;

DU = 1;

P0 = 0x38;

DU = 0;

while(1);

}

效果圖:

d24fc7db369853a8c60848c011651043.png

顯示多位數碼管中兩個數碼管代碼:

這個主要就是更改位的數值。想讓那個亮,就置0。因為是共陰極數碼管:P

除了這個靜態的占IO的缺點外,還有就是不論你選中幾個數碼管,顯示的數字都是一樣的,不好玩。至于顯示不同的內容,就要靠動態數碼管了。

二、動態數碼管顯示的實現

說是動態,其實還是靜態一位一位的顯示。但是因為速度快,而人眼有視覺暫留作用,感覺上是動態顯示而已。如果想看清到底是如何顯示的,可以把延時的時間變長,這樣能更好的看清是如何顯示的。

動態里面還有個關鍵的地方就是消影。P0 = 0xff 。

先把段選數據送到鎖存器中。再送位選數據。中間如果不加上消影,在顯示位選數據前,P0仍保持上次的段選數據,會造成干擾。因此需要添加消影。但后來發現如果先送位選的數據,在打開位對應的鎖存器,可以省去P0 = 0xff 這句專用的消影語句。但先送位選數據,再打開相應鎖存器,應該也算消影的方式吧。

實現8位共陰數碼管動態顯示的代碼如下:

#include

#include "delay.h"

#define uchar unsigned char

#define uint unsigned int

#define N 1 //方便調整延時時間

sbit DUAN = P2^0; //聲明段鎖存器的LE(鎖存允許端,或鎖存控制端)引腳

sbit WE = P2^1; //聲明位鎖存器的LE(鎖存允許端,或鎖存控制端)引腳

//數碼管碼表

uchar code table[]={

0x3f,0x06,0x5b,0x4f, //數字0~3

0x66,0x6d,0x7d,0x07, //數字4~7

0x7f,0x6f,0x77,0x7c, //數字8、9、A、b

0x39,0x5e,0x79,0x71 //C、d、E、F

};

void main()

{

hj_init();

while(1)

{

/*數字0x06 = 1*/

//送入段選數據

DUAN = 1 ;

P0 = table[3];

DUAN = 0 ;

P0 = 0xff; //消影

//送入位選數據

WE = 1;

P0 = 0xfe;

WE = 0;

delayms(N); //延時

/***********************************************************/

/*數字0x5b = 2*/

//送入段選數據

DUAN = 1 ;

P0 = table[3];

DUAN = 0 ;

P0 = 0xff; //消影

//送入位選數據

WE = 1;

P0 = 0xfd;

WE = 0;

delayms(N); //延時

/***********************************************************/

/*數字0x4f = 3*/

//送入段選數據

DUAN = 1 ;

P0 = table[9];

DUAN = 0 ;

P0 = 0xff; //消影

//送入位選數據

WE = 1;

P0 = 0xfb;

WE = 0;

delayms(N); //延時

/***********************************************************/

/*數字0x66 = 4*/

//送入段選數據

DUAN = 1 ;

P0 = table[8];

DUAN = 0 ;

P0 = 0xff; //消影

//送入位選數據

WE = 1;

P0 = 0xf7;

WE = 0;

delayms(N); //延時

/***********************************************************/

/*數字0x6d = 5*/

//送入段選數據

DUAN = 1 ;

P0 = table[4];

DUAN = 0 ;

P0 = 0xff; //消影

//送入位選數據

WE = 1;

P0 = 0xef;

WE = 0;

delayms(N); //延時

/***********************************************************/

/*數字0x7d = 6*/

//送入段選數據

DUAN = 1 ;

P0 = table[8];

DUAN = 0 ;

P0 = 0xff; //消影

//送入位選數據

WE = 1;

P0 = 0xdf;

WE = 0;

delayms(N); //延時

/***********************************************************/

//送入段選數據

DUAN = 1 ;

P0 = table[7];

DUAN = 0 ;

P0 = 0xff; //消影

//送入位選數據

WE = 1;

P0 = 0xbf;

WE = 0;

delayms(N); //延時

/***********************************************************/

//送入段選數據

DUAN = 1 ;

P0 = table[6];

DUAN = 0 ;

P0 = 0xff; //消影

//送入位選數據

WE = 1;

P0 = 0x7f;

WE

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/453298.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/453298.shtml
英文地址,請注明出處:http://en.pswp.cn/news/453298.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

數據庫主要特點

(1)實現數據共享。數據共享包含所有用戶可同時存取數據庫中的數據,也包括用戶可以用各種方式通過接口使用數據庫,并提供數據共享。 (2)減少數據的冗余度。同文件系統相比,由于數據庫實現了數據共享,從而避免了用戶各自建立應用文…

百度與華為全面戰略合作 人工智能手機真的要來了

視頻加載中...12月21日百度和華為在北京宣布達成全面戰略合作。這次合作內容主要包括三點,首先是在語音、語義、視覺和VR上的自然交互,這是百度為華為手機AI賦能的基礎層。第二是基于華為HiAI平臺和百度PaddlePaddle深度學習框架,共建人工智能…

JavaScript數據類型

一、JavaScript數據類型主要分為原始類型和引用數據類型。 原始類型包括(不可拆分的東西):Number、String、Boolean、Null、Undefined。引用數據類型包括:Object(Array,Date,RegExp,Function)ty…

funcode拼圖游戲c語言程序,同求funcode平臺下拼圖游戲的C語言代碼

做了好幾天,寫了好多回就是不對,徹底崩潰。。#include "CommonAPI.h"//#include "LessonX.h"#include#define BLOCK_COUNT 4int g_iGameState;intg_iBlockState[BLOCK_COUNT][BLOCK_COUNT];charg_szBlockName[BLOCK_COUNT*BLOCK_COU…

什么是透明傳輸

透明傳輸是指不管所傳數據是什么樣的比特組合,都應當能夠在鏈路上傳送。當所傳數據中的比特組合恰巧與某一個控制信息完全一樣時,就必須采取適當的措施,使收方不會將這樣的數據誤認為是某種控制信息。這樣才能保證數據鏈路層的傳輸是透明的。…

Android 秒級編譯FreeLine

項目地址:FreeLine FreeLine官網: FreeLine 1. 安裝FreeLine插件 File->Settings->Plugins, 搜索輸入FreeLine Plugin, 查找到后進行安裝并重啟Android Studio。 圖1.png安裝好之后,在工具欄就會出一個圖標 圖2.png2. 配置gradle 根目錄build.gr…

JS實現大整數乘法(性能優化、正負整數)

本方法的思路為: 一:檢查了輸入的合法性(非空,無非法字符) 二:檢查輸入是否可以進行簡單計算(一個數為 0,1,1,-1) 三:去掉輸入最前面可…

c語言中- gt he,C語言中deta,fabs,lt;stdlib.hgt;,lt;stdio.hgt;分別是什么意思

fabs 編輯本段C語言數學函數:fabs 函數簡介  原型:在TC中原型是extern float fabs(float x);,在VC6.0中原型是double fabs( double x );。   用法:#include   功能:求浮點數x的絕對值   說明:計算|x|, 當x不為…

物理層

目的: 物理層要盡可能地屏蔽掉物理設備和傳輸媒體,通信手段的不同,使數據鏈路層感覺不到這些差異,只考慮完成本層的協議和服務。 給其服務用戶(數據鏈路層)在一條物理的傳輸媒體上傳送和接收比特流…

C語言中的二級指針(雙指針)

二級指針又叫雙指針。C語言中不存在引用,所以當你試圖改變一個指針的值的時候必須使用二級指針。C中可以使用引用類型來實現。 下面講解C中的二級指針的使用方法。 例如我們使用指針來交換兩個整型變量的值。 錯誤代碼如下: 一級指針 [cpp] view pla…

測試環境服務器硬盤塞滿問題排查

項目中出現的問題 某天下午測試環境服務器出現tab無法補全命令,給出的提示大概意思就是說,無可用空間無法創建臨時文件,不過這次跟上次出現的問題比較像,上次服務器出現的問題,因此樓主判斷可能是服務器數據盤被占滿,果…

alpine_glibc 構建sun jdk 8的docker鏡像

2019獨角獸企業重金招聘Python工程師標準>>> 構建系統基礎鏡像 alpine glibc 的Dockerfile內容如下&#xff1a; alpine:3.6 MAINTAINER tongqiang<tongqiangyingmail.com># Here we install GNU libc (aka glibc) and set C.UTF-8 locale as default.ENV ALP…

單工 半雙工 全雙工

1 單工 單工就是指A只能發信號&#xff0c;而B只能接收信號&#xff0c;通信是單向的&#xff0c;就象燈塔之于航船——燈塔發出光信號而航船只能接收信號以確保自己行駛在正確的航線上。 2 半雙工 半雙工就是指A能發信號給B&#xff0c;B也能發信號給A&#xff0c;但這兩…

c語言兩個循環的ys,c語言編程:從鍵盤輸入兩個數,求它們的最小公倍數

滿意答案flywisdom2019.06.20采納率&#xff1a;44% 等級&#xff1a;9已幫助&#xff1a;1064人main(){int p,r,n,m,temp;printf("Please enter 2 numbers n,m:");scanf("%d,%d",&n,&m);//輸入兩個正整數.if(n{tempn;nm;mtemp;}pn*m;//P是原來…

每日微軟面試題

每日微軟面試題——day 1 <以下微軟面試題全來自網絡> <以下答案與分析純屬個人觀點&#xff0c;不足之處&#xff0c;還望不吝指出^_^> 題&#xff1a;.編寫反轉字符串的程序&#xff0c;要求優化速度、優化空間。 分析&#xff1a;構建兩個迭代器p 和 q &…

第八章 多態

第八章 多態1. 重寫一個類通過繼承來產生一個新類&#xff0c;繼承了父類的所有變量和方法&#xff0c;在繼承這些變量和方法的時候&#xff0c;子類也可以具有自己獨特的特征和行為。Public class fruit{Public void print(){System.out.println(“這是超類的方法”);}}Clas…

Ionic Angular自動捕獲錯誤 配置Angular2.x +

配置app.module.ts import { Pro } from ionic/pro;// These are the imports required for the code below, // feel free to merge into existing imports. import { Injectable, Injector } from angular/core; import { IonicErrorHandler } from ionic-angular;const Ioni…

信道和物理媒體的區別

一個信道可以包含很多的物理媒體嗎&#xff0c;同時一個物理媒體也可以包含很多的信道。 信道借助于物理媒體實現數據傳輸&#xff0c;在比較遠的數據傳輸過程中可能會使用多個不同的物理媒體實現數據的傳輸。 而一個物理媒體也可以借助于多路復用技術實現多條信道

c語言刪除尾部空格函數,新人提問:如何將輸出時每行最后一個空格刪除

該樓層疑似違規已被系統折疊 隱藏此樓查看此樓如何將每行最后一個空格刪除&#xff0c;使矩陣只有數字間有空格&#xff0c;沒有多余空格&#xff1f;#include#includeint main(){int i,j,k,m,n,x,h,y;int a[15][15]{0};while(scanf("%d",&i)){k1;for(n1;n<i;…

jsonArray與 jsonObject區別與js取值

一、JSONObject和JSONArray的數據表示形式 JSONObject的數據是用 { } 來表示的&#xff0c; 例如&#xff1a; { "id" : "123", "courseID" : "huangt-test", "title" : "提交作業", "content" : nu…