Ⅰ 基于51单片机数码管动态显示程序
你要把你的数码管电路发出来才能写程序的!!
Ⅱ 单片机数码管动态显示代码
如下:
Ⅲ 单片机 数码管动态显示代码
if(Countnum[3]++=9) 单片机里面判断是否相等是用==的而不是=
你应该写成if(Countnum[3]++==9)
而且你的写法和不规范,这个写法的意思是Countnum[3]是否等于9,然后Countnum[3]加1
其它的错误也是一样
Ⅳ C语言单片机代码 数码管动态显示
这里的16个元素代表的是从十六进制数0~9、A、B、C、D、E、F的段码,根据什么来填这些数组元素?那就要看你设计程序时定义数组的作用才能确定.table[1]对应的元素为0x06,是十六进制数,转换成二进制数是00000110B,分别对应于数码管的Dp、g、f、e、d、c、b、a 脚,所以在共阴数码管上点亮b、c两段,显示的是数字1,其它同理。
Ⅳ 数码管动态显示工作原理
1、多个数码管的段码连接在一起,位码分别控制。
2、由于段码连接在一起,如果数码管全亮,则显示的数据相同,所以为了显示不同的数字,任何时刻,只能有一个数码管显示,其余不显示。
3、用软件使这几个数码管轮流显示我们需要的数字。
4、只要更新频率足够快(>100Hz),肉眼看起来,这些数码管就同时显示我们需要的数字了。
(5)单片机数码管动态显示扩展阅读:
数码管的最常见形式有10个阴极,形状为数字0到9,某些数码管还有一个或两个小数点。然而也有其他类型的数码管显示字母、标记和符号。如一种“数码管”,其阴极为一个模板制成的面具,上面有数字形状的孔。一些俄罗斯的数码管,如IN-14,使用倒立的数字2代表5,大概是为了节约生产成本,而没有明显的技术或美学方面的原因。俄罗斯的数码管大部分都使用了倒立的2作为5。
将170伏的直流电压加在阴极和阳极之间,每一个阴极可以发出氖的的红橙色光。由于混合气体的不同,不同类型的数码管之间的颜色有所区别。寿命较长的数码管在制造中加入了汞,减少了溅射,结果发出的光的颜色为蓝色或紫色调。在某些情况下,这些颜色被玻璃上的红色或橙色过滤涂层过滤。
Ⅵ 帮忙看一下,51单片机的4位数码管动态显示
你的现象应该是那两位数码管在
16 以前显示的是 0 和 一个数,如15 时显示的是 0 和 F、14 时显示的是 0 和 e。。。
16 时显示的是 1 和 0 ,17 时显示的是 1 和 1
disbuf[0]=(((firstdat&0xf0)>>4)&0x0f);
disbuf[1]=firstdat&0x0f;
disbuf[2]=(((seconddat&0xf0)>>4)&0x0f);
disbuf[3]=seconddat&0x0f;
这里不用这么麻烦吧,直接
disbuf[0]=firstdat>>4; 右移时,低四位被移出,高四位移入0,就是你要的结果了
disbuf[1]=firstdat&0x0f;
disbuf[2]=seconddat>>4;
disbuf[3]=seconddat&0x0f;
或者
disbuf[0]=firstdat/16; 除以16 得到 16 进制的十位
disbuf[1]=firstdat%16; 对16取余得到 16进制的个位
disbuf[2]=seconddat/16;
disbuf[3]=seconddat%16;
就行了吧
我想应该不会出现没消影的,不知道你说的消影是指什么现象
Ⅶ 51单片机数码管动态显示从右往左
这是四位数码管从右从左流动显示,像滚动字幕一样的。用不着矩阵按键哪。
其实程序很简单,没那么复杂。程序如下
#include <reg51.h>
#define uchar unsigned char
#define uint unsigned int
uchar code tab[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x00};//共阴段码码,0x00为灭
void delay()//延时子程序
{
uint y;
for(y=400;y>0;y--);
}
void main()
{
uchar n,x;
while(1)
{
n++;
if(n>50)//n为显示一屏显示次数,n大小可调节流动速度
{
n=0;
x++;//从下一个位置开始显示
if(x>8)x=0;
}
}
}
仿真结果
Ⅷ 单片机数码管动态显示,急救!求C语言程序
我这里有我亲自写汇编源程序,功能是从1-99显示再返回从99-1显示,如此循环。这里我刚学单片机的时候写出来的,不过我没有现成C程序,用C写更简单。要不要这个汇编程序?要的话我就贴出来。
Ⅸ 单片机数码管动态扫描显示,时间这样设置才能更好的显示一连串数在屏幕上,有没有数码规律、
要根据数码管的数量来定的。
但是,一般来说,每一位数码管需要一定的显示时间,也就是说,你输出一位数码管的数据点亮这个数码管之后,需要一定的时间才能熄灭它并点亮下一个数码管,而不能一输出就马上熄灭它,否则亮度会非常低。
另外,全部数码管全部扫描一遍的总时间最好不要超过25mS,否则闪烁会比较严重,通常总的扫描频率要在60Hz以上,才看不到闪烁。
比如说你要扫描8位数码管,那么可以让每一位数码管点亮1mS,这样全部显示一遍就大约是8mS或稍微多一点点(算上显示处理的指令执行时间),此时的总扫描频率就是125Hz左右,这样的话,即能保证亮度,又看不到闪烁。
Ⅹ 单片机数码管动态显示0-100
给你简单的修改了一下,如果你的数码管编码没错,应该可以显示 0~99的
没添加百位显示,所以只有 0~99
//数码管动态显示+1,显示范围0-100,定时时间1s
#include<reg52.h>
sbit la=P2^6; //定义段选信号
sbit wela=P2^7; //定义位选信号
char aa,temp,,shi,ge;
char table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e};
void delay(int z); //延迟函数声明
void display(char d); //显示函数声明
void init(); //初始化函数声明
/*******************************************************************************/
/*******************************************************************************/
void main()
{
init(); //调用初始化子函数
while(1)
{
display(temp); //调用显示子函数
}
}
/*******************************************************************************/
/*******************************************************************************/
void delay(int z) //延迟子函数
{
int x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
/*******************************************************************************/
/*******************************************************************************/
void display(char d) //显示子函数
{
char d1,d2;
d2=d%10; //取个位 %求余
d1=(d/10)%10; //取十位
P0=table[d2]; la=0; delay(10); la=1;//个位显示
P0=table[d1]; wela=0; delay(10); wela=1;//十位显示
}
/*******************************************************************************/
/*******************************************************************************/
void init() //初始化子函数
{
la=0;
wela=0;
temp=0;
TMOD=0x01;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
EA=1;
ET0=1;
TR0=1;
}
/*******************************************************************************/
/*******************************************************************************/
void timer0() interrupt 1 //中断处理子函数
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256; //重载初值
aa++;
if(aa==20) //判断定时是否到达1s
{ aa=0; temp++ ; }
if(temp==100) //限制temp变化的范围,使之不超过100
{ temp=0; }
}
/*******************************************************************************/
/*******************************************************************************/
/*/////////////////////////////////////////////////////////////////////////////*/