AT89C51单片机汇编语言怎么用汇编语言让1个数码管按下一个按钮减-,从f到0。

用汇编语言编写一个两个数码管为一组交替点亮一个数_百度知道
用汇编语言编写一个两个数码管为一组交替点亮一个数
我有更好的答案
两个数码管交替显示一个数,是很简单的,以下例程,数码管分别为P0,P1口共阴极。交替显示0~9.&&&&&ORG&&&0000H&&&&&JMP&&&BEGIN&&&&&ORG&0030HTABLE:&&&&&&;&共阴极数码管显示代码表&&&&&&&&&&DB&&&&3FH,06H,5BH,4FH,66H&;01234&&&&&&&&&&DB&&&&6DH,7DH,07H,7FH,6fh&;56789DELAY:&&MOV&&&R5,#20LOOP4:&&MOV&&&R6,#50H&&&&&&&&;延时20X20msLOOP5:&&MOV&&&R7,#100&&&&&&&&DJNZ&&R7,$&&&&&&&&DJNZ&&R6,LOOP5&&&&&&&&DJNZ&&R5,LOOP4&&&&&&&&RET;---------------------------------------BEGIN:&&&&&&MOV&R2,#0LOOP:&&&&&&MOV&&&DPTR,#TABLE&&&&&&MOV&A,R2&&&&&&MOVC&&A,@A+DPTR&&&&&&MOV&&&P0,A&&&&&&MOV&P1,#00H&&&&&&LCALL&DELAY&&&&&&MOV&&P1,A&&&&&&MOV&P0,#00H&&&&&&INC&R2&&&&&CJNE&R2,#10,LOOP&&&&&SJMP&BEGIN&&&&&END
高级工程师
假设P1接1组数码管,P2接一组数码管,不考虑点亮时间长短的话,汇编程序如下:ORG 0TT: MOV P1,#3FH
SJMP TTEND
本回答被网友采纳
为您推荐:
其他类似问题
汇编语言的相关知识
换一换
回答问题,赢新手礼包
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。用单片机实现1位LED数码管显示0-9_百度文库
您的浏览器Javascript被禁用,需开启后体验完整功能,
赠送免券下载特权
10W篇文档免费专享
部分付费文档8折起
每天抽奖多种福利
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
用单片机实现1位LED数码管显示0-9
阅读已结束,下载本文需要
想免费下载本文?
定制HR最喜欢的简历
下载文档到电脑,同时保存到云知识,更方便管理
加入VIP
还剩17页未读,
定制HR最喜欢的简历
你可能喜欢12:25 提问
谁能帮我设计一个89c51的一个八人抢答器的汇编程序,万分感谢!!!
1.数码管前一位显示抢答,后两位显示倒计时60s
2,p1.2为开始按钮
按赞数排序
//以前做过的,需要按你的要求改一改,望采纳。
#define uchar unsigned char
#define uint unsigned int
#define D8279
XBYTE[0x5EFF]
//8279 数据口地址
#define C8279
XBYTE[0x5FFF]
//8279 状态/命令口地址
sbit beep=P3^2;
sbit l1=P1^0;
//8个发光二极管
sbit l2=P1^1;
sbit l3=P1^2;
sbit l4=P1^3;
sbit l5=P1^4;
sbit l6=P1^5;
sbit l7=P1^6;
sbit l8=P1^7;
uchar code
ledseg[] = {0xc0,0xf9,0xa4,0xb0,0x99,
0x92,0x82,0xf8,0x80,0x90,
0x88,0x83,0xc6,0xa1,0x86,
0x8e,0x8c,0xc1,0x89,0xc7,
0xbf,0x91,0x00,0xff};//LED显示常数表
uchar xuanshou,second,//
uchar score1,score2,score3,score4,score5,score6,score7,score8,score,//选手1~8的分数
t,m,n,l,a1,a2,a3,a4,a5,a6,a7,a8,i;
uchar idata huanchong[5]={0,0,0,0,0};
//显示缓冲shijian,fenshu,xuanshou
//按键表示值
void delay(uint z);
void Timer();
void disled(void);
void dis();
void init();
uchar getkey();
void delay(uint z)
//延时函数
for(x=z;x&0;x--){
for(y=110;y&0;y--);
uchar getkey()
//读键值函数
if((C)==0x00){
//无键按下,置标志
//读FIFO RAM命令
key=D8279;
key=(key&0x0f);
//取键盘数据4位
return(key);
void tim(void) interrupt 1 using 1
//为定时中断TR0
//重新赋值
if(count==20){
//20*50ms=1秒
if(second&=10&&m==1){
beep=1;delay(500);beep=0;
if(getkey()==0x0f){
TR0=0;xuanshou=0;t=0;beep=1;score=0;second=30;
a1=1;a2=1;a3=1;a4=1;a5=1;a6=1;a7=1;a8=1;
l1=1;l2=1;l3=1;l4=1;l5=1;l6=1;l7=1;l8=1;m=1;n=1;
void disled(void)
//将缓冲区值显示出来
for(i=0;i&=5;i++){
xianshi=huanchong[i];
D8279=ledseg[xianshi];
//-----显示处理-----
void dis()
huanchong[5]=xuanshou/10;
huanchong[4]=xuanshou%10;
huanchong[3]=score/10;
//分数十位
huanchong[2]=score%10;
//分数个位
huanchong[1]=second/10;
//时间十位
huanchong[0]=second%10;
//时间个位
void init()
//初始化函数
xuanshou=0;
second=30;
score1=10;score2=10;score3=10;score4=10;score5=10;score6=10;score7=10;score8=10;
a1=1;a2=1;a3=1;a4=1;a5=1;a6=1;a7=1;a8=1;
l1=1;l2=1;l3=1;l4=1;l5=1;l6=1;l7=1;l8=1;
n=1;m=1;l=1;
C8279=0xDC;
//清除 LED 显示
TMOD=0x01;
//初值55536,计数10000次,每次1US,总计10ms
//这里是中断优先级控制EA=1(开总中断),ET0=1(定时器0允许中断),这里用定时器0来定时
//置8279工作方式////youduaua//shuru
//置键盘扫描速率
xianshi=0;
void main()
//初始化,
if(getkey()==0x0f){
//查询是否有犯规按键
TR0=0;xuanshou=0;t=0;beep=0;delay(200);beep=1;score=0;second=30;m=1;n=1;l=1;
a1=1;a2=1;a3=1;a4=1;a5=1;a6=1;a7=1;a8=1;
l1=1;l2=1;l3=1;l4=1;l5=1;l6=1;l7=1;l8=1;
if(getkey()==0x01&&n==1)
{xuanshou=1;score=score1;dis();l1=0;beep=0;l=0;}
else if(getkey()==0x02&&n==1)
{xuanshou=2;score=score2;dis();l2=0;beep=0;l=0;}
else if(getkey()==0x03&&n==1)
{xuanshou=3;score=score3;dis();l3=0;beep=0;l=0;}
else if(getkey()==0x04&&n==1)
{xuanshou=4;score=score4;dis();l4=0;beep=0;l=0;}
else if(getkey()==0x05&&n==1)
{xuanshou=5;score=score5;dis();l5=0;beep=0;l=0;}
else if(getkey()==0x06&&n==1)
{xuanshou=6;score=score6;dis();l6=0;beep=0;l=0;}
else if(getkey()==0x07&&n==1)
{xuanshou=7;score=score7;dis();l7=0;beep=0;l=0;}
else if(getkey()==0x08&&n==1)
{xuanshou=8;score=score8;dis();l8=0;beep=0;l=0;}
else if(getkey()==0x0e&&l==1)
{beep=0;delay(200);beep=1;TR0=1; m=0;n=0;}//若有开始键,则初始化
if(m==0)dis();
if(second==0){
beep=1;delay(500);beep=0;
//30秒定时到
TR0=0;n=1;
//关中断,并使n等于1
if(getkey()==0x0f){
TR0=0;xuanshou=0;t=0;beep=0;delay(500);beep=1;score=0;second=30;m=1;n=1;//是否有复位键
a1=1;a2=1;a3=1;a4=1;a5=1;a6=1;a7=1;a8=1;
l1=1;l2=1;l3=1;l4=1;l5=1;l6=1;l7=1;l8=1;dis();
//m等于零即处于抢答状态,查询选手键
if(getkey()==0x01)
else if(getkey()==0x02) t=2;
else if(getkey()==0x03) t=3;
else if(getkey()==0x04) t=4;
else if(getkey()==0x05) t=5;
else if(getkey()==0x06) t=6;
else if(getkey()==0x07) t=7;
else if(getkey()==0x08) t=8;
else if(getkey()==0x0f){
TR0=0;xuanshou=0;t=0;beep=0;delay(500);beep=1;score=0;second=30;m=1;n=1;
a1=1;a2=1;a3=1;a4=1;a5=1;a6=1;a7=1;a8=1;
l1=1;l2=1;l3=1;l4=1;l5=1;l6=1;l7=1;l8=1;dis();
if(getkey()==0x0f){
xuanshou=0;TR0=0;i=0;t=0;beep=0;delay(200);beep=1;score=0;second=30;m=1;n=1;//
a1=1;a2=1;a3=1;a4=1;a5=1;a6=1;a7=1;a8=1;
l1=1;l2=1;l3=1;l4=1;l5=1;l6=1;l7=1;l8=1;dis();
//开关,保证程序只执行一次
switch(t){
TR0=0;xuanshou=1;second=0;beep=0;delay(500);beep=1;
a1=0;a2=1;a3=1;a4=1;a5=1;a6=1;a7=1;a8=1;m=1;l1=0;second=90;TR0=1;
//跳出循环
TR0=0;xuanshou=2;second=0;beep=0;delay(500);beep=1;
a2=0;a1=1;a3=1;a4=1;a5=1;a6=1;a7=1;a8=1;m=1;l2=0;second=90;TR0=1;
TR0=0;xuanshou=3;second=0;beep=0;delay(500);beep=1;
a3=0;a1=1;a2=1;a4=1;a5=1;a6=1;a7=1;a8=1;m=1;l3=0;second=90;TR0=1;
TR0=0;xuanshou=4;second=0;beep=0;delay(500);beep=1;
a4=0;a1=1;a2=1;a3=1;a5=1;a6=1;a7=1;a8=1;m=1;l4=0;second=90;TR0=1;
TR0=0;xuanshou=5;second=0;beep=0;delay(500);beep=1;
a5=0;a1=1;a2=1;a3=1;a4=1;a6=1;a7=1;a8=1;m=1;l5=0;second=90;TR0=1;
TR0=0;xuanshou=6;second=0;beep=0;delay(500);beep=1;
a6=0;a1=1;a2=1;a3=1;a4=1;a5=1;a7=1;a8=1;m=1;l6=0;second=90;TR0=1;
TR0=0;xuanshou=7;second=0;beep=0;delay(500);beep=1;
a7=0;a1=1;a2=1;a3=1;a4=1;a5=1;a6=1;a8=1;m=1;l7=0;second=90;TR0=1;
TR0=0;xuanshou=8;second=0;beep=0;delay(500);beep=1;
a8=0;a1=1;a2=1;a3=1;a4=1;a5=1;a6=1;a7=1;m=1;l8=0;second=90;TR0=1;
if(a1==0){
if(second==0){
TR0=0;n=1;
//关中断,并使n等于1,禁止抢答
if(getkey()==0x0f){
TR0=0;xuanshou=0;t=0;beep=0;delay(500);beep=1;score=0;second=30;m=1;n=1;
a1=1;a2=1;a3=1;a4=1;a5=1;a6=1;a7=1;a8=1;
l1=1;l2=1;l3=1;l4=1;l5=1;l6=1;l7=1;l8=1;dis();
if(getkey()==0x0a){
beep=0;delay(100);beep=1;score1+=1;
else if(getkey()==0x0b){
beep=0;delay(100);beep=1;score1-=1;
score=score1;
else if(a2==0){
if(second==0){
//30秒定时到
TR0=0;n=1;
//关中断,并使n等于1,禁止抢答
if(getkey()==0x0f){
//若此时再按下开始键,响铃提示,定时30s
TR0=0;xuanshou=0;t=0;beep=0;delay(500);beep=1;score=0;second=30;m=1;n=1;
a1=1;a2=1;a3=1;a4=1;a5=1;a6=1;a7=1;a8=1;
l1=1;l2=1;l3=1;l4=1;l5=1;l6=1;l7=1;l8=1;dis();
if(getkey()==0x0a){
beep=0;delay(100);beep=1;score2+=1;
else if(getkey()==0x0b){
beep=0;delay(100);beep=1;score2-=1;
score=score2;
else if(a3==0){
if(second==0){
//30秒定时到
TR0=0;n=1;
//关中断,并使n等于1,禁止抢答
if(getkey()==0x0f){
//若此时再按下开始键,响铃提示,定时30s
TR0=0;xuanshou=0;t=0;beep=0;delay(500);beep=1;score=0;second=30;m=1;n=1;
a1=1;a2=1;a3=1;a4=1;a5=1;a6=1;a7=1;a8=1;
l1=1;l2=1;l3=1;l4=1;l5=1;l6=1;l7=1;l8=1;dis();
if(getkey()==0x0a){
beep=0;delay(100);beep=1;score3+=1;
else if(getkey()==0x0b){
beep=0;delay(100);beep=1;score3-=1;
score=score3;
else if(a4==0){
if(second==0){
//30秒定时到
TR0=0;n=1;
//关中断,并使n等于1,禁止抢答
if(getkey()==0x0f){
//若此时再按下开始键,响铃提示,定时30s
TR0=0;xuanshou=0;t=0;beep=0;delay(500);beep=1;score=0;second=30;m=1;n=1;
a1=1;a2=1;a3=1;a4=1;a5=1;a6=1;a7=1;a8=1;
l1=1;l2=1;l3=1;l4=1;l5=1;l6=1;l7=1;l8=1;dis();
if(getkey()==0x0a){
beep=0;delay(100);beep=1;score4+=1;
else if(getkey()==0x0b){
beep=0;delay(100);beep=1;score4-=1;
score=score4;
else if(a5==0){
if(second==0){
//30秒定时到
TR0=0;n=1;
//关中断,并使n等于1,禁止抢答
if(getkey()==0x0f){
//若此时再按下开始键,响铃提示,定时30s
TR0=0;xuanshou=0;t=0;beep=0;delay(500);beep=1;score=0;second=30;m=1;n=1;
a1=1;a2=1;a3=1;a4=1;a5=1;a6=1;a7=1;a8=1;
l1=1;l2=1;l3=1;l4=1;l5=1;l6=1;l7=1;l8=1;dis();
if(getkey()==0x0a){
beep=0;delay(100);beep=1;score5+=1;
else if(getkey()==0x0b){
beep=0;delay(100);beep=1;score5-=1;
score=score5;
else if(a6==0){
if(second==0){
//30秒定时到
TR0=0;n=1;
//关中断,并使n等于1,禁止抢答
if(getkey()==0x0f){
//若此时再按下开始键,响铃提示,定时30s
TR0=0;xuanshou=0;t=0;beep=0;delay(500);beep=1;score=0;second=30;m=1;n=1;
a1=1;a2=1;a3=1;a4=1;a5=1;a6=1;a7=1;a8=1;
l1=1;l2=1;l3=1;l4=1;l5=1;l6=1;l7=1;l8=1;dis();
if(getkey()==0x0a){
beep=0;delay(100);beep=1;score6+=1;
else if(getkey()==0x0b){
beep=0;delay(100);beep=1;score6-=1;
score=score6;
else if(a7==0){
if(second==0){
//30秒定时到
TR0=0;n=1;
//关中断,并使n等于1,禁止抢答
if(getkey()==0x0f){
xuanshou=0;TR0=0;i=0;t=0;beep=0;delay(500);beep=1;score=0;second=30;m=1;n=1;
a1=1;a2=1;a3=1;a4=1;a5=1;a6=1;a7=1;a8=1;
l1=1;l2=1;l3=1;l4=1;l5=1;l6=1;l7=1;l8=1;dis();
if(getkey()==0x0a){
beep=0;delay(100);beep=1;score7+=1;
else if(getkey()==0x0b){
beep=0;delay(100);beep=1;score7-=1;
score=score7;
else if(a8==0){
if(second==0){
//30秒定时到
TR0=0;n=1;
//关中断,并使n等于1,禁止抢答
if(getkey()==0x0f){
TR0=0;xuanshou=0;t=0;beep=0;delay(500);beep=1;score=0;second=30;m=1;n=1;
a1=1;a2=1;a3=1;a4=1;a5=1;a6=1;a7=1;a8=1;
l1=1;l2=1;l3=1;l4=1;l5=1;l6=1;l7=1;l8=1;dis();
if(getkey()==0x0a){
beep=0;delay(100);beep=1;score8+=1;
else if(getkey()==0x0b){
beep=0;delay(100);beep=1;score8-=1;
score=score8;
if(getkey()==0x0f){
xuanshou=0;TR0=0;i=0;t=0;beep=0;delay(200);beep=1;score=0;second=30;m=1;n=1;l=1;//
a1=1;a2=1;a3=1;a4=1;a5=1;a6=1;a7=1;a8=1;
l1=1;l2=1;l3=1;l4=1;l5=1;l6=1;l7=1;l8=1;dis();
傻孩子,写个C语言的源程序,扔到Keil中反汇编一下,汇编程序不就出来啦?怎么这么傻
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐您所在位置: &
&nbsp&&nbsp&nbsp&&nbsp
1-4 数码管显示.ppt 19页
本文档一共被下载:
次 ,您可全文免费在线阅读后下载本文档。
下载提示
1.本站不保证该用户上传的文档完整性,不预览、不比对内容而直接下载产生的反悔问题本站不予受理。
2.该文档所得收入(下载+内容+预览三)归上传者、原创者。
3.登录后可充值,立即自动返金币,充值渠道很便利
1-4 数码管显示.ppt
你可能关注的文档:
·······
1-4 数码管显示 项目引入 在各种控制仪表面板、数字时钟、倒计时系统中,七段数码管显示器都有着广泛的应用。
交通灯倒计时器
生产线计数器面板 课堂任务: 组装一个AT89C51单片机系统,外接1个数码管和两个按钮,要求上电后,数码管显示0,每按一次按钮1,数码管显示加1,直到15后回0;每按一次按钮2,数码管显示减1,直到0后回15。10到15用A、B、C、D、E、F显示。
跟我想 1、LED八段数码管结构是怎样的?如何控制其显示不同数字或字符?(硬件) 2、送出的码字如何设计?(软件) 8.2 LED显示器接口技术
LED显示器的结构原理
LED显示器用发光二极管显示字段,分为共阴极和共阳极两种。 下图是八段共阴极LED显示器,它将八个发光二极管阴极共地。当某发光二极管要点亮时,只需在该发光二极管的阳极加高电平即可。 表8-1
共阴极LED数码管字形码表
LED显示器的显示方式
1.静态显示方式
在静态显示方式中,各位的共阴或共阳极连接在一起接地或接+5 V,每位的段选线(a~dp)与一个8位并行口相连。如图8-7所示,它是一个4位的静态显示电路,之所以称之为静态显示电路,是由于显示器的各位相互独立,而且各位的显示字符一经确定,相应的输出将维持不变,直到显示另一个字符为止。
2. 动态方式
为了克服静态显示方式的缺点,节省I/O口线,人们常常使用动态显示方式。它将所有数码管的a、b、c、d、e、f、g、sp引线并联在一起,由一个8位I/O口控制,而公共端由另一个I/O口控制。应用时,轮流送入每个LED的字形码与位选码,利用人的视觉暂留现象来显示各位的字符。图8-8是一个8位LED动态显示电路图.
电路原理图 1、编写实训报告:总结实训过程遇到的问题、解决方法和收获 2、若要驱动多个数码管显示不同的字符,如显示“HELLO”,硬件、软件需如何修改和设计? 3、查资料,了解串行口连接驱动LED数码管显示的设计方法
跟我学 (b) 共阳性;
(c) 管脚配置 下图是八段共阳极LED显示器,它的操作与共阴极相反。 图8-6
字形码数据格式 字形码
4位LED静态显示电路图 图8-8
8位LED动态显示电路图
跟我做 1、准备器件 2、焊接电路板 3、编写简单程序 4、建立单片机控制数码管显示系统
? 跟我总结 1、通过并行口输出驱动LED数码管显示需要哪些基本电路 2、延时子程序的作用 3、查表指令如何实现译码
? 课后任务
正在加载中,请稍后...基于at89c51用汇编语言使七段数码管循环显示_百度知道
基于at89c51用汇编语言使七段数码管循环显示
我有更好的答案
是不是循环左移?
就是一个7段数码管循环显示从1到4再回来继续
是不是这样?
他是单个数码管,这是8位的,要的是单位数的,中间的u1的汇编编程,谢谢了,帮帮忙啊
单个的更简单,稍等。ORG 00HAJMP MAINORG 0BHAJMP T0INTMAIN:MOV TMOD,#01HMOV TH0,#3CHMOV TL0,#0B0HSETB EASETB ET0SETB TR0MOV R2,#20MOV R0,#30HMOV R3,#8MOV DPTR,#TABMOV 30H,#1MOV 31H,#0MOV
32H,#2MOV 33H,#0MOV 34H,#2MOV 35H,#0MOV 36H,#1MOV 37H,#4MAIN1:DISP:MOV A,@R0MOVC A,@A+DPTRDISP1:MOV P0,ACLR P2.0ACALL D1MSSETB P2.0JNB F0,DISP1CLR F0INC R0DJNZ R3,DISPMOV R3,#8MOV R0,#30HAJMP DISPDISP2:MOV R1,AAJMP DISPT0INT:MOV TH0,#3CHMOV TL0,#0B0HDJNZ R2,RTIMOV R2,#20SETB F0RTI:RETID1MS:MOV R7,#50MOV R6,#10DJNZ R6,$DJNZ R7,$-4RETTAB: DB
采纳率:43%
为您推荐:
其他类似问题
七段数码管的相关知识
换一换
回答问题,赢新手礼包
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。

我要回帖

更多关于 单片机汇编语言流水灯 的文章

 

随机推荐