求一个51单片机的C语言程序,8个LED4种亮法,自上而下,自下而上,高低4位交替亮,一个个灭直到全灭。

作者&投稿:能牲 (若有异议请与网页底部的电邮联系)
用单片机C语言编程,实现8个LED灯,高4位与低4位交替点亮。~

#include sbit M=P1^0;void delayms(unsigned char ms) { unsigned int i; while(ms--) { for (i=0 ;i<100;i++); } } main () { unsigned char LED; LED =0xff; P1=LED; while(1) { LED=0xe7; P1=LED; delayms(1000); LED=0xdb; P1=LED; delayms(1000); LED=0xbd; P1=LED; delayms(1000); LED=0x7e; P1=LED; delayms(1000); } }

走马灯的程序到处是吧。给你贴一个杜洋的流水灯,自己参考着改。
/*********************************************************************************************
程序名:    8路流水灯
编写人:    杜洋 
编写时间:  2009年5月13日
硬件支持:  STC12C2052 内部RC或外部12MHZ晶振
接口说明:  8个LED彩灯接P1口
修改日志:  
  NO.1-2009年5月14日 在程序前面加入参数定义项 
/*********************************************************************************************
说明:
根据参数设置产生流水LED效果。

/*********************************************************************************************/

#include //51头文件

/*********************************************************************************************/

#define DY_PORTP1 //设置LED连接的I/O组
#define DY_SPEED100 //设置每一个明亮级的停留时间(值域:0~65535)

/*********************************************************************************************

bit [自定义名] ; //定义一个位(位的值只能是0或1)例:bit LED
#define [代替名][原名] //用代替名代替原名(可以方便修改常改或调试的值)例:#define LED P1
sbit [自定义名] = [系统位名] ; //自定义系统位名。例:sbit Add_Key = P3 ^ 1;
unsigned char [自定义名] ; //定义一个0~255的整数变量.例:unsigned char a;
unsigned int [自定义名] ; //定义一个0~65535的整数变量

/*********************************************************************************************/
void delay (unsigned int a){ // 1ms延时程序
unsigned int i;
while( --a != 0){
for(i = 0; i < 600; i++);//STC单片机在外部晶振为12MHz时i值上限为600
} //AT89C51单片机在外部晶振为12MHz时i值上限为125
}
/*********************************************************************************************/
void main(void){
unsigned int i;
unsigned int temp;
while(1){
temp=0x01;
for(i=0;i<8;i++){ //8个流水灯逐个闪动
DY_PORT=~temp;
delay(DY_SPEED); //调用延时函数
temp<<=1;
}
temp=0x80;
for(i=0;i<8;i++){ //8个流水灯反向逐个闪动
DY_PORT=~temp;
delay(DY_SPEED); //调用延时函数
temp>>=1;
}
temp=0xFE;
for(i=0;i<8;i++){ //8个流水灯依次全部点亮
DY_PORT=temp;
delay(DY_SPEED); //调用延时函数
temp<<=1;
}
temp=0x7F;
for(i=0;i<8;i++){ //8个流水灯依次反向全部点亮
DY_PORT=temp;
delay(DY_SPEED); //调用延时函数
temp>>=1;
}
}
}
/*********************************************************************************************/

我给你做个例子吧,把接LED灯的io口赋值0,灯亮;把接LED灯的io口赋值1,灯灭
因为一般接io口的LED灯有个上拉高电平,io这端给他个低电平(0),造成电压差,就有电流通过,灯就亮了;反之,io给高电平(1),没有压差,无电流,灯灭。

下面的你自己应该可以写了,锻炼下手。

void delay(void)
{
int i=10000; //这个值调整亮灯灭等快慢,越小越快越大越慢

while(i--)
return;
}

//从上到下亮灯
void LED_a(void)
{
LED_IO1 = 0;
delay();
LED_IO2 = 0;
delay();
LED_IO3 = 0;
delay();
LED_IO4 = 0;
delay();
LED_IO5 = 0;
delay();
LED_IO6= 0;
delay();
LED_IO7= 0;
delay();
LED_IO8= 0;
delay();

}

//开始灯全灭
void LED_dengmie(void)
{
LED_IO1 = 1;
LED_IO2 = 1;
LED_IO3 = 1;
LED_IO4 = 1;
LED_IO5 = 1;
LED_IO6= 1;
LED_IO7= 1;
LED_IO8= 1;
}

main()
{
LED_dengmie();

LED_a();
}

#include <reg51.h>
unsigned char P1;
void delay05s(void)
{
unsignedchar i,j,k;
for(i=50;i>0;i--)
for(j=20;j>0;j--)
for(k=248;k>0;k--);
}
void main(void)
{
while(1)
{
//自上而下
P1=0xfe;delay05s();P1=0xfd;delay05s();P1=0xfb;delay05s();
P1=0xf7;delay05s();
//自下而上
P1=0xf7;delay05s();P1=0xfb;delay05s();P1=0xfd;delay05s();
P1=0xfe;delay05s();
//交替
P1=0xfC;delay05s();P1=0xf3;delay05s();
//一个个灭
P1=0xf0;delay05s();P1=0xf1;delay05s();P1=0xf3;delay05s();
P1=0xf7;delay05s();P1=0xff;delay05s();
}
}

#include<reg51.h>
#define uchar unsigned char
uchar led;
void delay()
{
uchar i,j;
for(i=0;i<100;i++)
for(j=0;j<125;j++);
}
main()
{
uchar i;
while(1)
{
led=0xfe;
i=8;
while(i--)
{
P0=led;
delay();
led<<=1;
led|=0x01;
}

i=8;
led=0x7f;
while(i--)
{
P0=led;
delay();
led>>=1;
led|=0x80;
}

i=8;
led=0x0f;
while(i--)
{
P0=led;
delay();
led>>~led;
}

i=8;
led=0x00;
P0=led;
delay();
while(i--)
{
led|=0x80
P0=led;
delay();
led>>=1;
}
}
}


求51单片机c程序:用三个按键,kye1启动led1,key2启动led2 led1停止 在...
include<reg51.h>sbit key1=P1^0;sbit key2=P1^1;sbit key3=P1^2;sbit led1=P1^4;sbit led2=P1^5;bit flag=0;main(){while(1) { if(flag==0 && key1==0) { led1=0; while(key1==0); } if(key2==0) { led1=1; led2=0; while(...

一个用C语言做51单片机做流水灯控制向左移动一位,右边补0的一段程序...
\/\/右边补0,直接移位就可以temp<,=1; 如果流水灯只有一个亮,下面的程序就是对的,移位之后补1.include "reg51.h"void delay(unsigned char m);main(){ unsigned char temp;temp=0xfe; \/\/temp=1111 1110,使得P1口的某个引脚为低电平(亮)while(1){ P1=temp; \/\/P1口的数据来自...

51单片机怎么用c语言写一个按钮控制一个led的闪烁,按一下开始闪烁,再按...
ledflash(){ if(flash){ led=1;\/\/点亮 delay(100);\/\/延时100MS led=0;\/\/熄灭 } else led=0;} void delay(unsigned int i){自己根据单片机频率写个1MS带形参的演示程序} 这个程序是现写的。。应该能执行,有些细节没有写,自己修改下,只是个大框而已(比如函数声明,定义端口什么的)...

51单片机8个灯每两个一起亮灯的c语言程序
\/\/假设晶振12MHZ,P1控制LED低电平亮 include "reg51.h"unsigned int YSJS=0;unsigned int P1BUF=0X03;void main(void){ TMOD |= 0X10; \/\/定时器1工作于方式1,16位定时器 TH1 = 0XFF; \/\/定时器1定时时间=500uS TL1 = 0X06;ET1 = 1; \/\/使能定时器1中断 EA =1; \/...

51单片机用c语言怎么让i得到一个0-15的随机数
启动计数器0,将TL0的值%16即可得到!static unsigned char random=5; \/\/再次运行时值已改变。char i;TMOD= 0x20;TR0 =1;for(i=0;i<random; i++);\/\/运行一段时间 ramdom *= TH0;random %=16;

51单片机 如何检测某个引脚是否为高低电平 求一个C源程序实例
采纳率:41% 擅长: 硬盘 操作系统\/系统故障 C\/C++ 电子数码 足球 其他回答 判断端口是1还是0. bai_yechuang | 发布于2011-01-28 举报| 评论 2 0 用LED指示引脚状态。要求:一个51最小系统版,一个LED,一个1K~10K的电阻(4.7K)。+5V电源接到LED的正极,串联一个4.7K电阻,接到单片机的引脚上(如P0....

一个51单片机,晶振为12MHz,让前三个LED灯分别以1ms,1s,5s的频率闪烁...
LED1 1ms闪烁人眼分辨不出来 定时器设定为16位定时50ms 另设一变量作定时器中断计数,到10(0.5S)的倍数时LED2取反,到50(2.5S)的倍数时LED3取反 include<reg52.h> sbit led1=P0^0;sbit led2=P0^1;sbit led3=P0^2;unsigned int count;void main(){ TMOD=0x01; \/\/定时器0...

C51单片机用的是C语言还是汇编语言?谢谢
两种语言都可以,因为最后烧写到芯片中的是二进制文件,该二进制文件由编辑器(如KEIL)编译连接C语言源码,或者汇编语言源码获得

51单片机用内部中断 1s一个中断C程序怎么写
假设你的外部晶振为12M(时钟频率为1M),用复合定时法,即把小值定时叠起来void t0() interrupt 1{中断服务程序;}主函数:TMOD=0x01; \/\/设置为定时器0工作方式1for(t=20;t>0;t--){ TH0=(65536-50000)\/256; TL0=(65536-50000)%256; \/\/赋初值使一次定时为50ms TR0=1; ...

请高手具体解释一下以下51单片机C语言程序:
void timer() interrupt 1 using 2\/\/定时器0中断函数,interrupt 1是T0的中断入口 { Flag_Delay5ms=0;\/\/将 延时5ms 标志位 置为 0,表示5ms结束 TH0=-5000\/256;\/\/为T0高8位赋初值,相当于TH0=(65536-5000)\/256;可以推出晶振为12MHz TL0=-5000%256;\/\/为T0低8位赋初值,同上 } \/*延时...

吴江市19576197392: 51单片机8个灯同时闪烁数程序用定时器写怎么写?c语言版. -
霍类开塞: 你就先写个清零端清零,然后同时低电平控制八个灯,写个延时程序,然后同时给给高电平,定时器记时.

吴江市19576197392: 51单片机双键控制八位流水灯C程序 -
霍类开塞: #include<reg51.h>#define uchar unsigned char uchar num,flag=0; sbit K1=P1^0; sbit K2=P1^1; void t0isr() interrupt 1 { TH0=(65536-50000)/256; TL0=(65536-50000)%256; num++; if(num>=20){num=0;flag=1;} } main() { uchar LED; TMOD=0x...

吴江市19576197392: C语言编程51单片机,启动时8个LED闪烁,按下K1数码管显示28,求大神给个编好的程序谢谢! -
霍类开塞: void onboot() {/* 执行LED灯闪烁*/} void ongpio8() {/* 执行K1数码管显示.例如 */}

吴江市19576197392: 急求51单片机计数器的C程序!!! -
霍类开塞: #include "reg51.h" unsigned char time; void main() { EX0=1; //开外部中断 IT0=1;//设置边沿触发 EA=1; //开放全局中断 while(1) { P0=~time; // 通过P0口的LED显示出计数值(二进制形式) } } void INT_0() interrupt 0 { while(INT0==0); time++;//每按下一次计数加1.}

吴江市19576197392: 51单片机,有8个流水灯,每个之间延迟1秒,这个延迟用c程序编写怎么写 -
霍类开塞: 要看你的时钟周期,如果是12Mhz的话,每个时钟周期MC=6*2/12 M =1us,所以延迟是让机器计数1000000下,上面那个公式你自己套用24Mhz的就是2000000下.c语言的循环次数你自己算,每条指令一个周期,所以楼上的程序在12Mhz下是1s延迟.

吴江市19576197392: 求一个51单片机简单的中断C语言程序 -
霍类开塞: #include<reg52.h> //头文件 #define uint unsigned int //宏定义,如果你不嫌麻烦可以直接省略 #define uchar unsigned char void delay(uint); //字程序声明 sbit D1=P1^0 ; //位定义 第一盏灯 sbit D2=P1^1 ; //第二盏,同上 sbit D3=P1^2 ; // 3 sbit ...

吴江市19576197392: 急求一个51单片机c语言程序
霍类开塞: #include<reg52.h> #define uint unsigned int #define uchar unsigned char sbit wela=P3^1; sbit dula=P3^2; uchar code tabledu[]={0x77,0x7c,0x39,0x5e,0x79,0x71,0x6f}; uchar code tablewe[]={0xfe,0xfd,0xfb,0xf7}; uchar tt=0,numdu,numwe; void init() ...

吴江市19576197392: 求写一段简单的51单片机C语言代码 -
霍类开塞: 单片机检测高电平.1、可以用外部中断,外接激光传感器最好用普通光耦隔离一下,顺便改成低电平触发单片机中断.然后用位移指令移动跑马灯,然后计数值加1. 2、可以用循环检测,也建议用光耦隔离先,在MAIN里面不断检测P00,发现变化后,再次检测以便确认,确认后同样位移一下跑马灯,然后计数加1.

吴江市19576197392: 8051单片机c语言编一个程序 8个按键按下显示相应1到8 -
霍类开塞: 8 个独立按键? #include<reg51.h>#define uchar unsigned char#define uint unsigned int uchar i; uchar code tab[]={ 0xC0,/*0*/ 0xF9,/*1*/ 0xA4,/*2*/ 0xB0,/*3*/ 0x99,/*4*/ 0x92,/*5*/ 0x82,/*6*/ 0xF8,/*7*/ 0x80,/*8*/ 0x90,/*9*/ }; sbit key1=P1^0; sbit key2...

吴江市19576197392: 求51单片机8个LED灯实现跑马灯左移的c语言程序??求每部的详细说明,好的话可追分,谢谢 -
霍类开塞: 十六进制0xfe,对应二进制 1111_1110 这个二进制,对应引脚为 p1.7 p1.6 p1.5 p1.4 p1.3 p1.2 p1.1 p1.0 p1 = 0xfe,则对应p1.0为0,其他引脚输出1. 你的led,必然是共阳极.所以p1.0对应的灯亮. (如果是共阴极,那么p1.7~p1.1共7个led亮,p1.0上的led不亮)

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