######小白因为暂时没有马达便先想着用lLED亮度代替。
但是按下按钮亮的并不是定义的LED而是数码管的一个位置(定义不同LED数码管亮的位置)
开发板原理图(没有独立按键所以用矩阵键盘第一列的前三个按键代替了)
#include <reg52.h>
sbit LED = P0^0;
sbit LED2 = P0^7;
sbit ADDR0 = P1^0;
sbit ADDR1 = P1^1;
sbit ADDR2 = P1^2;
sbit ADDR3 = P1^3;
sbit ENLED = P1^4;
sbit ENSEG = P1^5;
sbit KEY_IN_1 = P4^3;
sbit KEY_IN_2 = P3^2;
sbit KEY_IN_3 = P4^1;
sbit KEY_IN_4 = P2^3;
sbit KEY_OUT_1 = P2^7;
sbit KEY_OUT_2 = P2^6;
sbit KEY_OUT_3 = P2^5;
sbit KEY_OUT_4 = P2^4;
sbit Motor = P1^0;
unsigned char NixieTable[] = {
0x03, 0x9f, 0x25, 0x0d, 0x99, 0x49, 0x41, 0x1f,
0x01, 0x09, 0x11, 0xc1, 0x63, 0x85, 0x61, 0x71
};
void Nixie(unsigned char location,number)
{
switch(location)
{
case 1:ADDR0=1,ADDR1=1,ADDR2=1;break;
case 2:ADDR0=0,ADDR1=1,ADDR2=1;break;
case 3:ADDR0=1,ADDR1=0,ADDR2=1;break;
case 4:ADDR0=0,ADDR1=0,ADDR2=1;break;
case 5:ADDR0=1,ADDR1=1,ADDR2=0;break;
case 6:ADDR0=0,ADDR1=1,ADDR2=0;break;
case 7:ADDR0=1,ADDR1=0,ADDR2=0;break;
case 8:ADDR0=0,ADDR1=0,ADDR2=0;break;
}
P0=NixieTable[number];
}
void Timer0Init(void)
{
TMOD &= 0xF0;
TMOD |= 0x01;
TL0 = 0x9C;
TH0 = 0xFF;
TF0 = 0;
TR0 = 1;
ET0 = 1;
EA = 1;
PT0 = 0;
}//100um
unsigned char j,c;//jΪ¶¨Ê±Æ÷cΪPWM±È½ÏÊý
unsigned char speed;
void main ()
{
ENLED = 0;
ADDR3 = 1;
ADDR2 = 1;
ADDR1 = 1;
ADDR0 = 0;
Timer0Init();
while(1)
{
ENSEG = 0;
KEY_IN_1 = 1;
KEY_IN_2 = 1;
KEY_IN_3 = 1;
KEY_IN_4 = 1;
KEY_OUT_1 = 1;
KEY_OUT_2 = 1;
KEY_OUT_3 = 1;
KEY_OUT_4 = 1;
KEY_IN_1 = 0;
if(KEY_OUT_1 == 0)
{
speed=1;
c=20;
}
if(KEY_OUT_2 == 0)
{
speed=2;
c=50;
}
if(KEY_OUT_3 == 0)
{
speed=3;
c=70;
}
Nixie(1,speed);
}
}
void Timer0_Routine() interrupt 1
{
TL0 = 0x9C;
TH0 = 0xFF;
j++;
j%=100;
if(j<c)
{
LED=0;
}
else
{
LED=1;
}
}
现象(我的想法是第一个LED在123不同挡下亮度不同,但是它却是数码管的一个位置亮。QWQ)
其实我就是想知道怎么才能让我想的LED亮而不是第二位数码管的那个点亮。在这里谢谢帮助了。
数码管其实是由发光二极管组成,有共阴极和共阳极之分,对于共阳极来说,一位数码管由8个二极管组成,他们的阳极接在一起接+5v电源,而各个阴极与某个端口,如p1的8个引脚相连,当某个引脚输出低电平的时候数码管对应的二极管亮。
问题补充:
因为人的眼睛具有迟滞性,如果给一位数码管接通0.3秒地时间,然后再给另一个接通0.3秒,不断地给几个数码管轮流接通0.3秒,因为人眼的迟滞,就显示出您所要求显示的数,当然具体接通时间,要看数码管的位数等情况自己调节。
数码管分共阴极和共阳极,在实物上 其实只要控制端和输入端都为高电平或者低电平就不会亮了