当前位置:首页 » 编程软件 » 八位数码管编程

八位数码管编程

发布时间: 2023-04-29 18:43:19

㈠ 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;

热点内容
红点角标算法 发布:2025-07-12 12:11:16 浏览:843
开心消消乐服务器繁忙什么情况 发布:2025-07-12 12:11:14 浏览:238
数据库的封锁协议 发布:2025-07-12 12:10:35 浏览:724
如何配置一台长久耐用的电脑 发布:2025-07-12 11:43:03 浏览:601
昆明桃源码头 发布:2025-07-12 11:38:45 浏览:568
大司马脚本挂机 发布:2025-07-12 11:38:35 浏览:458
数据库实时监控 发布:2025-07-12 11:31:33 浏览:743
vb6反编译精灵 发布:2025-07-12 11:23:12 浏览:997
模拟存储示波器 发布:2025-07-12 11:10:58 浏览:814
怎么查看安卓真实运行内存 发布:2025-07-12 11:08:39 浏览:883