標題: 新人有一些數(shù)碼管問題不懂 [打印本頁]

作者: lushaoqian    時間: 2017-10-20 12:54
標題: 新人有一些數(shù)碼管問題不懂
#include<reg52.h>            //52系列單片機頭文件
#define uchar unsigned char
#define uint unsigned int
uint x,y;
uchar code table[]={
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71};            //共陰極數(shù)碼管編碼
void display(uchar,uchar,uchar,uchar);  //聲明子函數(shù)
void delay(int);                      //聲明子函數(shù)
void main()
{
while(1)
{
display(1,2,3,4);          //主程序始終調(diào)用數(shù)碼管顯示子程序
}
}
void display(uchar a,uchar b,uchar c,uchar d)
{
P2=0xef;                               
P0=table[a];                       //給第一個數(shù)碼管送"a"
delay(1);                          //延時1ms                       
P2=0xdf;
P0=table;                      //給第二個數(shù)碼管送"b"
delay(1);                         //延時1ms
P2=0xbf;
P0=table[c];                      //給第三個數(shù)碼管送"c"
delay(1);                         //延時1ms
P2=0x7f;                          
P0=table[d];                      //給第三個數(shù)碼管送"d"
delay(1);                         //延時1ms
}
void delay(uint z)                   //延時子函數(shù)
{
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
我不懂每個‘’P2=‘’的意思
還有那個定義的   abcd是不是對應(yīng)的就是
uchar code table[]={
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71};   
這里面的前4個

數(shù)碼管.jpg (65.56 KB, 下載次數(shù): 45)

數(shù)碼管.jpg

作者: 一笑泯恩仇啊    時間: 2017-10-20 19:17
p2的不同賦值對應(yīng)打開不同的數(shù)碼管位選,abcd對應(yīng)在主函數(shù)中是數(shù)組的2到5位,而且你的顯示函數(shù)里面有一個明顯的錯誤,是table[b]才對
作者: liushuiwuqing    時間: 2017-10-20 19:28
比如 P2=0xbf ,就是讓單片機P2口  P2.7-P2.0的8個引腳輸出的電平依次為1011 1111,即讓P2.6這個端口輸出低電平,此時第3位數(shù)碼管亮。abcd應(yīng)該對應(yīng)的是數(shù)組里的第二到第五個,因為數(shù)組從0開始的。
作者: STC89C51    時間: 2017-10-20 19:51
這是數(shù)碼管動態(tài)顯示,P0口輸出段選信號,就是讓數(shù)碼管顯示數(shù)字,P2口控制位選,就是讓那個數(shù)碼管顯示。樓主說的“abcd”是十六進制,分別對應(yīng)10、11、12、13。




歡迎光臨 (http://www.torrancerestoration.com/bbs/) Powered by Discuz! X3.1