飞思卡尔单片机 拨码开关控制LED灯 主程序

飞思卡尔单片机 拨码开关控制LED灯 主程序,第1张

飞思卡尔单片机的普通输入输出的某一个端口同一时刻只能做输入或者输出。且需事先初始化端口寄存器。'0'为输入,‘1’为输出。同时要清空数据寄存器内容。 比方说使用PORTA_PA0口控制单个外部共阳指示灯的显示,显然为输出控制。可以这样写

/初始化/

DDRA=0X01;//定义方向寄存器输出,也可以写成0Xff 只是其他的7个口不用

PORTA_PA0=1;//共阳 初始化指示灯不亮

/主函数/

PORTA_PA0=0;//PA0端口输出0 低电平 指示灯亮

比方说使用PORTA_PA3口读取外部电平信号,显然为输入控制。可以这样写

/初始化/

DDRA=0X00;//定义方向寄存器输入,8个端口全为输入

/主函数/

unsigned char LED;

LED=PORTA_PA3;//读入端口数据

你上面的程序 我的理解是这样的,程序事先有宏定义LED_DD、 led :

LED_DD = 0x0F; //方向寄存器 高四位输入(拨码开关) 低四位输出

led = 0xFF; //给定初始值

for(;;)

{

Num = led; //读拨码开关

led = Num>>4; //送显示

delay(10);

}

单片机微控制器的工作原理是靠内部时钟晶振来执行程序的,每一个时钟周期执行一步程序。其实for循环前面的程序仅仅是完成单片机端口初始化、系统参数初始化。程序一直在for循环和中断服务程序里执行,也就是遵循扫描的原理。 没了for循环 你的程序就只能读取端口的状态一次执行到main()函数最后一条指令就停止工作了。

C语言实现LED灯闪烁控制配套51单片机开发板。

#include    //包含单片机寄存器的头文件

/

函数功能:延时一段时间

/

void delay(void)        //两个void意思分别为无需返回值,没有参数传递。

{

unsigned int i;       //定义无符号整数,最大取值范围65535。

for(i=0;i<20000;i++)  //做20000次空循环。

;               //什么也不做,等待一个机器周期。

}

/

函数功能:主函数 (C语言规定必须有也只能有1个主函数)。

/

void main(void)

{

while(1)      //无限循环。

{

P0=0xfe;   //P1=1111 1110B, P00输出低电平。

delay();   //延时一段时间。

P0=0xff;   //P1=1111 1111B, P00输出高电平。

delay();  //延时一段时间。

}

}

单片机驱动LED灯的源程序:

#include<reg52h> //头文件。

#define uint unsigned int

#define uchar unsigned char

sbit LED1=P1^7; //位定义。

void delay_ms(uint);//mS级带参数延时函数。

void main()

{

while(1)

{

LED1=0;

delay_ms(1000);

LED1=1;

delay_ms(1000);

}

}

void delay_ms(uint z) //延时子程序

{

uint x,y;

for(x=z;x>0;x--)

for(y=110;y>0;y--);

}

扩展资料:

单片机应用分类:

通用型:

这是按单片机(Microcontrollers)适用范围来区分的。例如,80C51式通用型单片机,它不是为某种专门用途设计的;专用型单片机是针对一类产品甚至某一个产品设计生产的,例如为了满足电子体温计的要求,在片内集成ADC接口等功能的温度测量控制电路。

总线型:

这是按单片机(Microcontrollers)是否提供并行总线来区分的。总线型单片机普遍设置有并行地址总线、 数据总线、控制总线,这些引脚用以扩展并行外围器件都可通过串行口与单片机连接。

另外,许多单片机已把所需要的外围器件及外设接口集成一片内,因此在许多情况下可以不要并行扩展总线,大大减省封装成本和芯片体积,这类单片机称为非总线型单片机。

控制型:

这是按照单片机(Microcontrollers)大致应用的领域进行区分的。一般而言,工控型寻址范围大,运算能力强;用于家电的单片机多为专用型。

通常是小封装、低价格,外围器件和外设接口集成度高。 显然,上述分类并不是惟一的和严格的。例如,80C51类单片机既是通用型又是总线型,还可以作工控用。

参考资料来源:百度百科-单片机

keil使用教程编写第一个led灯程序

1、新建一个空文件夹

2、打开keil-->newuVisionproject

3、选择目录,命名文件

4、选择芯片

5、添加文件

6、编写C51单片机程序

7、生成可以加载单片机里的hex文件

8、编译生成hex文件

9、将hex文件导入单片机

可以通过左移函数_crol_()和右移函数_cror_()来实现LED等的来回流动。 具体实现方法可以参考如下程序: #include #include #define uint unsigned int#define uchar unsigned charvoid delay(uint a);void main(){ P1=0xfe; while(1) { // 向左循环点亮LED for(i=0; i<7; i++) { P1=_crol_(P1,1); // 左移一位,点亮下一位LED delay(55); } // 向右循环点亮LED for(i=0; i/ 右移一位,,点亮上一位LED delay(55); } }}// 延时函数,延时a毫秒void delay(uint a){ uint x,y; for(x=a;x>0;x--) for(y=110;y>0;y--);}

位申明LED,再用for语句写个延时函数,主函数如下

while(1)

{

led1=1;

delay(10);

led1=0;

delay(10)

led2=1;

delay(10);

led2=0;

delay(10);

led3=1;

delay(10);

led3=0;

delay(10);

}

#include<reg51h>

#include<intrinsh>

#define uchar unsigned char

#define uint unsigned int

//延时

void DelayMS(uint x)

{

uchar i;

while(x--)

{

for(i=0;i<120;i++);

}

}

//主程序

void main()

{

uint s;

while(1)

{

P0=0xfe;

DelayMS(150);

for(s=8;s>1;s--)

{

P0=_crol_(P0,1); //P0 的值向左循环移动

DelayMS(150);

}

P0=0x00;

DelayMS(150);

p0=0xff;

DelayMS(150);

扩展资料:

常用单片机汇编指令:

1 MOV A,Rn 寄存器内容送入累加器

2 MOV A,direct 直接地址单元中的数据送入累加器

3 MOV A,@Ri (i=0,1)间接RAM 中的数据送入累加器

4 MOV A,#data 立即数送入累加器

5 MOV Rn,A 累加器内容送入寄存器

6 MOV Rn,direct 直接地址单元中的数据送入寄存器

7 MOV Rn,#data 立即数送入寄存器

8 MOV direct,A 累加器内容送入直接地址单元

9 MOV direct,Rn 寄存器内容送入直接地址单元

10 MOV direct,direct 直接地址单元中的数据送入另一个直接地址单元

11 MOV direct,@Ri (i=0,1)间接RAM 中的数据送入直接地址单元

12 MOV direct,#data 立即数送入直接地址单元

13 MOV @Ri,A (i=0,1)累加器内容送间接RAM 单元

14 MOV @Ri,direct (i=0,1)直接地址单元数据送入间接RAM 单元

15 MOV @Ri,#data (i=0,1)立即数送入间接RAM 单元

16 MOV DPTR,#data16 16 位立即数送入地址寄存器

17 MOVC A,@A+DPTR 以DPTR为基地址变址寻址单元中的数据送入累加器

18 MOVC A,@A+PC 以PC 为基地址变址寻址单元中的数据送入累加器

19 MOVX A,@Ri (i=0,1)外部RAM(8 位地址)送入累加器

20 MOVX A,@DPTR 外部RAM(16 位地址)送入累加器

21 MOVX @Ri,A (i=0,1)累计器送外部RAM(8 位地址)

22 MOVX @DPTR,A 累计器送外部RAM(16 位地址)

23 PUSH direct 直接地址单元中的数据压入堆栈

24 POP direct d栈送直接地址单元

25 XCH A,Rn 寄存器与累加器交换

26 XCH A,direct 直接地址单元与累加器交换

27 XCH A,@Ri (i=0,1)间接RAM 与累加器交换

28 XCHD A,@Ri (i=0,1)间接RAM 的低半字节与累加器交换

参考资料来源:百度百科-单片机汇编指令

以51单片机为例 LED接到P10端口的 #include “reg51h” sbit LED=P1^0; mail() { LED=0; //初始化LED为关闭状态 while(1) { LED=1; //点亮LED } } 完 最主要还要看看你的硬件

以上就是关于飞思卡尔单片机 拨码开关控制LED灯 主程序全部的内容,包括:飞思卡尔单片机 拨码开关控制LED灯 主程序、用C语言编写一个单片机控制LED灯闪烁变化的编程 急用!!!!!!!!!、Keil四个LED灯点亮程序等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/zz/9772530.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-01
下一篇2023-05-01

发表评论

登录后才能评论

评论列表(0条)

    保存