#include<reg52.h>
typedef unsigned int u16;
typedef unsigned char u8;
sbit Lna = P1^0;
sbit Inb = P1^1; //直流电机输入端
u8 code list[] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
sbit LSA = P3^0; //数码管的位选
sbit LSB = P3^1;
sbit LSC = P3^3;
#define DuanXaun P0 //数码管段选
#define led P2 //led灯
u8 flag=0; //标志位
void delay(u16 n) //n=1,延时1ms
{
u16 i,j;
for(i=n;i>0;i--)
for(j=114;j>0;j--);
}
void DigDisplay(u8 i) //数码管
{
u8 j;
switch(i){
case 0: LSA=0;LSB=0;LSC=0;Lna=0;Inb=1;break;
case 1: LSA=1;LSB=0;LSC=0;Lna=1;Inb=0;break;
case 2: LSA=0;LSB=1;LSC=0;Lna=0;Inb=1;break;
case 3: LSA=1;LSB=1;LSC=0;Lna=1;Inb=0;break;
case 4: LSA=0;LSB=0;LSC=1;Lna=0;Inb=1;break;
case 5: LSA=1;LSB=0;LSC=1;Lna=1;Inb=0;break;
case 6: LSA=0;LSB=1;LSC=1;Lna=0;Inb=1;break;
case 7: LSA=1;LSB=1;LSC=1;Lna=1;Inb=0;break;
}
for(j=0;j<10;j++){
P0 = list[j];
delay(100);
}
flag++;//标志变化
}
void led_Liu(u8 i)
{
led=~(1<<i);//看最后注释
}
void main()
{
while(1){
led_Liu(flag);
DigDisplay(flag);
if(flag==7) flag= 0;
}
}
//<<是按位左移运算,~是按位取反运算,=是赋值运算。
//P2=~(1<<i)的意思是把1换成二进制数,然后左移i位,再按位取非,将结果赋给P2,等价于P2=(~(1<<i))。
//比如i为3。那么P2= ~(1<<i) = ~(1<<3) 。
//先按1个字节来看,1的二进制为00000001,左移3位得到00001000。取反得到11110111,即十六进制的F7。
//如果整数为4个字节,那么P2= ~(1<<3) = 0xFFFFFFF7。
//****************************************************************************
//状态:数码管第一个亮9秒然后电机转向改变,第二个数码管再亮9秒,依次下去,电机转向每个都不一样,同时led灯会根据数码管切换
单片机实例——直流电机定时转向
©著作权归作者所有,转载或内容合作请联系作者
- 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
- 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
- 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
推荐阅读更多精彩内容
- 直流电机(direct current machine) 能将直流电能转换成机械能(直流电动机)或将机械能转换成直...
- 文章转载自:http://www.instructables.com/作者:belliedroot翻译:ilang...