‘壹’ 求一个简单的LED灯c语言程序
初始化部分你要自己根据芯片资料写,数码管部分可以根据数码管的资料做数组xs[10]={0x3b……}要看数码管引脚定义了,看原理图看不出来的,可以做个200ms的定时器,然后计数5次就是1s
直接给数码管的io口附数组的值,如p1=xs[5];要看你给的是哪个io口了,我这边看不清你的原理图,led亮200ms后就换动作太快,看不出效果,可以把时间加长
‘贰’ C语言编写程序用于16LED显示屏键盘输入汉字LED屏输出
#include<reg52.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
/*下面是引脚连接关系*/
sbit AD_EOC =P2^4; /*转换完成指示*/
sbit AD_IOCLK =P2^3; /*时 钟*/
sbit AD_DATIN =P2^2; /*数据入*/
sbit AD_DATOUT=P2^1; /*数据出*/
sbit AD_CS =P2^0; /*片 选*/
uint ad_result; /*存各模拟通道的数据*/
sbit E=P2^7;
sbit rs=P2^6;
sbit rw=P2^5;
sbit S1=P3^0;
sbit S2=P3^1;
sbit S3=P3^2;
sbit S4=P3^3;
sbit S5=P3^4;
sbit S6=P3^5;
sbit S7=P3^6;
sbit S8=P3^7;
sbit S9=P1^5;
sbit S10=P1^6;
sbit S11=P1^7;
sbit S12=P1^0;
uchar code zengzhen[]={"wuhanligongdaxue"};
uchar code zengzhen1[]={"Cha : mV "};
uint zengzhen2[8];
uint i,j;
uchar sum;
void delay(uint z)
{
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
void write_com(uchar com)
{
rs=0;
rw=0;
P0=com;
E=0;
delay(1);
E=1;
delay(1);
E=0;
}
void write_date(uchar date)
{
rs=1;
rw=0;
P0=date;
E=0;
delay(1);
E=1;
delay(1);
E=0;
}
void init()
{
E=0;
write_com(0x38);
write_com(0x0c);
write_com(0x06);
write_com(0x01);
}
/*启动A/D转换,并读取上次转换结果*/
uint read2543(CHN)
{
uchar i,temp;
uint read_ad_data = 0;
CHN=CHN<<4;
AD_IOCLK=0;
AD_CS=1;
AD_CS=0;
temp=CHN;
for(i=0;i<12;i++)
{
read_ad_data=read_ad_data<<1;
if((temp&0x80)!=0){AD_DATIN=1;}
else{AD_DATIN=0;}
if(AD_DATOUT){read_ad_data=read_ad_data+1;}
AD_IOCLK =1;
_nop_();_nop_();_nop_();_nop_();
AD_IOCLK =0;
_nop_();_nop_();_nop_();_nop_();
temp=temp<<1;
}
AD_CS=1;
read_ad_data=read_ad_data&0x0fff;
return(read_ad_data);
}
void display(uint k,uchar add)
{
uchar a,b,c,d;
float j=k*4.444/4.095;
uint i=j/1;
a=i/1000;
b=i%1000/100;
c=i%100/10;
d=i%10;
write_com(add);
write_date(a+0x30);
write_date(b+0x30);
write_date(c+0x30);
write_date(d+0x30);
delay(300);
}
/************显示程序*************/
/*主 程序*/
void scan()
{
if(S1==0)
{
delay(5);
if(S1==0)
{
while(!S1);
sum=1;
}
}
if(S2==0)
{
delay(5);
if(S2==0)
{
while(!S2);
sum=2;
}
}
if(S3==0)
{
delay(5);
if(S3==0)
{
while(!S3);
sum=3;
}
}
if(S4==0)
{
delay(5);
if(S4==0)
{
while(!S4);
sum=4;
}
}
if(S5==0)
{
delay(5);
if(S5==0)
{
while(!S5);
sum=5;
}
}
if(S6==0)
{
delay(5);
if(S6==0)
{
while(!S6);
sum=6;
}
}
if(S7==0)
{
delay(5);
if(S7==0)
{
while(!S7);
sum=7;
}
}
if(S8==0)
{
delay(5);
if(S8==0)
{
while(!S8);
sum=8;
}
}
if(S9==0)
{
delay(5);
if(S9==0)
{
while(!S9);
sum=9;
}
}
if(S10==0)
{
delay(5);
if(S10==0)
{
while(!S10);
sum=10;
}
}
if(S11==0)
{
delay(5);
if(S11==0)
{
while(!S11);
sum=11;
}
}
if(S12==0)
{
delay(5);
if(S12==0)
{
while(!S12);
sum=12;
}
}
}
void fw()
{
write_com(0x80+0x40+2);
for(j=0;j<12;j++)
{
write_date(zengzhen1[j]);
delay(5);
}
}
void main(void)
{
uchar h ;
uint s=0;
init();
delay(23);
write_com(0x80);
for(j=0;j<16;j++)
{
write_date(zengzhen[j]);
delay(5);
}
write_com(0x80+0x40+2);
for(j=0;j<12;j++)
{
write_date(zengzhen1[j]);
delay(5);
}
while(1)
{
if(sum==12)
{
scan();
if(sum!=12)
{
init();
delay(23);
write_com(0x80);
for(j=0;j<16;j++)
{
write_date(zengzhen[j]);
delay(5);
}
write_com(0x80+0x40+2);
for(j=0;j<12;j++)
{
write_date(zengzhen1[j]);
delay(5);
}
}
}
if(sum==11)
{
scan();
if(sum!=11)
{
fw();
}
}
scan();
if(sum==1)
{
for(h=0;h<15;h++)
{
ad_result=read2543(0);
while(!AD_EOC);
s+=ad_result;
}
s=s/15;
write_com(0x80+0x40+5);
write_date(0+0x30);
display(s,0x80+0x40+7);
s=0;
}
if(sum==2)
{
for(h=0;h<15;h++)
{
ad_result=read2543(1);
while(!AD_EOC);
s+=ad_result;
}
s=s/15;
write_com(0x80+0x40+5);
write_date(1+0x30);
display(s,0x80+0x40+7);
s=0;
}
if(sum==3)
{
for(h=0;h<15;h++)
{
ad_result=read2543(2);
while(!AD_EOC);
s+=ad_result;
}
s=s/15;
write_com(0x80+0x40+5);
write_date(2+0x30);
display(s,0x80+0x40+7);
s=0;
}
if(sum==4)
{
for(h=0;h<15;h++)
{
ad_result=read2543(3);
while(!AD_EOC);
s+=ad_result;
}
s=s/15;
write_com(0x80+0x40+5);
write_date(3+0x30);
display(s,0x80+0x40+7);
s=0;
}
if(sum==5)
{
for(h=0;h<15;h++)
{
ad_result=read2543(4);
while(!AD_EOC);
s+=ad_result;
}
s=s/15;
write_com(0x80+0x40+5);
write_date(4+0x30);
display(s,0x80+0x40+7);
s=0;
}
if(sum==6)
{
for(h=0;h<15;h++)
{
ad_result=read2543(5);
while(!AD_EOC);
s+=ad_result;
}
s=s/15;
write_com(0x80+0x40+5);
write_date(5+0x30);
display(s,0x80+0x40+7);
s=0;
}
if(sum==7)
{
for(h=0;h<15;h++)
{
ad_result=read2543(6);
while(!AD_EOC);
s+=ad_result;
}
s=s/15;
write_com(0x80+0x40+5);
write_date(6+0x30);
display(s,0x80+0x40+7);
s=0;
}
if(sum==8)
{
for(h=0;h<15;h++)
{
ad_result=read2543(7);
while(!AD_EOC);
s+=ad_result;
}
s=s/15;
write_com(0x80+0x40+5);
write_date(7+0x30);
display(s,0x80+0x40+7);
s=0;
}
if(sum==9)
{
for(h=0;h<15;h++)
{
ad_result=read2543(8);
while(!AD_EOC);
s+=ad_result;
}
s=s/15;
write_com(0x80+0x40+5);
write_date(8+0x30);
display(s,0x80+0x40+7);
s=0;
}
if(sum==10)
{
for(h=0;h<15;h++)
{
ad_result=read2543(9);
while(!AD_EOC);
s+=ad_result;
}
s=s/15;
write_com(0x80+0x40+5);
write_date(9+0x30);
display(s,0x80+0x40+7);
s=0;
}
if(sum==11)
{
for(h=0;h<15;h++)
{
ad_result=read2543(10);
while(!AD_EOC);
s+=ad_result;
}
s=s/15;
write_com(0x80+0x40+5);
write_date(1+0x30);
write_date(0+0x30);
write_date(':');
display(s,0x80+0x40+8);
write_date('m');
write_date('V');
s=0;
}
if(sum==12)
{
/*delay(100);
for(h=0;h<8;h++)
{
ad_result=read2543(h);
while(!AD_EOC);
ad_result=read2543(h);
zengzhen2[h]=ad_result;
}
*/
zengzhen2[0]=read2543(0);
while(!AD_EOC);
display(zengzhen2[0],0x80);
zengzhen2[1]=read2543(1);
while(!AD_EOC);
display(zengzhen2[1],0x84);
zengzhen2[2]=read2543(2);
while(!AD_EOC);
display(zengzhen2[2],0x88);
zengzhen2[3]=read2543(3);
while(!AD_EOC);
display(zengzhen2[3],0x8c);
zengzhen2[4]=read2543(4);
while(!AD_EOC);
display(zengzhen2[4],0x80+0x40);
zengzhen2[5]=read2543(5);
while(!AD_EOC);
display(zengzhen2[5],0x80+0x40+4);
zengzhen2[6]=read2543(6);
while(!AD_EOC);
display(zengzhen2[6],0x80+0x40+8);
zengzhen2[7]=read2543(7);
while(!AD_EOC);
display(zengzhen2[7],0x80+0x40+12);
}
}
}
望采纳谢谢
‘叁’ 用C语言怎么编写7段LED的显示程序
C语言写LED数码管显示程序与汇编是一致的,将显示的基本内容定义在一个数组中就可以了,比如:
#include<reg51.h>
#define uchar unsigned char
uchar table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f};
sbit rstkey=P2^2;
sbit speaker=P2^0;
void delay()//延时约400毫秒
{
uchar i,j;
for(i=0;i<200;i++)
for(j=0;j<250;j++);
}
main()
{
uchar i,key;
P2=0xff;
while(1)
{
i=0;
P1=table[i];
while(1)
{
key=P3;
if(key!=0)break;
}
switch(key)
{
case 0x01:i=1;break;
case 0x02:i=2;break;
case 0x04:i=3;break;
case 0x08:i=4;break;
case 0x10:i=5;break;
case 0x20:i=6;break;
case 0x40:i=7;break;
case 0x80:i=8;break;
default:break;
}
P1=table[i];//显示按下抢答器的号
P0=key;//显示按下键号的LED
while(1)
{
if(rstkey==0)break;//主持人按下复位键则重新开始
speaker=~speaker;//否则蜂鸣器报警
delay();
}
}
}
‘肆’ 用c语言单片机led灯显示数字“28”,如何编程
给LED编个数组,控制IO口,或者直接控制IO口,不过要看显示的28要多大,会占用比较多的IO口,道理和矩阵键盘差不多。
例程:
#include<reg52.h>//单片机头文件
voiddelay1ms(unsignedintms);//延时ms函数声明(可根据实际情况更改)
unsignedcharcodeled0[]={};//字码表,你自己把你要显示的字码放进去就可以了
voidmain()
{
unsignedcharw,i;
while(1)
{
//显示0
w=0x01;//行变量为第一行
for(i=0;i<8;i++)
{
P1=w;//行数据送P1口
P0=led0[i];
delayms(1);//列数据送P0口
w<<=1;//向下移动一行
}
}
}
voiddelay1ms(unsignedintms)
{
unsignedinti,j;
for(i=0;i<ms;i++)
for(j=0;j<110;j++)
}
‘伍’ 怎么用C语言编写LED屏幕测试,每过3秒钟屏幕更换一用颜色。
sbit key = P1_0; sbit led = P1_1; #define led_on 0 main() { while( key ) { led = ! led_on; } while(!key) { led = led_on; delay( 100 ); led = ! led_on; delay( 100 ); } } 上面这个是按下闪,松开灭的程序,稍微改一下,就可以做到要求的功
‘陆’ 用C语言编写一个单片机控制LED灯闪烁变化的编程 急用!!!!!!!!!
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, P0.0输出低电平。
delay(); //延时一段时间。
P0=0xff; //P1=1111 1111B, P0.0输出高电平。
delay(); //延时一段时间。
}
}
单片机驱动LED灯的源程序:
#include<reg52.h> //头文件。
#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--);
}
(6)led屏幕c语言编程扩展阅读:
单片机应用分类:
通用型:
这是按单片机(Microcontrollers)适用范围来区分的。例如,80C51式通用型单片机,它不是为某种专门用途设计的;专用型单片机是针对一类产品甚至某一个产品设计生产的,例如为了满足电子体温计的要求,在片内集成ADC接口等功能的温度测量控制电路。
总线型:
这是按单片机(Microcontrollers)是否提供并行总线来区分的。总线型单片机普遍设置有并行地址总线、 数据总线、控制总线,这些引脚用以扩展并行外围器件都可通过串行口与单片机连接。
另外,许多单片机已把所需要的外围器件及外设接口集成一片内,因此在许多情况下可以不要并行扩展总线,大大减省封装成本和芯片体积,这类单片机称为非总线型单片机。
控制型:
这是按照单片机(Microcontrollers)大致应用的领域进行区分的。一般而言,工控型寻址范围大,运算能力强;用于家电的单片机多为专用型。
通常是小封装、低价格,外围器件和外设接口集成度高。 显然,上述分类并不是惟一的和严格的。例如,80C51类单片机既是通用型又是总线型,还可以作工控用。
参考资料来源:网络-单片机
‘柒’ 基于LED显示屏设计C语言编程
本设计是在51单片机与PC机上实现基于RS232串行通讯功能的,制定和实现可靠的上下位机通讯协议,完成显示数据的下传和读取,图形和文字有静止、移入移出等多种显示方式是本设计的最大特点。第二章 系统组成与工作原理2.1系统设计要求和技术指标 此次设计的系统将由五部分(主要分为上位机部分和下位机部分,其中下位机主要分成,显示信息存储器﹑LED显示屏行驱动电路和LED点阵显示屏)组成来实现,分别为:上位PC机﹑串行电平转换器﹑显示信息存储器﹑LED显示屏行驱动电路和LED点阵显示屏。控制系统的结构框图如图2.1所示。设计要求系统能控制中文LED汉字显示,主控板采用以单片机为核心的单片机系统。MCS-51单片机具有扩展性强﹑功能强盛﹑价格较低等长处,因此,采用Atmel公司的AT89C52单片机。采用MAX232作为RS-232与TTL电平的转换器件。PC机发送到下位机的数据先由SBUF(数据缓冲区)接收,再存入EEPROM器件AT24C256中。汉字点阵显示屏可分为屏体和控制器两部分。屏体的主要部分是LED点阵屏,还有行列驱动电路。LED点阵显示屏采用8*8LED显示模块拼接而成。控制电路负责有序地选通各行,选通每一行之前还要把该行该列的数据预备好,一旦该行选通,这一行上的LED发光器件就可以根据列数据进行显示。从理论上讲,不论显示图形还是文字,只要控制这些组成图形或文字的各个点所在位置相应的LED器件发光,就可以得到想要的显示结果,这种同时控制各个发光点亮灭的方法称为静态驱动显示方式。16*16点阵共有256个发光二极管,显然单片机没有这么多的端口,假如采用锁存器来扩展端口,按8位的锁存器来计算,16*16的点阵需要256/8=32个锁存器。这个数字很大,因为这里仅仅是16*16的点阵,但是在实际应用中的显示屏往往要大的多,这样在锁存器上花的成本也就将是一个很大的数字。因此,在实际应用中的显示屏几乎都不采用静态驱动显示方式之中设计,而是采用另一种称为动态扫描的显示方式。所谓动态扫描,简朴地说就是逐行轮流点亮,这样扫描驱动电路就可以实现多行同名列共用一套列驱动器。以本次设计的16*16点阵为例,把所有的同一行发光管的阳极连在一起,把所有同一列发光管的阴极连在一起(共阳极接法),先发送出对应第一行发光管亮灭的数据并锁存,然后选通第一行使其点亮一定的时间,然后熄灭;再发送出第二行的数据并锁存,然后选通第二行使其点亮一定的时间,然后熄灭;……第十六行之后又重新点亮第一行,这样反复轮回。当这样轮回的速度足够快时(每秒24次以上),由于人眼的视觉暂留现象,就能看到显示屏上稳定的图形。采用串行传输方案,控制电路可以只用一根信号线,将列数据一位一位传往列驱动器,在硬件方面,这无疑是十分经济的。但是,串行传输过程较长,数据按顺序一位一位地输出给列驱动器,只有一行的各列数据都已传输到位之后,这一行的各列才能并行地进行显示。这样,对于一行的显示过程就可以分解成列数据准备(传输)和列数据显示两部分。对于串行传输方式来说,列数据准备时间可能相称长,在行扫描周期确定的情况下,留给行显示的时间就太少了,以至影响LED的亮度。为解决串行传输中列数据准备与列数据显示的时间矛盾问题,可以采用重叠处理的方法,即在显示本行各列数据的同时,传送下一行的列数据。为达到重叠处理的目的,列数据的显示就需要具有锁存功能。经过上述的分析,可以归纳出列驱动器电路应具备的主要功能。对于列数据准备来说,它应能实现串入并出的移位功能;对于列数据显示来说,应具有并行锁存的功能。这样,本行已准备好的数据送入并行锁存器进行显示时,串并移位寄存器就可以准备下一行的列数据,而会不影响本行的显示。该显示屏系统的原理框图如图2.1所示。
</SPAN></SPAN></SPAN></SPAN>
‘捌’ 关于LED 的C语言编程,就是用C语言编写程序,用LED 显示汉字时间数字之类的,要注意什么,电路方面,编程
看手册,把显示每个数字的接口写好,一般是移位的,然后想显示什么数字就调用哪个接口,没什么要注意的,耐心点就好
‘玖’ 求用c语言编程,控制at89s52流水灯程序,和控制led显示数字
老大,这个程序你要自己写啊,我给你思路。
LED闪烁的条件就是在对应的脚位上面出现_-_-_-_-_-_- 这样的方波啊,语句就是P3_1 = ~P3_1;//比如p3.1上有颗led
花样吗你自己组合啊,在定时器里面设置不同的频率来改变方波的周期就可以做到了啊。在高级点的可以用PWM方法来控制渐亮和渐暗啊。祝你玩的愉快!
‘拾’ 编写C语言程序,在“C语言编程训练系统”上完成LED显示功能
#include <stdio.h>
/* input to output; 1st version */
main()
{
int c;
c = getchar();
while (c != EOF) {
putchar(c);
c = getchar();
}
}