① 求用c语言编程实现51单片机的LED灯移动
#include<reg52.h>
#define uchar unsigned char
#define uint    unsigned int
uchar a,b,c,d;
void delay()
{
    uint i;
    for(i=0;i<200;i++)
}
void anjian()
{
    if(P1^0==0)
    {
         delay();
         if(P1^0==0)
         a=1;
    }
    if(P1^1==0)
    {
         delay();
         if(P1^1==0)
         b=1;
    }
    if(P1^2==0)
    {
         delay();
         if(P1^2==0)
         c=1;
    }
    if(P1^3==0)
    {
         delay();
         if(P1^3==0)
         d=1;
    }
}
void main()
{
    while(1)
    {
    anjian();
    if(a==1)
    .......                              //io口做相应的处理,这里你具体没说明,我都不知道怎么写了
    if(b==1)
    .......   
    if(c==1)
    .......
    if(d==1)
    .......
}
}
② 求通过一个开关的通断实现两种功能的切换,C语言程序,主程序应该如何设计
给你个没有按键百的,按键程序自己加上就行了
#include <reg51.h>
void main()
{
unsigned int i = 0; //定义循环变量i,用于软件延时度
unsigned char cnt = 0; //定义计数变量cnt,用于移位控制
while (1) //主循环,程序无限循环执行该循环体语句
{
P0 = ~回(0x01 << cnt); //P0等于1左移cnt位,控制8个LED
for (i=0; i<20000; i++); //软件延时
cnt++; //移位计数变量自加1
if (cnt >= 8) //移位计数超过7后,再重新答从0开始
{
cnt = 0;
}
}
}
③ 用c语言一个开关控制两个灯开关闭合灯1亮灯2灭开关打开灯1灭灯2亮
开关控制的话就不用编程语言了好吗,因为开关是直接的物理连接,通过电路实现就好,那我就理解成你是想用单片机来实现吧,首先单片机与外设怎样连接我不考虑,因为你没说。那么我就当是我可以随意的使用单片机的输出吧,然后开关闭合理解成按键是高电平,再按一次取反。
#include<89c51.h>//是不是这个头文件记不清了。。
#defineuintunsignedint
#defineucharunsignedchar
#defineLED1P1_0
#defineLED2P1_1
#defineKEY1P0_1
/*函数声明,延迟函数,LED灯初始化函数,按键KEY初始化,按键KEY查询函数*/
voidDelayMs(uintn);
voidLEDInit(void);
voidKEYInit(void);
ucharKEYScan(void);
/*主函数*/
voidmain()
{
LED1=0;
LED2信袭码=1;//不同的接法可能导致结果不一样,有的高电平亮有的低电平
while(1)//具体看你自己的板子怎么接的
{
if(KEYScan())
LED1=~LED1;
LED2=~LED2;
}
}
/*检测按键状态*/
ucharKEYScan(void)
{
if(KEY1==0)
DelayMs(100);//延时一段时间,以免抖动
禅宏if(KEY1==0)
{
滑哪DelayMs(100);
while(KEY1==0);
return1;
}
else
return0;
}
/*延迟函数*/
voidDelayMs(uintn)
{
inti;
while(n--)
{
for(i=587;i>0;i--);
}
}
以上代码是做CC2530实验的时候做的,修改了一下。
④ C语言:开关灯
#include"stdio.h"
intmain(intargc,char*argv[]){
charlmp[5001];
inti,j,N,M;
printf("PleaseenterN&M(int0<N<5001,0<M<=N)... ");
if(scanf("%d%d",&N,&M)!=2||N<1||N>5000||M<1||M>N){//保证输入的N,M符合要求,否则退出
printf("Inputerror,exit... ");
return0;
}
for(i=1;i<=N;lmp[i++]=1);//N盏灯全开启(原始状态)
for(i=1;i<=M;i++)//遍历M个人
for(j=1;j<=N;lmp[j++]^=!(j%i));//每个人把与自己编号成整数倍的灯作相反操作
for(j=0,i=1;i<=N;i++)//输出,从编号小至大遍历所有灯
if(!lmp[i])//输出已被关闭的灯的编号
printf(j++?",%d":"%d",i);
printf(" ");
return0;
}
运行样例:

⑤ 请按照如下下降沿/上升沿触发时序图写一段C语言程序
电子的课程我几乎全忘了,我翻了翻书,我当初学51单片机串口通信,用的是汇编。
我当初用C语言写51单片机代码的时候,编译变成机器代码,但是keil编辑器可以把机器代码转成助记符,就是汇编。我看了之后发现一条C语言代码会翻译成多条汇编,如果是循环,翻译成汇编就会更复杂,所以用C语言写51单片机代码,代码运行时间会更长,时间不能自己掌握,因为我不知道翻译成多少条汇编了。所以51单片机还是要用汇编写比较好。
我也不知道为什么你会直接用C语言写时序图,我只是觉得用汇编会简单点。
⑥ 用c语言来控制一个轻触开关,那种开关是按下去是闭合的,但是一松手开关就断开了。
这个开关如果不是总电源的话,还是很容易实现的,比如,你可以定义个全局变量,初始值为0,然后单片机检测按键是否按下,按下则对这个变量取如坦慎反,然后判断这个渣敬是否为0xff(定义开启电机的值为0xff),是那就开启电机,否则关闭;如信散果这个开关时总电源的开关的话,则有点麻烦,需要有硬件的支持。
⑦ c语言 用边沿触发使流水灯暂停,按钮控制,按一下暂停,按一下继续
#include<reg52.h> //引用库文件
void delay() //延时函数
{
unsigned char i,j; //定义两个变量,用于空循环
for(i=0;i<200;i++)
for(j=0;j<200;j++)
;
}
unsigned char flag;
void main()
{
unsigned char i;
flag=1;
EA=1; //开放总中断
EX0=1; //允许使用外中断
橘衫桥IT0=1; //选择负跳变来触发外中断
while(1) //用于反复循环
{
for(i=0;i<8;i++)
{
P1=~(1<<i);
delay(); //调用延时函数
while(flag!=1);
}
i=0;
//
}
}
/**************************************************************
函数功能:外中断T0的中断服务程序
**************************************************************/
void int0(void) interrupt 0 using 0 //外中断0的中断编圆猛号为0
{
flag=~flag;
}
仿真图:

楼主的采纳率好低啊(时间久了,估计塌哗给你回答的人会变少),不过我还是希望楼主能采纳
⑧ 帮我看看这段程序为什么编译时错误,求高手帮我改下啊。修改后可以用的话我会追加分的。谢谢啦。
#include<reg51.h>
#define LEDData P0
unsigned char code LEDCode[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
unsigned char time=99;
unsigned char second,count,count1;         //秒,计数器
sbit LEDH = P2^6;       //高位阴极
sbit LEDL = P2^7;          //低位阴极
                    sbit buzzer = P2^5;          //蜂鸣器
sbit Alam=P3^6;
          
bit  Over = 0;        //倒计时到0标志    
void buzzer1(void);
void Delay5ms(void)
{
 unsigned int i;
 for(i=1000;i>0;i--);
}
void DisplayTime(void)
{
 LEDData=LEDCode[second/10];
 LEDH=0;
 Delay5ms();
 LEDH=1;
 LEDData=LEDCode[second%10];
 LEDL=0;
 Delay5ms();
 LEDL=1;
}
//******************************主函数*************************************************
 
void main(void)
{
 TMOD=0x11;      //两个8为计数器
  TL0=0xb0;  //两个8位定时计数器
  TH0=0x3c;  //两个8位定时计时器
  TL1=0xb0;  //作计数器
  TH1=0x3c;  //作寄存器
 second=time;
  EA=1;   //总中断打开
 ET0=1;   //定时器0中断打开
 ET1=1;    //定时器1中断打开
  TR0=0;   //定时器0开关关闭
 TR1=0;   //定时器1开关关闭
 EX0=1;   //外部中断0开
 IT0=1;   //边沿触发
 IT1=1;   //边沿触发
 EX1=1;   //外部中断1开
 PX0=1;   //外部中断0为高优先级控制圆尘明位
 PX1=1;   //外部中断1为高优先级控制位
 PT0=0;   //定兄则时/ 计数器T0为低优先级中断
  while(1)
  {
  DisplayTime();
 if(Over)
 { //
 buzzer1();//();/延时一会儿buzzer();延时一会儿buzzer();延时一会儿
 }
    }
}
void PxInt0(void) interrupt 0
{
 if(Over==1)
 {
  second=time;
  Over=0;
  TR1=0;      //定时器1开关关闭
  Alam=1;
  TH1=0x3C;       //作寄存器
  TL1=0xB0;      //作计时器
 }
 else
 {
  second=second;
 }
 TR0=1; //--------------开启计时器
}
void PxInt1(void) interrupt 2
{
    TR0=0; //--------------关闭计时器
}
 
//*********************************中断服务函数**************************************
void  time0_int(void) interrupt 1 
{
  TL0=0xb0;       //计时器
  TH0=0x3c;       //寄存器
  TR0=1;        //开启计时器
   count++;
    if(count==20)
    {
  count=0;
     second--;
     if(second==0)
   {
   second=0;
   Over=1;
   TR0=0;        //定时器橘告0关闭
   TR1=1;        //定时器1打开
   }
    }
}
//*********************************中断服务函数**************************************
void  time1_int(void) interrupt 3 
{
  TL1=0xb0;       //计时器
  TH1=0x3c;        //寄存器
  TR1=1;         //定时器1打开
   count1++;
    if(count1==10)
    {
  count1=0;
  Alam=~Alam;
  buzzer1();//();调用响一声函数
    }
}
        //*********************************响一声函数**************************************
void buzzer1(void)
{
        unsigned int b,c;
        for(b=60;b>0;b--)
            {    for(c=3;c>0;c--)
                buzzer=!buzzer; //将蜂鸣器控制端取反
            }
}
⑨ 单片机C语言中,设外中断为边沿触发, 高级中断 编写中断初始化main的函数
这是单片机c语言中断函数的编程拆缺格式,(团敏)后面的只是告诉编译系统该函数是塌御枝一个中断函数,具体的执行还是按照c语言函数的执行方式去执行。
