keiluvision4怎么编程流水灯(keiluvision3流水灯编程)

求一个基于UCOSII流水灯的程序代码,结合STM32完成,麻烦请在KEIL UVISION4上建立起工程

只有一个任务为什么还要使用操作系统呢!我没有流水灯的程序。我给你提供一个LED闪烁的程序。

程序里面建立三个任务,开始任务,LED0任务和LED1任务。LED0每秒钟亮80毫秒,LED1亮300毫秒,灭300毫秒,以此循环。

#include stm32f10x.h

#include "sys.h"

#include "usart.h"

#include "delay.h"

#include "led.h"

#include "includes.h"

#define START_TASK_PRIO 10

#define START_STK_SIZE 64

OS_STK START_TASK_STK[START_STK_SIZE];

void start_task(void *pdata);

//LED0ÈÎÎñ

#define LED0_TASK_PRIO 7

#define LED0_STK_SIZE 64

OS_STK LED0_TASK_STK[LED0_STK_SIZE];

void led0_task(void *pdata);

#define LED1_TASK_PRIO 6

#define LED1_STK_SIZE 64

OS_STK LED1_TASK_STK[LED1_STK_SIZE];

void led1_task(void *pdata);

int main(void)

{

Stm32_Clock_Init(9);

delay_init(72);

LED_Init();

LED_Init();

OSInit();

OSTaskCreate(start_task,(void *)0,(OS_STK *)START_TASK_STK[START_STK_SIZE-1],START_TASK_PRIO );

OSStart();

}

void start_task(void *pdata)

{

OS_CPU_SR cpu_sr=0;

pdata = pdata;

OS_ENTER_CRITICAL();

OSTaskCreate(led0_task,(void *)0,(OS_STK*)LED0_TASK_STK[LED0_STK_SIZE-1],LED0_TASK_PRIO);

OSTaskCreate(led1_task,(void *)0,(OS_STK*)LED1_TASK_STK[LED1_STK_SIZE-1],LED1_TASK_PRIO);

OSTaskSuspend(START_TASK_PRIO);

OS_EXIT_CRITICAL();

}

void led0_task(void *pdata)

{

while(1)

{

LED0=0;

delay_ms(80);

LED0=1;

delay_ms(920);

};

}

void led1_task(void *pdata)

{

while(1)

{

LED1=0;

delay_ms(300);

LED1=1;

delay_ms(300);

};

}

具体详解请参考开源电子网。

按键点灯程序,按一下按键灯亮(一直亮),再按一下灭,51单片机。

1、首先打开编程软件Keil uVision4,新建一个工程文件,在菜单栏中Project—— New uVision Project..。

2、然后选择单片机型号是 Atmel 公司的 AT89c52,单击OK。

3、再单击工具栏上新建按钮,新建一个文档,然后再点击保存,输入保存的路径,输入名字。

4、右键单击将这个文件添加到到工程文件夹中。

5、打开新建的文档,在文档中进行写程序。

6、点击下面方框中的图标,在Target项晶振的上写上:12.0代表晶振是12M,然后跳到Output项在生成HEX文件上打勾,点击OK。

7、然后点击三个编译按钮意思分别为:单个文件编译、编译已修改的文件、产生HEX文件,HEX文件用来下载到单片机上的,也可用来做仿真。

8、我们打开ISIS 7 Professional 软件,将程序添加到该电路中,然后按下启动按钮。

在keil中,怎么用汇编编写流水灯,先左移再右移,用汇编?

给你参考下,

;左移

star: mov r3,#8 ;设置流水位数

mov p0,#11111110b ;从p0.0开始

loop: acall d01s

mov a,p0 ;读取p0当前数据到acc

rl a ;左移一位

mov p0,a ;将左移的数据再送到p1

djnz r3,loop ;没有完成8位继续

;******************

mov p0,#0ffh ;熄灭所有灯

;******************

;右移

mov r3,#8 ;设置流水位数

mov p0,#01111111b ;从p0.7开始

loop1: acall d01s

mov a,p0 ;读取p0当前数据到acc

rr a ;右移一位

mov p0,a ;将左移的数据再送到p1

djnz r3,loop1 ;没有完成8位继续

ljmp star ;完成后返回到开始再来

;延时子程序

d01s: mov r0,#255

d01l1: mov r1,#198

djnz r1,$

djnz r0,d01l1

ret

end

用keil uvision4编一个51系列单片机流水灯,任务:流水灯要全亮,向左流水

#include "reg51.h"

#define uchar unsigned char

ucahr T[]={0xFF,0xFE,0xFC,0xF7,0xF0,0xE0,0xC0,0x80,0x00,0xFF};

void delay05s(void)

{

unsigned char i,j,k;

for(i=5;i0;i--)

for(j=200;j0;j--)

for(k=248;k0;k--);

}

void liudong()

{

ucahr i;

for(i=0;i8;i++)

{

P1=T[i];

delay05s();

}

}

void shanshuo()

{

ucahr i;

for(i=0;i5;i++)

{

P1=0x00;

delay05s();

P1=0xFF;

delay05s();

}

}

void main(void)

{

uchar i;

while(1)

{

P1=0x00;

delay05s();

liudong();

shanshuo();

}

}

361知讯网

本文链接:http://pdidw.com/keil/44615.html

发表评论

评论列表

还没有评论,快来说点什么吧~