求一个单片机程序,要使单片机驱动数码管进行1--8的循环显示,还要可以停止在某一个数字上,相当于选号。

作者&投稿:致科 (若有异议请与网页底部的电邮联系)
求一个单片机程序,要八个led灯依次点亮,同时一个数码管依次显示1-8 延时一秒 最好是汇编语言的~

ORG 0000H JMP BEGIN ORG 000BH LJMP T0INT ORG 0030H;---------------------------------------TABLE: ; 共阴极数码管显示代码表 DB 3FH,06H,5BH,4FH,66H ;01234 DB 6DH,7DH,07H,7FH,6fh ;56789;---------------------------------------BEGIN: MOV SP,#5FH MOV TMOD,#01H MOV TH0,#3CH MOV TL0,#0B0H SETB TR0 SETB ET0 SETB EA MOV R2,#20 MOV P1,#0FEH MOV DPTR,#TABLE MOV A,#1 MOVC A,@A+DPTR MOV P0,A MOV R3,#1 SJMP $;---------------------------------------T0INT: CLR TR0 MOV TH0,#3CH MOV TL0,#0B0H SETB TR0 DJNZ R2,T0INTE MOV R2,#20 INC R3 MOV A,R3 CJNE A,#9,T0INT1 MOV A,#1T0INT1: MOV DPTR,#TABLE MOVC A,@A+DPTR MOV P0,AT0INTE: RETI END

#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 t;
while(x--)
{
for(t=120;t>0;t--);
}
}
void main()
{
uchar k,m=0x80;
P0=0xff;
P2=0x00;
while(1)
{
for(k=0;k<8;k++)
{
m=_crol_(m,1);
P2=m;
P0=DSY_CODE[k+1];
DelayMS(2);
}
}
}
程序来自:《单片机C语言程序设计实训100例——基于8051+Proteus仿真》

你想以什么方式选号?矩阵键盘?
其实,可以这样,你就用中断
中断里面加个空循环,放手即跳出。
比方说sbit stop=P3^5;
.....
void interrupt_s() interrupt 0
{
if(stop== 0) while(stop==0);// 假设按下为低电平。
}

/********************************************************************
* 描述 : 该程序为数码管静态显示程序,并且通过实现锁存器的功能。
如果按了P3.2口,P3.7口由高电平变到低电平后,锁存器锁存功能使能。再按P3.4口,数码管的值就不会有所改变。
再按P3.2口,P3.7口电平由低变高,锁存功能失效。数码管的值又会改变。
***********************************************************************/
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int

sbit KEY = P3^4; //独立按键的T0
sbit KEY_Lock = P3^2; //这里,按了该按键后,实现解锁和开锁。
sbit LOCK = P3^7; //锁存功能

/*下一行你可以试着把 code 去掉看看试验结果。 去掉后 table[] 会被存到 RAM 中,因为单片机的 RAM 比 ROM 小的多*/
/*所以,对于不会改变的值应该用 code 或者 #define 去定义,让这些固定值存到 ROM 中去*/
uchar code table[16] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
/*下一行的数组可以显示数值外,还可以显示数码管的点*/
uchar code table_d[16] = {0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,0x87,0xff,0xef,0xf7,0xfc,0xb9,0xde,0xf9,0xf1};

/********************************************************************
* 名称 : Delay()
* 功能 : 延时,延时时间为 10ms * del
* 输入 : del
* 输出 : 无
***********************************************************************/
void Delay(uint del)
{
uint i,j;
for(i=0; i<del; i++)
for(j=0; j<1827; j++)
;
}

/********************************************************************
* 名称 : Main()
* 功能 : 主函数
* 输入 : 无
* 输出 : 无
***********************************************************************/
void main()
{
uchar i = 0;
LOCK = 1;
//P2=0xff;
while(1)
{
P0 = table[i % 16]; //在这里取 i 的个位数,不带点显示
//P0 = table_d[i % 16]; //带点显示
if(KEY == 0)
{
Delay(1); //软件消抖,试验为20ms
if(KEY == 0)
{
i++;
}
Delay(50); //延时0.5秒后进行下一次的按键检测
}
if(KEY_Lock == 0)
{
Delay(1); //软件消抖,试验为20ms
if(KEY_Lock == 0)
{
LOCK = !LOCK;
}
Delay(50); //延时0.5秒后进行下一次的按键检测
}
}
}

这个很简单,你百度一下有很多程序无论是汇编还是c语言。

求一个单片机程序,要使单片机驱动数码管进行1--8的循环显示,还要可以...
答:其实,可以这样,你就用中断 中断里面加个空循环,放手即跳出。比方说sbit stop=P3^5;...void interrupt_s() interrupt 0 { if(stop== 0) while(stop==0);// 假设按下为低电平。}

求一个单片机外部中断程序,要求用按键模拟单片机外部中断输入源,当按键...
答:1、打开Keil μVision编译器,新建一个工程,然后保存在硬盘上的位置,然后选择Atmel-AT89C51单片机为模型,并添加STARTUP.A51文件,然后在当前目录下新建一个C文件,并将其添加入工作路径。2、首先要导入51单片机的头文件,否则后续使用的端口都会出现未定义的情况,然后在主函数中,使得EA=1,即总中断...

...89C51单片机连接,用串口通信使按下其中一个单片机的键另一个单片机...
答://主程序 void main(){ uchar Operation_No=0,recive;SCON=0x50; //串口模式1 TMOD=0x20; //T1工作模式2 PCON=0x00; //波特率不倍增 TH1=0xfd;TL1=0xfd;TI=0;TR1=1;while(1){ if(K1==0) //按下K1时选择操作代码0,1,2,3 { while(K1==0);Operation_No=(Opera...

求一个单片机程序
答:delay(600);} while(1);}

跪求一个51单片机控制ws2812灯带的程序,
答:WS2812是一种自带驱动IC的LED灯珠,可以通过程序控制每个LED的颜色和亮度。以下是一个简单的程序,用于控制144个WS2812 LED灯珠。这个程序是用C语言编写的,用于STC89C52RC单片机。首先,我们需要知道WS2812数据传输协议的一些基本概念。WS2812 LED灯珠需要接收24位数据,每8位代表一个颜色(红色,绿色,蓝色...

想求一个单片机程序,使步进电机轴转90度后,再返回原点,请网友帮忙?
答:void delay_01(unsigned int j0 ) //0.01毫秒延时程序.J0等于50时两细分为200转/分钟 { unsigned int j1;for(j1=0;j1<j0;j1++);} void main (void){ delay_1(120);k=100;zf=1;while(1){ for(num=0;num<100;num++)//转90度 { pwm=0;delay_01(k);pwm=1;delay_01(k);} ...

求一个51单片机汇编程序,让四个数码管动态显示1 2 3 4,不是静态轮流显 ...
答:include<stc89c51RC.h> define uchar unsigned char define uint unsigned int int counter=0;sbit w0=P2^7;sbit w1=P2^6;sbit w2=P2^5;sbit w3=P2^4;uchar code table[]={ 0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71 };void ...

用C语言写一个程序,使单片机的P3口的高四位LED和低四位LED轮流点亮...
答:你要实现的是高4位或低4位是4个一起亮? 实际上是P3=0XF7,延时,P3=0X7F,延时。。。只有第4、8两个LED轮流点亮。因为亮的两灯的前3条执行得太快,根本看不出。

跪求程序!!!寻高手解答!!两个程序!使单片机串行显示!!
答:上位机(发送键码):KEYCNT EQU 30H ORG 00H INTI: MOV R0,#00H MOV TMOD,#20H ;选择定时器模式2,计时方式 MOV TL1,#0F2H ;预置时间常数,波特率为1200 MOV TH1,#0F2H MOV 87H,#00H ;PCON=00,使SMOD=0 SETB TR1 ;启动定时器1 MOV SCON,#50H ;串行口工作于方式1,允许串行接收...

求一个单片机程序
答:SM1 = 1;EA = 1;TR1 = 1;ES = 1;REN = 1;wela = 1;P0 = 0xff;wela = 0;} void delay(UINT ms){ UINT x, y;for(x = ms; x; x--)for(y = 197; y; y--);} void port() interrupt 4 { RI = 0;flag = 1;} void display(UCHAR first, UCHAR second, UCHAR ...