求一个单片机程序,要使单片机驱动数码管进行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语言。


求一个51单片机延时1秒的程序,用汇编!!
DEL1S:MOV R7,#10 D1: MOV R6,#200 D2: MOV R5,#250 DJNZ R5,DJNZ R6,D2 DJNZ R7,D1 RET 说明:1、如果不使用R5、R6、R7可以用别的单元替换,比如换成30H、31H、32H等等 2、这个程序是12M时钟,如果时钟不同,要修改数值。如6M时钟,要把MOV R7,#10 修改成:MOV R7,#5 ...

求一单片机c语言程序:两个按键控制两个led,按键按住不放led闪烁,松手...
一个按键时程序如下:while(1){ if(key==0)\/\/按键按下 { delayms(20);\/\/延时消抖 if(key==0)\/\/再次判断按键是否按下 { while(key==0)\/\/按键没有抬起 { led=!led; delayms(200);}\/\/LED闪烁 } } else led=0;}

设计一个单片机输入显示系统,要求每按一下按键数码管显示数据加1(数码...
程序清单如下:include < reg51.h >\/\/ 51单片机头文件 define uchar unsigned char\/\/ 宏定义,用uchar替代无符号字符型 define uint unsigned int\/\/ 宏定义,用uint 替代无符号整数型 sbit Key = P2 ^ 7;uchar Count = 0;uchar code DataChar[10] = \/\/ 定义数码管的段码 '0'~'9'、'-...

需要一个C语言程序。51单片机控制:按键按一下,延迟1分钟后开灯,灯亮半...
void delay1s(uint i) \/\/1s延时程序 { for(;i>0;i--){delay1ms(1000);} } void main(){ led=0;while(1){ if (s==0){ delayms(20);if (s==0);{delay1s(60);led=1; } } if(led==1){delay1s(1800);led=0; } } } 如果对时间要求精确,则要用到定时器,还要确保电路...

51单片机 写一个程序 0-9的然后用一个按键按一下就可以变成9-0的 不...
include<reg51.h> define uchar unsigned char uchar table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f};sbit key=P2^0;bit flag=0;uchar cnt=0,num=0;void t0isr() interrupt 1 { TH0=(65536-50000)\/256;TL0=(65536-50000)%256;cnt++;if(cnt>=20){ cnt=0;P1=table[...

求单片机串口C语言程序,要求可以发送一个数据到PC机,可以接受PC机的字符...
不知道你是不是用的51单片机,给你一个程序参考一下吧。\/ 函数功能:在#MCU2的数码管上显示收到的学号后3位 若与自己的相符合,则发送Right!否则发送Wrong!默认学号为123 \/ include<reg52.h> include<absacc.h> \/ 总线地址定义区 \/ define LED_DIG XBYTE[0xD000] \/\/定义数码管的段选总线...

...帮帮我啊!用单片机编辑一个数字钟的程序啊,要求如下:
使用KEIL编辑出数字钟完整程序;数字钟有八个按键,八个按键功能分别为:1、按键一:用来修改时间和闹钟;每按一下小时上加一;2、按键二:用来修改时间和闹钟;每按一下小时上减一;... 使用KEIL编辑出数字钟完整程序;数字钟有八个按键,八个按键功能分别为:1、按键一:用来修改时间和闹钟;每按一下小时上加一;2、...

一个程序中51单片机每次读引脚数据都要写1,那岂不是很麻烦。或者只要写...
51单片机只用1次性写1就可以一直读取了,上面那个是误导人在。而且,上电复位以后,每个IO口都默认初始化全部写1了,所以如果你的IO口一开始就是用作输入的(没有先作输出用在中途在改作输入),那什么都不用写就可以直接一直读

一个完整的单片机应用系统的研制过程应包含哪些环节
这就是为什么嵌入式的工资高,入门难的原因,它必须要有一定的硬件基础,还需配合很好的编码能力。如果你掌握了单片机硬件,同时也精通编程,那么写单片机程序也就是水到渠成的事了。单片机又称单片微控制器,它不是完成某一个逻辑功能的芯片,而是把一个计算机系统集成到一个芯片上。相当于一个微型的...

用单片机写一个C语言程序关于电子时钟,用键盘调制时分秒的加减 第一个...
我给你一个保证好用的,KEY_COM调模式,按一下进入调时 ,在按一下调分,再按一下退出调时模式,这时加减按键都无效,在调时模式时会产生闪烁方式,这段程序是我自己想的办法实现的,可能有点笨拙,但效果很好,我建议你用DS1302做时钟,用单片机计数器由于晶振等原因会有很大的误差,实际中没有用...

本溪市17134395419: 求一个单片机程序,要使单片机驱动数码管进行1 -- 8的循环显示,还要可以停止在某一个数字上,相当于选号. -
边艺一清: /********************************************************************* 描述 : 该程序为数码管静态显示程序,并且通过实现锁存器的功能. 如果按了P3.2口,P3.7口由高电平变到低电平后,锁存器锁存功能使能.再按P3.4口,数码管的值就不会有所改...

本溪市17134395419: 求一个单片机程序 -
边艺一清: #include#define uint unsigned int#define uchar unsigned charsbit rw=P2^5;sbit rs=P2^6;sbit re=P2^7;uchar code zmo0[]="I LOVE YOU!";uchar code zmo1[]="THAT...

本溪市17134395419: 谁懂单片机可以帮忙一下写个程序控制步进电机单片机给驱动板脉冲信号要求只要电机转就可以单片机型号st -
边艺一清: 有专用的驱动器,问题就简单了.驱动器上有方向,步进脉冲,估计还有使能,三个端口 只想让电机转起来,那你只要缎带方向,使能端一个固定的高电平 然后找一个LED闪烁的例子,脚引出来,接到步进脉冲上就OK了.

本溪市17134395419: 求单片机程序:通过单片机驱动直流电机并能够显示电机的转数
边艺一清: 利用串口控制电机的转速,需要单片机与电脑利用串口通信.假如你不会用VB或者其他软件编写上位机程序的话,可以先把电脑的上位机放一放,先利用串口调试工具代替上位机. 控制流程是这样的:电脑通过串口调试助手,发送出某转速信号,例如,发送“50”,则单片机接受到“50”,那么单片机就知道,你是让电机转速为50转,那么再通过单片机进行转速的控制就可以了. 同时,单片机要通过传感器检测目前的转速,可以采用PID控制思路.当转速达到45的时候,就慢点给电机加速,知道调节转速到50转,这样就形成了一个闭环控制.

本溪市17134395419: 求一段C语言程序,已知单片机晶振频率12M,让单片机的P1.0和P1.1同时输出12M的频率,去驱动另外二个单片 -
边艺一清: 这个是不可能的.首先,51单片机是每12个时钟周期作一个指令周期.虽然你的晶振是12MHz的,但是你的指令频率只有1M.第二,按照最快的来算,第一个周期P1.0设高,下个周期设低,那你的输出周期只有0.5MHz,还不算循环体需要占的频率.第三,一般如果用外部时钟晶振的话,应该有不同的接发,根据不同的单片机接法不同.第四,单片机对时钟的占空比是有要求的.得用示波器检查一下频率和占空比是否满足单片机的要求.

本溪市17134395419: 求一个单片机程序 -
边艺一清: 12Mhz应该是晶振,系统时钟是1Mhz,则是1ms,那么就用计数器0或什么都行,是加计数,模式1,初值设为65530,用中断T0,查一下中断表得到中断号,中断服务程序就是P1.7=~P1.7取反就是方波.

本溪市17134395419: 求一个电脑与单片机连接的程序! -
边艺一清: 这里有2 个部分 1是单 片机计数显示. 2 是电脑和单片机通信 ,你可用mscomm,比较简单.按鼠标或键盘,送一个指定数据给单片机,单片机收到这个数据就开始计数,收到的不是,就不开始.

本溪市17134395419: 单片机程序,求一个简单的单片机程序,谢谢 -
边艺一清: 硬件电路就不行,单片机可以直接驱动 LED,,但一个数码管子是 多个LED组成的,多个LED的总电流比较大,单片机无法承受 况且你这种组合数码管,8个段信号是4个数码管共用的,要想显示不同的数字,必须有位驱动才行,即数码管的4个位选(共用阳极或共用阴极)必须受单片机控制才行,这时就需要放大电路(集成电路或4 个三极管),而不象单个数码管公共端可以接地或接电源 如果硬件达不到要求,或者别人没有电路图,再好的程序也不能显示

本溪市17134395419: 求单片机 步进电机 程序 -
边艺一清: 假设你是两相步进电机,使用一个专用模块驱动,A,/A,B,/B由P1口低四位控制,以下程序按半步工作 ORG 0000H LJMP START ORG 0060H START: CLR EA MOV SP,#60H LOOP0: MOV R0,#8 LOOP1: MOV DPTR,HSTEPTAB MOV A,R0 ...

本溪市17134395419: 急求一个单片程序 -
边艺一清: #include sbit K1=P1^0;sbit K2=P1^1;sbit K3=P1^2;sbit K4=P1^3;sbit L1=P1^4;sbit L2=P1^5;sbit L3=P1^6;sbit L4=P1^7;sbit BEEP=P2^0;bit FLAG_beep;void delay_10ms(void);void...

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网