① 用单片机控制4位LED数码管显示,先从左到右慢速动态扫描显示数字“1357”,“2468”,然后在
首先你要明确这是要在实验板上实现呢?还是只是画个仿真来实现呢?
那要仿真,首先你要画个仿真图,仿真图也不会画吗?
如果没有实验板,也没有仿真图,写了程序也没有用,那怎么执行程序呢?
② 单片机4*4键盘输入4位LED显示,
#include<reg52.h>
#defineucharunsignedchar
#defineuintunsignedint
sbitBEEP=P3^7;
ucharcodeDSY_CODE[]=
{
0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e,0x00
};
ucharPre_KeyNO=16,KeyNO=16;
voidDelayMS(uintms)
{
uchart;
while(ms--)
{
for(t=0;t<120;t++);
}
}
voidKeys_Scan()
{
ucharTmp;
P1=0x0f;
DelayMS(1);
Tmp=P1^0x0f;
switch(Tmp)
{
case1:KeyNO=0;break;
case2:KeyNO=1;break;
case4:KeyNO=2;break;
case8:KeyNO=3;break;
default:KeyNO=16;
}
P1=0xf0;
DelayMS(1);
Tmp=P1>>4^0x0f;
switch(Tmp)
{
case1:KeyNO+=0;break;
case2:KeyNO+=4;break;
case4:KeyNO+=8;break;
case8:KeyNO+=12;
}
}
voidBeep()
{
uchari;
for(i=0;i<100;i++)
{
DelayMS(1);
BEEP=~BEEP;
}
BEEP=1;
}
voidmain()
{
P0=0x00;
while(1)
{
P1=0xf0;
if(P1!=0xf0)
Keys_Scan();
if(Pre_KeyNO!=KeyNO)
{
P0=~DSY_CODE[KeyNO];
Beep();
Pre_KeyNO=KeyNO;
}
DelayMS(100);
}
}
③ 如何利用单片机让4位数码管显示
程序如下(用的是STC89C52芯片):
#include<reg52.h>//52系列单片机头文件
#defineucharunsignedchar
#defineuintunsignedint
uintx,y;
ucharcodetable[]={
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71};//共阴极数码管编码
voiddisplay(uchar,uchar,uchar,uchar);//声明子函数斗谨
voiddelay(int);//声明子函数
voidmain()
{
while(1)
{
display(1,2,3,4);//主程序始终调用数码管显示子程序
}
}
voiddisplay(uchara,ucharb,ucharc,uchard)
{
P2=0xef;
P0=table[a];//给第一个数码管送"a"
delay(1);//延时1ms
P2=0xdf;
P0=table[b];//给第二个数码管送"b"
delay(1);//延时1ms
P2=0xbf;
P0=table[c];//给第三个数码管送"c"
delay(1);//延时1ms
P2=0x7f;空亩基
P0=table[d];//给第三个数码管送"d"
delay(1);//延时1ms
}
voiddelay(uintz)//延时子函数
{
uintx,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
(3)四位数led单片机扩展阅读
led数码管是由多个发光二极管封装在一起组成“8”字型的器件,引线已在内部连接完成,只需引出它们的各个笔划,公共电极。led数码管常用段数一般为7段有的另加一个小数点,还有一种是类似于3位“+1”型。
位数有半位,1,2,3,4,5,6,8,10位等等,led数码管根据LED的接法耐昌不同分为共阴和共阳两类,了解LED的这些特性,对编程是很重要的,因为不同类型的数码管,除了它们的硬件电路有差异外,编程方法也是不同的。
④ 采用单片机与4位共阴极LED,显示1234
这是用锁存器的情况下,其谈春态中P0=0xfb P0=0xef这些语句是输出位码,它们都只有一个0,表示每次只开通某一个数码管,应根据你的硬件决定位码的数值
#include<reg52.h>
sbit la=P2^6;
sbit wela=P2^7;
#define uint unsigned int;
#define uchar unsigned char;
void delay(uint i)//延时函数
{
uint j,k;
for(j=i;j>0;j--)
for(k=125;k>0;k--);
}
uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,
0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0x00};//共含源阴极七段码
void display(uchar qian_c,uchar _c,uchar shi_c,uchar ge_c)//4位显示程序
{
P0=table[qian_c]; //显示千位
la=1;
la=0;
P0=0xfb;
wela=1;
wela=0;
delay(2);
P0=table[_c]; //显示百位
la=1;
la=0;
P0=0xf7;
wela=1;
wela=0;
delay(2);
P0=table[shi_c]; //显示十位
la=1;
la=0;
P0=0xef;
wela=1;
wela=0;
delay(2);
P0=table[ge_c]; //显示个位
la=1;
la=0;
P0=0xdf;
wela=1;
wela=0;
delay(2);
P0=0xff; //显示完毕后关闭最后一位显示
wela=1;
wela=0;
}
void main()
{
while(1)
{
dislpay(1,2,3,4);
}
}
如果没用锁存器,而只用4个三极管作位驱动
显示程序为:
void display(uchar qian_c,uchar _c,uchar shi_c,uchar ge_c)//4位显示程序
{
P0=table[qian_c]; //森岁显示千位
P1^0=0;//假设P1.0控制第一位数码管
delay(2);
P1^0=1;
P0=table[_c]; //显示百位
。。。。。。
}
⑤ 运用51单片机实现4位8段LED数码管的动态数字显示,写出C语言程序
#include<reg52.h>
#define
uchar
unsigned
char
#define
uint
unsigned
int
uchar
count;
uint
disnum;
sbit
la=P2^6;
sbit
wela=P2^7;
uchar
code
table[]={
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71};
display(uchar,uchar,uchar);
delay(uchar);
void
main()
{
EA=1;
ET1=1;
TMOD=0x10;
TH1=(65536-50000)/256;
TL1=(65536-50000)%256;
TR1=1;
while(1)
{
if(count==20)
{
count=0;
//
if(disnum==1000)
//
disnum=0;
disnum++;
}
display(disnum/100,disnum%100/10,disnum%100%10);
}
}
void
tim1()
interrupt
3
using
3
{
TH1=(65536-50000)/256;
TL1=(65536-50000)%256;
count++;
}
display(uchar
,uchar
shi,uchar
ge)
{
P0=table[];
la=1;
la=0;
P0=0xfe;
wela=1;
wela=0;
delay(1);
P0=table[shi];
la=1;
la=0;
P0=0xfd;
wela=1;
wela=0;
delay(1);
P0=table[ge];
la=1;
la=0;
P0=0xfb;
wela=1;
wela=0;
delay(1);
}
delay(uchar
x)
{
uchar
a,b;
for(a=x;a>0;a--)
for(b=255;b>0;b--);
}
//你自己看一下,有不对的就改点.别忘了给分啊
⑥ 用单片机控制4位LED数码显示,先从左到右慢速动态扫描显示数字“1357”,“2468”,然后在从
#include<reg52.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
uchar code dis_code_[]={0xf9,0xb0,0x92,0xf8,0xa4,0x99,0x82,0x80,0x88,0x83,0xc6,0xa1,0x86,0x8e,0x89,0x8c};
void delay(uint t)
{
uchar i;
while (t--)
{
for(i=0;i<200;i++);
}
}
void main()
{
uchar i,j=0x80;
while(1)
{
for(i=0;i<4;i++)
{j=_crol_(j,1);
P0=dis_code_[i];
P2=j;
delay(200);
}
}
while(1)
{for(i=4;i<8;i++)
{j=_crol_(j,1);
P0=dis_code_[i];
P2=j;
delay(180);
}
}
while(1)
{for(i=8;i<12;i++)
{j=_crol_(j,1);
P0=dis_code_[i];
P2=j;
delay(100);
}
}
while(1)
{for(i=12;i<16;i++)
{j=_crol_(j,1);
P0=dis_code_[i];
P2=j;
delay(100);
}
}
}
⑦ 用单片机控制4位LED数码管显示,先从左至右慢速动态扫描显示数字13572468 大佬求告知
主要程序如下:
uchar table[8]={1,3,5,7,2,4,6,8};//要显示的数字
uchar qian_tab[10]={.........};//七段码
while(1)
{
for(i=0;i<5;i++)//先显示1357,第二次显示3572 第三次显示5724
{
for(j=0;j<20;j++)//刷新20次约0.4秒,推进一位
{
wei1=0;P0= table[qian_tab[ i]; delayms(5);wei1=1;
wei2=0;P0= table[qian_tab[ i+1];delayms(5); wei2=1;
wei3=0;P0= table[qian_tab[ i+2]; delayms(5);wei3=1;
wei4=0;P0= table[qian_tab[ i+3]; delayms(5);wei4=1;
}
}
}
⑧ 单片机 4位led动态显示
这个是汇编
我只能帮差山你写个C语言的
假虚激中设你的数码管是铅拦低电位选通
是共阴的
#include<reg51.h>
#define
smg
P0
sbit
no1=P2^0;
sbit
no2=P2^1;
sbit
no3=P2^2;
sbit
no3=P2^3;
void
delay(int
x)
{
int
i,j;
for(i=0;i<x;i++)
for(J=0;J<120;J++);
}
void
smgscan()
{
no1=0;
smg=0xf9;
delay(20);
no2=0;
smg=0xa4;
delay(20);
no3=0;
smg=0xb0;
delay(20);
no4=0;
smg=0x99;
delay(20);
}
void
main()
{
while(1)
{
smgscan();
}
}