用AT89C51单片机控制两位8段LED数码管采用动态显示的方式显示29
#include
#define uchar unsigned char;
uchar distab[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0x00}; //0到f
uchar number,nn=0;
uchar dat[]={2,0,1,2,1,1,4,5,8,2};
void t0isr() interrupt 1
{
TH0=(65536-5000)/256;
TL0=(65536-5000)%256;
number++;
if(number>1)number=0;
switch(number)
{
case 0:P2=0x02;P0=distab[nn];
break;
case 1:P2=0x01;P0=distab[nn+1];
nn++;
nn%=9;
break;
default:break;
}
}
main()
{
TMOD=0x01;
TH0=(65536-5000)/256;
TL0=(65536-5000)%256;
TR0=1;
ET0=1;
EA=1;
while(1);
}
用AT89C51单片机控制8段LED数码管采用动态显示的方式显示出00000000,可以用按键输入数字的仿真实例,可以下载附件仿真试试。
#include<reg51.h>
#define uchar unsigned char;
uchar distab[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0x00}; //0到f
uchar number;
void t0isr() interrupt 1
{
TH0=(65536-5000)/256;
TL0=(65536-5000)%256;
number++;
if(number>1)number=0;
switch(number)
{
case 0:P2=0x02;P0=distab[2];
break;
case 1:P2=0x01;P0=distab[9];
break;
default:break;
}
}
main()
{
TMOD=0x01;
TH0=(65536-5000)/256;
TL0=(65536-5000)%256;
TR0=1;
ET0=1;
EA=1;
while(1);
}
先定义位选引脚
sbit wei2=P2^0
sbit wei1=P2^0
sbit wei2=P2^1
再定义0.5ms的延时时间
于是
wei1=1;
P1=代表2的数码值
延时
wei1=0;
显示9原理一样!
如果想要具体电路图个程序留下邮箱
有点难
答:L8F== FLAG.5;LIGHT8中断标志位 DISF== FLAG.6;该位置1时再执行显示 KEY== 0X06.3 ORG 0X00 JMP INIT ORG 0X08 JMP INTERRUPT ORG 0X10 TAB_MODE:ADD PC,A NOP NOP CALL LIGHT8 RET CALL LIGHT7 RET CALL LIGHT6 RET CALL LIGHT5 RET CALL LIGHT4 RET CALL LIGHT3 RET CALL LIGHT...
答:程序如下: 绝对没有错 LED灯的一端接P1口的各各引脚,另一端接地。同时在P1口的每个管脚上加1K的上拉电阻,电阻另一端连接至+5V即可 ORG 0000H AJMP START ORG 0030H START:MOV SP,#07H MOV P1,#00H MOV A,#0AAH LOOP:CPL A MOV P1,A ACALL DELAY AJMP LOOP DELAY:MOV R0,#50...
答:R6,#200 D2:MOV R7,#250 D3:DJNZ R7,D3 DJNZ R6,D2 DJNZ R5,D1 DELAY2:MOV R5,#20 D11:MOV R6,#200 D22:MOV R7,#250 D33:DJNZ R7,D33 DJNZ R6,D22 DJNZ R5,D11 因为有CALL指令要用到堆栈,所以要留出堆栈空间而把程序代码安排在 org50 之后;至于延时值,自己调试吧;
答:1.硬件组成 按照单片机系统扩展与系统配置状况,单片机应用系统可分为最小系统、最小功耗系统及典型系统等。AT89C51单片机是美国ATMEL公司生产的低电压、高性能CMOS 8位单片机,具有丰富的内部资源:4kB闪存、128BRAM、32根I/O口线、2个16位定时/计数器、5个向量两级中断结构、2个全双工的串行口,具有4...
答:Delay10ms(50); 延时一段时间 LED=LED<<1; 点亮的发光管,向左移动一位 if (P2==0x00) 判断是否8个全部点亮了 { LED=0xff; 如果全部点亮,则将全部发光管熄灭 } } } void Delay10ms(unsigned int c)延时函数主程序 { unsigned char a, b;建立两个变量 a b for(;c>...
答:按键触发方式应该都是低电平触发 MOV R0,#01 MOV A,R0 LOOP:MOV P1,A RL A MOV R0,A LCALL DELAY LJMP LOOP DELAY:MOV R5,#10 DL0:MOV R6,#200 DL1:MOV R7,#200 DJNZ R7,DJNZ R6 ,DL1 DJNZ R5, DL0 RET ...
答:for(i=0;i<8;i++) //加入 for循环,表明for循环大括号中的程序循环执行8次 { Delay(50000);P2<<=1;P2=P1|0x01; //左移后,最右端自动赋值0,所以需要该语句赋值1 } P2=0xfe; //重新赋初始值 //主循环中添加其他需要一直工作的程序 } } /*--- 延时函数,含有输入参数 ...
答:uchar i,j;void delay(uint ms){ uchar k;while(ms--)for(k=0;k<123;k++);} void main(){ while(1){ i=0xfe;for(j=0;j<7;j++){ P1=i;i=_crol_(i,1);delay(500);} for(j=0;j<7;j++){ P1=i;i=_cror_(i,1);delay(500);} for(j=0;j<8;j++){ P1=i;i=...
答:51单片机有两个定时器,每个定时器可以设置4中工作方式。\x0d\x0a方式0:13位定时器\x0d\x0a方式1:16位定时器\x0d\x0a方式2:8位重装载模式\x0d\x0a方式3:两个独立8位定时器模式
答:如果不做串行通信或者实时系统(rtx51、uc/os51)的话,可以。