高手请进,单片机的一个小程序

有8个灯,首先让
1号灯和8号灯亮,过几秒后灭,
然后是2和7,也是过几秒后灭,
接着3和6,过几秒后灭,
最后是4和5,过几秒后灭,
然后全亮后又灭,
最后重复上面的过程5次,
本人刚刚学习单片机,所以还不会编这个基本的小程序,请会的高手帮我一下...多谢了!

假设条件:
1. 八个灯接P0口,1号灯对应P1.0,8号灯对应P1.7必须是CPU口负输出有效。
2. 假设晶振是12M。
3. 假设每次亮1秒。

ORG 0000H
LJMP 0080H

ORG 0080H
MOV SP, #60H ;设堆栈起始地址
MOV R2, #05H ;重复5次
MOV R3, #01H ;间隔时间为1秒

;=====循环五次======
LOOP2:
MOV R0, #00H;查表常用
MOV R1, #06H;每一循环要送的数据次数
;=====一次循环======
LOOP:
MOV A, R0
MOV DPTR, #TABLE
MOVC A, @A+DPTR
MOV P1, A
INC R0
DJNZ R1, LOOP
;===================
DJNZ R2, LOOP1
;===================
LJMP 00H

TABLE:
DB 7EH,0BDH,0DBH,0E7H,00H,0FFH
;7EH即01111110B,1、8号灯亮
;0BDH即10111101B,2、7号灯亮
;0DBH即11011011B,3、6号灯亮
;0E7H即11100111B,4、5号灯亮
;00H即00000000B,全亮
;0FFH即11111111B,全灭

DELAY:
;=====1S延时======
MOV R5, #20
DEL2:
;=====50MS延时======
DJNZ R6, #200
DEL1:
MOV R7, #250
DJNZ R7, $
DJNZ R6, DEL1
;===================
DJNZ R5, DEL2
;===================
DJNZ R3, DELAY
RET
;如果是6M晶振,只需要把R5的20改为10就可以凑成1整秒。
;R3中存的是间隔几秒,把它改成几就是间隔几秒。
;这种延时比较粗糙,如果要精确控制,需要计算每一个命令用的时间,或采用中断。
温馨提示:内容为网友见解,仅供参考
第1个回答  2009-03-29
#include<reg51.h>
unsigned int n=200;
unsigned int sign=0;
unsigned int i=1;
unsigned char display[6]={0x81,0x42,0x24,0x18,0xf,0x00};
disp();
{
P1=display[i]
}
timer0() interrupt 1 using 1
{
if(n--==0)
{
n=200;//两秒钟计时
sign=1;//两秒钟到标志位置1
}
TMOD=0x00;
TH0=0xd8;
TL0=0xf0;
TR0=1;
}
main()
{
TMOD=0x00;
TH0=0xd8;
TL0=0xf0;
ET0=1;
TR0=1;
do{
do{
disp();
}while(sign==0);
sign=0;
i++;
if(i==6)
i=1;
}while(1);
}
第2个回答  2009-03-29
#include<reg52.H>
#define uchar unsigned char
#define uint unsigned int
//请用12M的晶振,LED的阳极接+5V,阴极接P2口;希望我能帮到你;
//**********************毫秒延时子程序******************125****//
void delay(uint n)
{
uint i,j;
for(i=0;i<n;i++)
for(j=0;j<125;j++){}
}

void main()
{
P0=0X00;
P1=0X00;
P2=0X00;
P3=0X00;
while(1)
{
P2=0X00;
delay(1000);
P2=0X81;
delay(1000);
P2=0XC3;
delay(1000);
P2=0XE7;
delay(1000);
P2=0XFF;
delay(1000);
}

}

编程高手请进,请编个小程序。找出1~100之间的全部同构数。所谓“同构...
include <stdio.h> void main(){ int i,j=0,k=0.for(i=1;i<=100,i++){ j=i*i;do{ k=j%10; }while(j>=10);if(j==i){ printf("%d",i)} } } 想做成函数的话,自己改改。

单片机高手请进TH0=(65535-50000)\/256;TH0=(65535-50000)%256;中的25...
TH0=(65535-50000)\/256相当于TH0=(65535-50000)>>8,也就是取高八位。TL0=(65535-50000)%256就是取低八位。

判断单片机是否加密--单片机高手请进
1.明显是被加密,因为汇编指令是几乎不可能这么从小到大的顺序排列的。有的单片机加密的结果就是读出的代码全是0。2.你从被加密的单片机中读出的代码已经不是原始代码了,因为加密相当于随机的打乱顺序再从新排列,只有恢复最原始的排列,其代码才有意义,所以你把加密后的代码写入另外一个单片机,肯定无...

VF高手请进!!一道小程序题中的一句,百思不得其解!
SKIP应该是指针向下一个跳跃的意思 SKIP -1为向上跳跃 如果没有SKIP程序一直停留在表的第一条记录 到skip的时候还没有把所有1985年的学生信息显示出来,应该是循环结束ENDDO时才显示完

单片机电平转换的问题,高手请进
最简单并肯定能行的是用比较器,用一个3V的电压做参考电压,另一端就是模拟电压,其输出就是你要的电平。给你一个仿真的线路和波形图,图中用一个有直流分量2.5V的交流电压,模拟一个你要的模拟电压,比较器的负端用一个电位器调整得到一个3V的基准电压,输出一定要接一个上拉电阻,这是因为比较...

单片机高手请进!!!stc89c52单片机 能控制几个舵机?用什么样的程序控制...
用定时器产生脉冲,两个定时器T0,T1,8*2,同时可以控制16个舵机,以下是用按键控制一个舵机的转动,你可以参考以下程序,多设个io口,在switch函数中的 条件语句中加各个io口脉宽,以下程序中的例如:case 0中的if可以多加几个io控制就可以同时控制多个了,程序前面也可以开定时器T0,以下就只开T1...

高手请进!51单片机怎样用I\/O检测电脑的USB口的D+或者D-
背景:电脑的USB口的D+和D-上分别下拉15k欧电阻,用于检测并识别USB高速设备和低速设备。我想用单片机的IO口来检测这两个脚,以此来判断我的电路是否接入到电脑的USB口。但是I\/O有上拉电阻,它会被电脑识别成一个USB设备,这不是我想要的。我希望在不被电脑识别成USB设备的前提下,检测到电脑USB的D...

求助!单片机c语言编程高手请进(全分加给)
那些叫关键字,是C语言本身的一部分,是固定的,二三十个,和一些伪指令,用多了就觉得不外乎就是几个字母的组合,根英文无关,并且单是靠关键字是掌握不了C的,好好学学C语言吧!C语言简单并非常有用.

高手请进,请看下面的文字告诉我这个VB是干什么用的
应该是个恶作剧程序吧,程序写的有些问题。--- 这段代码的含义是:将本地磁盘上(非C:盘)所有的exe可执行文件替换为当前这个小程序!

高手请进!会单片机的请进!乐高机器人NXT固件问题无法开机!
1、在同一个硬盘上安装太多的操作系统会引起系统死机。最好重装前用PQ先格式化干净再装.2、CPU、显示卡等配件不要超频过高,要注意温度,否则,在启动或运行时会莫名其妙地重启或死机。一般不要随便超频。3、在更换电脑配件时,一定要插好,因为配件接触不良会引起系统死机。《严禁复制、转贴,戈壁滩的...

相似回答
大家正在搜