八位數碼管編程
㈠ 51單片機顯示八位數碼管的c語言程序
1、最開始,我們虛桐先打開keil。
㈡ 用C語言編制一個在8個數碼管上輪流顯示1~8的程序(單片機8051)
#include
<搭沒reg51.h>
#define
uint
unsigned
int
/坦枝啟/
宏定義
可以不用
#define
uchar
unsigned
char
sbit
//位申明
具體看你的數碼管是共陰還是共陽的
還有要用到的I/O口
char
tab[]={}
//顯示1--8的數碼管編碼;
voide
delay(uint
a)
//延遲a
ms
晶讓如振偉11.0592
{
uint
i,
j;
for(i=a;i>0;i--);
for(j=110;j>0;j--);
}
main()
{
while(1)
{
//在循環語句里執行顯示函數
}
}
說明:由於這個得看你的電路圖具體情況,上面只是一個框框,你可以自己該就可以!
㈢ 匯編語言共陰極8位數碼管計數 程序如下
你的模擬圖中的兩位數碼的陰極同時接州簡地了,就會同時顯示11,22,33,44........
必須要採用兩位動褲跡襲態掃描的方式來顯示才行的。
所以,你的模擬圖和程序都要修改。
模擬圖如下:
程序如下:
DAT0 EQU 30H;30H地址命名為DAT0
ORG 0000H
LJMP MAIN ;主程序入口
ORG 0003H
LJMP EXINT0 ;中斷0子程序
MAIN:
MOV SP,#6FH;設定堆棧地址
SETB IT0;T0採用負緣觸發信號
SETB EX0;開中斷0
SETB EA;開中斷總開關
MOV DAT0,#0;DAT0地址賦初始值0
LOOP:
CALL SEG7
SJMP LOOP;循環等待
EXINT0:
MOV A,DAT0
ADD A,#1;按十進制數加1
DA A
MOV DAT0,A
RETI
SEG7: ;顯示子程序
MOV DPTR,#DISPLAYTAB
MOV A,DAT0
ANL A,#0F0H;取十位數
SWAP A
MOVC A,@A+DPTR
MOV P0,#0FEH
MOV P2,A ;顯胡兄示十位
ACALL DELAY ;顯示一位要延時
MOV A,DAT0
ANL A,#0FH
MOVC A,@A+DPTR
MOV P0,#0FDH
MOV P2,A ;顯示個位
ACALL DELAY ;顯示一位要延時
RET
DELAY: ;延時子程序
MOV R7,#50
DER7:
MOV R6,#100
DJNZ R6,$
DJNZ R7,DER7
RET
DISPLAYTAB:
DB 3FH;0 共陰
DB 06H ;1
DB 5BH ;2
DB 4FH ;3
DB 66H ;4
DB 6DH ;5
DB 7DH ;6
DB 07H ;7
DB 7FH ;8
DB 6FH ;9
㈣ 求用c語言寫的八位數碼管動態顯示程序,P0控制段,P2控制位。
#include"reg51.h"
#include "intrins.h" //_nop_();延老拿時函數用
#define uchar unsigned char
#define uint unsigned int
#define SEG_OUT P0 //段碼輸出口
#define BIT_OUT P2 //掃描口
sbit dot=P2^7; //LED小數點控制
uchar code tab[12]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0xff,0xbf};
/* 共陽LED段碼表 "0" "1" "2" "3" "4" "5" "6" "7" "8" "9" "不亮" "-" */
uchar data dis_buff[8]={1,2,0,0,0,0}; //待顯示單元數據,共6個數據
unsigned long temp;
/*************1毫秒延時程序**************/
delay1ms(int t)
{
int i,j;
for(i=0;i<t;i++)
for(j=0;j<侍虧搭120;j++)
;
}
//
/***********LED顯空友示動態掃描函數**********/
display()
{
char k;
char m=0xfe;
for(k=0;k<8;k++) //8位LED掃描控制
{ BIT_OUT=0xff;
SEG_OUT=tab[dis_buff[k]];
BIT_OUT=m;
delay1ms(3);
m=(m<<1)|0x01;
}
dis_buff[0]=temp/10000000;
dis_buff[1]=(temp%10000000)/1000000;
dis_buff[2]=(temp%1000000)/100000;
dis_buff[3]=(temp%100000)/10000;
dis_buff[4]=(temp%10000)/1000;
dis_buff[5]=(temp%1000)/100;
dis_buff[6]=(temp%100)/10;
dis_buff[7]=temp%10;
}
/**************初始化程序****************/
void initiation()
{
TMOD=0x01;
TH0=-10000/256;
TL0=-10000%256; //10MS定時初值(T0計時用)
ET0=1;
TR0=1;
EA=1;
}
/****************定時器0中斷服務程序*****/
void init_timer0(void) interrupt 1
{
TH0=-10000/256;
TL0=-10000%256; //10MS定時初值(T0計時用)
t10ms++;
if(t10ms==100)
{
t10ms=0;
ts++;
if(ts==60)
{
temp++;
ts=0;
}
}
}
/****************主程序******************/
main()
{
initiation();
while(1)
{
display();
}
}
一秒加1
㈤ 使用匯編語言編程實現AT89C51八位數碼管動態顯示
使用匯編語言編程實現AT89C51八位數碼管襪汪並動態顯告跡示?陵中
㈥ 任務:用C語言設計程序,完成8個數碼管的顯示控制
假設8個數碼管公共端均接地隱森裂,同時顯示1-9
#include
#include
#define
uchar
unsigned
char
#define
uint
unsigned
int
uchar
code
dsy_code[]=
{
0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0x82,0xf8,0x80,0x90,0xff
};
void
delayms(uint
x)
{
uchar
t;
while(x--)
for(t=120;t>0;t--);
}
void
main()
{
uchar
i=0;
p0=0x00;
while(1)
{
p0=~dsy_code[i];
i=(i+1)%10;/*顯示0-9*/灶閉
delayms(200);
}
}
下面程序從左到右顯示
#include
#include
#define
uchar
unsigned
char
#define
uint
unsigned
int
uchar
code
dsy_code[]=
{
0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90
};
void
delayms(uint
x)
{
uchar
i;
while(x--)
{
for(i=200;i>0;i--);
}
}
void
main()
{
uchar
i,k=0x80;
while(1)
{
for(i=8;i>春陪0;i--)
{
p2=0xff;
k=_crol_(k,1);
p0=dsy_code[8-i];
p2=k;
delayms(3);
}
}
}
㈦ 8個數碼管依次顯示的程序
請問朋友你開關是電源開關還是控制鍵盤?
如果是電源開關,那麼匯鏈兆唯編程序好寫。
程序如下:
P2口送位控制,P0口送顯示數據(P1.0——P1.6對應數碼管abcdefg),用於共陽數碼管,
ORG 0000H;跳過中斷入口
LJMP START;
ORG 0030H;主程序開始
START:MOV SP,#60;初始化堆棧
MOV DPTR,#TAB;顯示數據表格首址送數據指針
MOV R0,#0FEH;位控制棚培寄存器
MOV R1,#0;取碼寄存器
MOV P2,#0FFH;
MOV R4,#255;延時控制
MOV P0,#0FFH;
MOV R2,#8;要顯示8個數,既8個數碼管同時顯示01234567;
L1:MOV A,R1;
MOVC A,@A+DPTR;
MOV P0,A;送顯示數據
MOV P2,R0;送位控制
DJNZ R4,$;猜帶延時
MOV P2,#0FFH;關顯示
INC R1;顯示下一個數據,
MOV A,R0;
RL A;下一位數碼管顯示
MOV R0,A;
DJNZ R2,L1;
AJMP START;
TAB:DB 0C0H;0
DB 0F9H;1
DB 0A4H;2
DB 0B0H;3
DB 99H; 4
DB 92H; 5;
DB 82H; 6
DB 0F8H;7
END
㈧ 試編寫程序:8位數碼管動態顯示數字AbcdEFgH
這是參考程序,把dofly_DuanMa[]裡面的值改成a、b、c、d、e、f、g、h的對應段碼值就行,然後位選信號看下你的連接電路是怎麼接的。希望採納,有疑問請追問。
#include<reg52.h>
#define DataPort P0 //定義數據埠 程序中遇到DataPort 則用P0 替換 sbit LATCH1=P2^2;//定義鎖存使能埠 段鎖存
sbit LATCH2=P2^3;// 位鎖存
unsigned char code dofly_DuanMa[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};// 顯示段碼值01234567
unsigned char code dofly_WeiMa[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};//分別對應相應的數碼管點亮,即位碼
void Delay(unsigned int t); //函數聲明
/*------------主函數-----------------*/
main() {
unsigned char i=0;
while(1)
{ DataPort=dofly_WeiMa[i]; //取位碼
LATCH2=1; //位鎖存
LATCH2=0;
DataPort=dofly_DuanMa[i]; //取顯示數據,段碼
LATCH1=1; //段鎖存
LATCH1=0;
Delay(600); // 掃描間隙延時,時間太長會閃爍,太短會造成重影,
i++;
if(8==i) //檢測8位掃描完全結束?如掃描完成則從第一個
i=0; }
}
/*------------------- 延時函數,含有輸入參數 unsigned int t,無返回值 unsigned int 是定義無符號整形變數,其值的范圍是 0~65535 ----------------*/
void Delay(unsigned int t)
{ while(--t); }
㈨ 八位動態數碼管,編程每按一次鍵,數值加一
/岩臘/我只加到了9999。。塌神
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
uchar display_code[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90};
uint Count=0;
sbit AN3=P2^0;
void delay()
{
uchar i;
for(i=250;i>0;i--);
}
void disp()
{
P3=0x01;
P0=display_code[Count/100/10];
delay();
P3=0x00;
P3=0x02;
P0=display_code[Count/團棗虧100%10];
delay();
P3=0x00;
P3=0x04;
P0=display_code[Count/10];
delay();
P3=0x00;
P3=0x08;
P0=display_code[Count%10];
delay();
P3=0x00;
}
void main()
{
uint i;
while(1)
{
if(AN3==0)
{
Count++;
while(AN3==0);
if(Count>9999) Count=0;
}
for(i=100;i>0;i--)
{
disp();
}
}
}
㈩ 如何用vhdl語言編寫一個8位七段數碼管
PROCESS (HighCLK) --動態數碼管控制兄鉛顯羨蘆好示部分嘩森x0dx0aBEGINx0dx0a IF HighCLK 'EVENT AND HighCLK =ƇTHENx0dx0a CASE Q ISx0dx0a WHEN 0 => Y<="000"; VIEW<=h(7 DOWNTO 4); Q<= 1;x0dx0a WHEN 1 => Y<="001"; VIEW<=h(3 DOWNTO 0); Q<= 2;x0dx0a WHEN 2 => Y<="010"; VIEW<=c(7 DOWNTO 4); Q<= 3;x0dx0a WHEN 3 => Y<="011"; VIEW<=c(3 DOWNTO 0); Q<= 4;x0dx0a WHEN 4 => Y<="100"; VIEW<=s(7 DOWNTO 4); Q<= 5;x0dx0a WHEN 5 => Y<="101"; VIEW<=s(3 DOWNTO 0); Q<= 6;x0dx0a WHEN 6 => Y<="110"; VIEW<="0000"; Q<= 7;x0dx0a WHEN 7 => Y<="111"; VIEW<="0000"; Q<= 0;x0dx0a WHEN OTHERS => Q <= 0;x0dx0a END CASE;x0dx0a ELSE NULL;x0dx0a END IF; x0dx0a END PROCESS;x0dx0a給分吧 x0dx0ax0dx0aHighCLK是掃描時鍾設一個較高的時鍾就行,我一般是設定為2000 HZ,VIEW 接你要顯示的信號,Y 控制第幾個數碼管顯示,比如你要第一個數碼管顯示8就把第一條改成:x0dx0a WHEN 0 => Y<="000"; VIEW<="1000"; Q<= 1;