当前位置:首页 » 编程语言 » c语言单片机控制led显示屏显示数字
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

c语言单片机控制led显示屏显示数字

发布时间: 2022-12-31 06:32:38

A. 用c语言单片机led灯显示数字“28”,如何编程

  1. 给LED编个数组,控制IO口,或者直接控制IO口,不过要看显示的28要多大,会占用比较多的IO口,道理和矩阵键盘差不多。

  2. 例程:

    #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++)
    }

B. 51单片机程序(c语言版),按键矩阵控制数码管显示数字。十位数显示不全

没有下拉电阻,如果没有下拉电阻,没有被按键时,引脚是高组态,这个时候不能用来读取数据,必须将用来读的引脚加上下拉电阻拉到地,这样才能读数据,所以你需要4个下拉电阻在键盘上。。。。 记住引脚悬空,又没有上拉或下拉电阻的时候不要读数据,这时候读的东西是不会出现你想要的结果,可能1,可能0 ,有上拉无输入时,是1,下拉式0,你这里面希望是无输入时引脚为0,所以用下拉。。。。

C. 运用51单片机实现4位8段LED数码管的动态数字显示,写出C语言程序

#include<reg51.h>
#define uchar unsigned char;
uchar distab[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0x00}; //0到f
uchar number,nn=0;
uchar dat[]={2,0,1,2,1,1,4,5,8,2};
void t0isr() interrupt 1
{
TH0=(65536-5000)/256;
TL0=(65536-5000)%256;
number++;
number%=4;
switch(number)
{
case 0:P2=0x08;P0=distab[nn];
break;
case 1:P2=0x04;P0=distab[nn+1];
break;
case 2:P2=0x02;P0=distab[nn+2];
break;
case 3:P2=0x01;P0=distab[nn+3];
break;
default:break;
}
nn++;
nn%=7;
}
main()
{
TMOD=0x01;
TH0=(65536-5000)/256;
TL0=(65536-5000)%256;
TR0=1;
ET0=1;
EA=1;
while(1);
}

D. 求C语言程序—基于AT89C51单片机驱动8*8LED阵列显示数字2012010895

使用汇编语言利用AT89C51单片机驱动8*8LED阵列显示数字2012010895倒不是很复杂,但需要知道单片机型号、晶振频率,当你有电力图贴上来也行。
//*****************************//
//程序名:十字路口交通灯控制
//编写人:黄庭剑
//初写时间:2009年1月2日
//程序功能:南北为车行道,延时60秒;东西方向为人行道,延时20秒,且在最后3秒黄灯显示2秒钟再实现切换.
//CPU说明:AT89C51型单片机; 24MHZ晶体振荡器
//完成时间:2009年1月6日
//*****************************//
#include<stdio.h>
#include<reg51.h>
#include<intrins.h>
sfr p0 = 0x80;
sfr p1 = 0x90;
sfr p2 = 0xA0;
sfr p3 = 0xb0; //这部分内容其实在“#include<reg51.h>”里已经有,但里面定义的必须区分大小写,在这里,因为我程序采用的是小写,reg51.h里对各个端口与寄存器的定义都是大写,所以在编译连接时,会报错,所以,在本设计程序里,我只用到了端口,在这里也就只定义了四个,而没有去改reg51.h里面的内容。其实两者是一样的。
sbit sw = p0^0;
sbit OE =P0^6;
sbit LE =P0^7; //74LS373锁存器控制端定义
char display[]={ 0x00,0x11,0x22,0x33,0x44,0x55,0x66,0x77,0x88,0x99 }; //p1口的数码管时间显示调用,利用74L74BCD码,8位驱动输出;
//函数声明 begin
void delay1(int count);
void delay_long(int number1,int number2);
void people_car_drive();
//函数声明end
//***********************//延时子程序
void delay1(int count)
{ int i;
for(i=count;i>0;i--)
{ ;}
}
void delay_long(int number1,int number2)
{
int a,b;
for(a=number1;a>0;a--)
{
for(b=number2;b>0;b--)
{ _nop_(); }
}

}
//**********************//延时子程序
void people_car_drive()
{
int p_1=2,i,j=9,p_2=6; //****************//行人通行时,延时20秒
p2=0x09; //南北红灯亮
p3=0x24; //东西绿灯亮

while(p_1-->0)
{ LE=1;
OE=0;
if(p_1==0){OE=1;} //当十位数减到0时,只显示个位数
p1=display[p_1];
delay1(1000);
LE=0;
j=9;
for(i=10;i>0;i--)
{
if(p_1==0&&j==3)break; //减到3时退出循环,让其黄灯闪烁显示
p1=display[j--];
delay_long(16000,2);
if(sw==1)return;
}

}

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

p2=0x12; //南北黄灯闪烁三秒,以提醒行人注意
p3=0x12;
p1=display[3];
delay_long(8000,1);
p2=0x00;
p3=0x00;
delay_long(14000,1);

p2=0x12;
p3=0x12;
p1=display[2];
delay_long(8000,1);
p2=0x00;
p3=0x00;
delay_long(14000,1);

p2=0x12;
p3=0x12;
p1=display[1];
delay_long(8000,1);
p2=0x00;
p3=0x00;
delay_long(14000,1);
//*****************以下是车辆通行时延时60秒//

p2=0x24; //南北绿灯亮
p3=0x09; //东西红灯亮

while(p_2-->0)
{ LE=1;
OE=0;
if(p_2==0){OE=1;} //当十位数减到0时,只显示个位数
p1=display[p_2];
delay1(1000);
LE=0;
j=9;
for(i=10;i>0;i--)
{
if(p_2==0&&j==3)break; //减到2时退出循环
p1=display[j--];
delay_long(16000,2);
if(sw==1)return;
}
}

p2=0x12; //南北黄灯闪烁三秒,以提醒行人注意
p3=0x12;
p1=display[3];
delay_long(8000,1);
p2=0x00;
p3=0x00;
delay_long(14000,1);

p2=0x12;
p3=0x12;
p1=display[2];
delay_long(8000,1);
p2=0x00;
p3=0x00;
delay_long(14000,1);

p2=0x12;
p3=0x12;
p1=display[1];
delay_long(8000,1);
p2=0x00;
p3=0x00;
delay_long(14000,1); //南北黄灯闪烁三秒完毕
}

void main() //主函数入口处
{
p0=0x01;
p1=0x00;
p2=0x00;
p3=0x00; //初始化各端口
{ while(1)
{
if(sw==0)
{ people_car_drive();}
else
{
p2=0x00;
p3=0x00; //关闭所有交通灯}

E. 运用51单片机实现4位8段LED数码管的动态数字显示,写出C语言程序

动态显示的是有固定格式的,赋值,开显示,延时,关显示,假设p0口接数据显示位,p2口低4位接片选,
p2=tab[1];
//赋值
p3_0=0;
//开第一位显示
for(i=0;i<200:i++);//延时
p3_0=1;
//关第一位显示
p2=tab[2];
p3_1=0;
//开第二位显示
for(i=0;i<200:i++);
p3_1=1;
这个程序就是让两个数码管分别显示1和2,注意程序开头包含头文件regx52.h,如果是包含reg52.h编译不了的

F. 单片机led显示c程序

电路图如下:

#include<reg52.h>

#defineuintunsignedint

#defineucharunsignedchar

sbitan=P2^6;

sbitwei=P2^7;

ucharcodedigit[6]={0xf9,0xa4,0xb0,0x99,0x92,0X82};

voiddelay(xms)

{

uinti,j;

for(i=xms;i>0;i--)

for(j=110;j>0;j--);

}

voidmain()

{

while(1)

{

wei=1;

P0=0x01;

wei=0;

an=1;

P0=digit[0];

an=0;

delay(500);

wei=1;

P0=0x02;

wei=0;

an=1;

P0=digit[1];

an=0;

delay(500);

wei=1;

P0=0x04;

wei=0;

an=1;

P0=digit[2];

an=0;

delay(500);

wei=1;

P0=0x08;

wei=0;

an=1;

P0=digit[3];

an=0;

delay(500);

wei=1;

P0=0x10;

wei=0;

an=1;

P0=digit[4];

an=0;

delay(500);

wei=1;

P0=0x20;

wei=0;

an=1;

P0=digit[5];

an=0;

delay(500);

}

}

G. 单片机c语言,用四个个开关控制led显示0~f,这个怎么写啊

假设P0的低4位接4 个开关,P1接一个数码管,程序大体如下:
include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
uchar num=0;
//共阴数码管七段码
uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,.......};
void delay1ms(uint i) //1ms延时程序
{uint j;
for(;i>0;i--){
for(j=0;j<164;j++)
{;} }
}
void main(void )//主程序
{

while(1)
{
num=table(0x0f&P0);
P1=num;
delay1ms(2);
}
}

H. 单片机led显示程序C语言的

该程序的原理是动态扫描,即每一时刻,只让一个数码管亮。让数码管从第一个到地第八个依次快速地显示,给人的视觉效果就是八个数码管同时显示。

/*程序让八个数码管显示数字0-7。*/

#include<reg52.h>
#include<intrins.h>包含对_crol_()函数的声明的头文件。
#define uchar unsigned char宏定义用以简写unsigned char
#define uint unsigned int

uchar temp,i;定义无字符型全局变量temp,i。

void delay(unsigned int z)//延时程序,大概延时1ms。
{
unsigned int x ,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}

uchar code table[]={
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07};//数码管真值数组,分别为0到7.

void main()
{
while(1)//大循环,让显示的状态保持
{
temp=0xfe;
for(i=0;i<8;i++)
{
P3=temp;让第一个数码管显示
P1=table[i];调用数组
temp=_crol_(temp,1); 每执行一条这个语句,temp的值左移一位
delay(4); 延时(4这个参数不知道管不管用,你实际操作的时候自己改一下)
}
i=0;
}
}

I. 怎么用C语言控制16*16的LED显示汉字数字,汉字比如“欢迎光临”,数字比如“520”; 谢谢高手指点迷津!

踩个脚印,回去看看
======================================
汇编的代码给你,相关的注释也写了,设计自己弄一下吧

SER EQU P1.0 ; TPIC6B595 第3脚
OE EQU P1.1;TPIC6B595 第8脚
RCK EQU P1.2;TPIC6B595 第12脚
MR EQU P1.3;TPIC6B595 第9脚
SRCLK EQU P1.4;TPIC6B595 第13脚
ORG 0000H
LJMP MAIN
ORG 0100H
;**************************主程序**********************************
MAIN: MOV SP,#70H
SETB OE
MOV 2BH,#00H
MOV 27H,#00H
START: ;初始化寄存器RAM单元
MOV R0, #30H
MOV R1,#64H ;30H~6FH单元清零
MOV A, #00H
ST: MOV @R0,A
INC R0
DJNZ R1,ST
;2Dh------寻址偏址 ;整屏四个字一起显示
LOOP:MOV DPTR,#TAB;赋查表初值
MOV R3,#56
PLAY: MOV 2DH,#00H
MOV 2FH,#10H
GG: LCALL LINE16;扫描显示一次
MOV 2DH,#00H
DJNZ 2FH,GG
MOV A,DPL
CLR C
ADD A, #16
MOV DPL ,A
MOV A, DPH
ADDC A ,#00H
MOV DPH, A
DJNZ R3,PLAY
SJMP START
LINE16: MOV 2BH,#16;扫16行,2BH放后还剩几行
FF: LCALL LINE1;扫描显示一行子程序
DJNZ 2BH,FF;扫描行直到16行扫完再转
RET
LINE1:LCALL MSTR;将显示的内容移入内存单元
LCALL SEND;发送串口子程序
LCALL XH;选通行子程序
RET
MSTR: ;显示内容移入内存单元
MOV R0,#30H
MOV R4,#9
MOV A,2DH;
BB: MOVC A,@A+DPTR
MOV @R0,A
INC R0
MOV A,2DH
ADD A,#16;加16移到下一行
MOV 2DH,A
DJNZ R4,BB
MOV A,2DH
SUBB A,#143
MOV 2DH,A
RET
;$$$$$$$$$$$$$$$$$$$$$$$$$$$发送数据到串口子程序$$$$$$$$$$$$$$$$$$$$$$$$$
SEND:MOV R0,#30H
MOV R5,#8 ;一行有8个字节,如每次显示字数不同要作相应改动
SETB OE
SETB MR
CLR SRCLK
CLR RCK
SETB P1.6
SETB P1.7

LQ: CLR C
MOV R2,#8
MOV A,@R0
; CPL A ;TPIC6B595应该不用这一步
LCALL DD1;调用显示一个字节的子程序
INC R0;指向下一个显示单元
DJNZ R5,LQ
RET
DD1: CLR SRCLK;清串行CP端
RLC A;
MOV SER,C
SETB SRCLK ;触发串行CP端
DJNZ R2,DD1;每个字节移8次够了向下执行
RET
;选通行子程序
XH: CLR RCK ;将输出CP变成低电平为上升沿做准备
NOP
SETB RCK
CLR P1.6
;CLR P1.7
MOV A,27H
MOV P0,A
CLR OE
LCALL DE25MS
INC A
SETB OE
SETB P1.6
MOV A,27H
ANL A,#0F0H
SWAP A
ADD A,#01H
SWAP A
MOV 27H,A
CLR MR
SETB MR
RET
DE25MS: MOV R5,#09H
DEL2: MOV R6,#0FH
DEL3: MOV R7,#01H
DJNZ R7,$
DJNZ R6,DEL3
DJNZ R5,DEL2
RET
TAB:
字库
END

两点说明:
1. 上述程序可以整屏四个字一起显示,要是要显示你说的那么些字,还得作半屏控制,实现汉字滚动,太麻烦,一时半会儿出不来。

2.
TAB:
字库
END
上面的字库根据你要显示的字,自己弄一下吧,给你个例子:
显示“欢迎光临”的话,字库为:
TAB: ;欢
DB 00H,20H,3CH,10H
DB 44H,08H,84H,04H
DB 04H,03H,04H,03H
DB 84H,04H,44H,08H
DB 3CH,10H,00H,20H
DB 00H,00H,07H,20H
DB 04H,10H,0F4H,0FH
DB 04H,10H,1CH,20H

;迎
DB 00H,00H,49H,20H
DB 6AH,10H,0DCH,0FH
DB 08H,10H,00H,20H
DB 0FEH,27H,02H,22H
DB 02H,21H,81H,20H
DB 00H,20H,02H,20H
DB 0FEH,2FH,02H,22H
DB 02H,22H,0FEH,21H

;光
DB 00H,00H,00H,20H
DB 22H,20H,24H,20H
DB 28H,10H,30H,08H
DB 0E0H,07H,3FH,00H
DB 20H,00H,0F0H,3FH
DB 28H,20H,24H,20H
DB 22H,20H,20H,20H
DB 00H,38H,00H,00H

;临
DB 00H,00H,0F0H,03H
DB 00H,00H,00H,00H
DB 0FFH,3FH,00H,00H
DB 40H,00H,20H,3FH
DB 10H,21H,0FH,21H
DB 14H,21H,24H,3FH
DB 44H,21H,04H,21H
DB 04H,21H,04H,3FH
DB 00H,00H,00H,00H

END ;程序结束

J. 求一个单片机控制单个led循环显示20141229数字的c语言程序图

/*单只数码管显示20141229*/


#include <reg51.h>

typedef unsigned char uint8;

typedef unsigned int uint16;


code uint8 LED_CODE[] = {0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90};


void delay(uint16 x)

{

uint16 i,j;

for(i = x; i > 0; i --)

for(j = 114; j > 0; j --);

}


void main()

{

uint8 led_number[] = {2,0,1,4,1,2,2,9};

uint8 i = 0;

while(1)

{

for(i = 0;i < 8;i++)

{

P0 = LED_CODE[led_number[i]];

delay(500);

}

}

}

图中缓冲器245可以不用,这里面仿真时1229因为两个2是连在一起的,所以除了显示时间长一点基本感觉不出有2个2~