单片机 用C语言 keil uVision2 编程 编一个红绿灯

作者&投稿:程群 (若有异议请与网页底部的电邮联系)
即将成为单片机高手的C语言菜鸟! KEIL中如何把两个主程序合并成一个? 一个是按键程序!一个~

将两个程序分别做成连个子程序,然后在主程序中调用就成了啊!

程序采用定时器T0定时,没有用软件延时。
;以下为汇编程序
org0000h
jmpstart
org0030h

start:
movtmod,#01h
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
st:
movr2,#0
lpr2:setbp1.0
callt1500ms
clrP1.0
callt1500ms
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
jmpst

t1500ms:
movr7,#3
loop1:callt500ms
djnzr7,lpr7
ret

t500ms:
movr7,#100
loop1:callt50ms
djnzr7,lpr7
ret

t50ms:
clrtf0
movth0,#high(65536-50000)
movtl0,#low(65536-50000)
setbtr0
jnbtf0,$
clrtf0
ret

jmp$
end

//以下为C语言编程
#include

sbit P10=P1^0;
void delay50ms();
void delay500ms();
void delay1500ms();

main()
{
while(1)
{
P10=1;
delay1500ms();
P10=0;
delay500ms();
}
}

void delay50ms()
{
TMOD=0x01;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
TR0=1;
while(!TF0);
TF0=0;
}

void delay500ms()
{
unsigned char i=10;
while(i--)delay50ms();
}

void delay1500ms()
{
unsigned char i=3;
while(i--)delay500ms();
}

#include<AT89X52.H>
#define LED_D  P2
#define LED_S  P1
unsigned char code table[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90};
sfr P1M0=0xB2;
unsigned int m,i,post1,post2;
unsigned int k=0,nums=1,n=1;

void timer1() interrupt 1 using 1
{   
 i++;
 TH0=0XB1;    //初始化
 TL0=0XE0;   //初始化         
 post1=9-(i/50%10);
 post2=2-i/500; 
 m=i/25;
 if(m==60)
  i=0;
}
void initialize()
{
 P0=0XFF ;
 TMOD=0X01;
 TR0=1;
 TH0=0XB1;
 TL0=0XE0; 
}
void show()
{    switch(n)
    { case 1:
         LED_D=table[post1];
         LED_S=0x01;
      break;
      case 3:
         LED_D=table[post2];
         LED_S=0x02;
      break;
    }
 if(n++==4)
    n=1;
   switch(nums)
   {
    case 1:    
    if(m<52)
      P0=0XDE;
    if(m>=52&&m<59) 
    {P0_0=1;
     if(k++>=50000)
       {
        P0_1=!P0_1;
        k=0;
       }
  }
  if(m==59)
     nums=2;
  break;
      case 2:
    if(m<52)
       P0=0XF3;
    if(m>=52&&m<59) 
    {
     P0_3=1;
     if(k++>=50000)
     {
      P0_4=!P0_4;
        k=0;
   }
   }
  if(m==59)
     nums=1;
    break;
  default: break;
 } 
}
void main()
{
   initialize();
   EA=1;
   P1M0=0XF0;
   ET0=1;  
   TR0=1; 
   while(1)
   { 
     show(); 
   }
}

 

这是带数码管显示的红绿灯,主要用了四位8段的数码管显示时间。如果需要详细的继续追问。



很简单,延时程序 调整下就ok了

void delay(int t)
{
unsigned int i, j;
j=t*60;
while(j--)
{
for(i=1000;i;i--);
}

} //约1秒延时

调用的时候调用 参数分别设为 3 15 就可以了

#include<reg52.h>
#define uchar unsigned char
void delayms(ms);
red=P0^0;
green=P0^1
yellow=P0^2;
int main(void)
{
while(1)

{

red=0;

delayms(15000);

red=1;

green=0;

delayms(15000);

green=1;

yellow=0;
delayms(3000);

}

}
return(0);
}
void delayms(ms)
{
uchar i;
for(ms;ms>0;ms--)
for(i=110;i>0;i--);
}


全南县19457921056: keil软件用单片机控制8个LED流水灯来回点亮(C语言程序) -
大琼邦诺: #include "reg51.h"main(){unsigned int i,j;while(1){P1=0xfe; //点亮第一个LEDfor(i=200;i>0;i--)for(j=500;j>0;j--);P1=0xfd; //点亮第二个LEDfor(i=200;i>0;i--)for(j=500;j>0;j--);P1=0xfb; //点亮第三个LEDfor(i=200;i>0;i--)for(j=500;j>...

全南县19457921056: keil和vc++,单片机编程 -
大琼邦诺: 1、从编程思路的角度说,单片机上用keil编程,和用VC++编程没什么不同;2、二者语言规则不同;3、主要不同在于二者针对的对象不同,所以编译架构也就不同.不一定非要用keil,也有很多别的编译软件,有支持汇编,也有支持C的,也有...

全南县19457921056: 所有的单片机都能运行用keil软件写的C语言程序吗? -
大琼邦诺: KEIL是用C语言编写单片机程序的,但是单片机并不认识C语言,KEIL还可以把扩展名为C的文件转换为扩展名为HEX的文件,绝大多数单片机都认识HEX文件.

全南县19457921056: 用keil软件如何将汇编与C语言结合起来一起编写单片机的程序 -
大琼邦诺: 在混合编程中,最常用也是最实用的方法是在C语言中加入部分汇编语言的代码,分为两种方法. 方法1)在Keil C51的函数中直接插入汇编语句 方法2)按照Keil C51接口规则,编写汇编模块方法1是利用编译控制命令#pragma asm(用来标识...

全南县19457921056: 用Keil uVision3软件进行51单片机c语言编程,定义变量a为无符号整形出错了?具体如下 -
大琼邦诺: 这个是因为你的单词unsigned写错了.unsigned int就是定义无符号整型数,它不会对编译造成任何影响的.

全南县19457921056: 初学单片机,在使用Keil uvision4 编译C语言文件时,提示如下: -
大琼邦诺: 看看是不是设备选型选错了 还有你的g的变量是不是定义错了

全南县19457921056: 怎么用KEIL调试单片机汇编程序 -
大琼邦诺: 首先打开KEIL软件 单机项目新建 选择芯片 在点击文件新建 然后保存(**.a或者**.c)然后输入程序 在然后就连接 编译 执行 下载 ok

全南县19457921056: 单片机在Keil中用C语言怎样在PO口输出地址和数据,怎样输出16位的地址和数据. -
大琼邦诺: 输出的是二进制数,至于是地址是数据要看你的外设控制端口的接法!ALE只是外部存储器的读写使能信号!只有在单片机没有任何程序,刚上电的时候,ALE输出1/6的Fosk,希望可以给你建议!

全南县19457921056: 汇编语言和c语言混编 用keil怎么写入单片机啊?求步骤!谢谢! -
大琼邦诺: #pragma asm 汇编代码#pragma endasm 这是写法 但是要完成这种写法需要进行设置 首先看到你keil左边那个工程列表 → 选中你嵌入了汇编的C文件 → 右键→选择Option for file 然后看到弹出的对话框 在对话框右边偏少 有5个复选框 初始的设置时 复选框前面全是灰色的勾 点击“Generate Assembler SRC File”和“Assemble SRC File”这两个选项 直到勾变成黑色 保存即完成设置

全南县19457921056: 用KEIL编写C语言程序实现:单片机是AT89C51,实现一个计时器,数码管为6为的,有三个按键接在P0上. -
大琼邦诺: 按照你的要求写的程序如下,你拿去测试吧!#include "REG52.H" sbit SHUG_01 = P2^0; //数码管1 sbit SHUG_02 = P2^1; //数码管2 sbit SHUG_03 = P2^2; //数码管3 sbit SHUG_04 = P2^3; //数码管4 sbit SHUG_05 = P2^4; //数码管5 ...

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网