导航:首页 > 操作系统 > 单片机的动态位置

单片机的动态位置

发布时间:2022-08-23 09:41:15

① 51单片机数码管动态显示的过程中,怎么实现让最后一个闪烁,其他的不受影响

闪烁原理,别的数码管都是反复刷新,需要闪烁的那一位则刷新几十次后再有几十次不显示
下例是20次亮 20次灭
uchar modtable[6][4]={ {0,0,0,0},{1,0,0,0},{0,1,0,0},{0,0,1,0},{0,0,0,1},{1,1,1,1} };
//有1的那一位数码管不亮 {0,0,0,0}不闪烁 {1,1,1,1} 4位全闪烁
uchar ia;

uchar ,shi,ge;
uchar flag=0;
uint a=0;
//共阴数码管七段码,转成共阳的需取反,程序中已这样做了

uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d, 0x07,0x7f,0x6f,0x77};
void Delay1ms(uint i) //1ms延时程序
{
uchar j;
for(;i>0;i--)
{
for(j=0;j<125;j++)
{;}
}
}
void display(uint m,uchar mode )//4位显示子程序 带某位闪烁功能
//mode=0,都不闪烁 mode=1 千位闪烁 mode=2 百位闪烁 mode=3 十位闪烁 mode=4 个位闪烁

//mode=5 全部闪烁
{
uchar a1,a2,a3,a4;
uchar modeaa;
a1=m/1000;
a2=m/100%10;
a3=m/10%10;
a4=m%10;

if(ia<20)
{
modeaa=mode;//可闪烁也可不闪烁,闪烁位有20次不亮
}
else
{
modeaa=0;//正常显示
}

dataport=~(table[a1]);
sm1=modtable[modeaa][0]; Delay1ms(2);sm1=1;

dataport=~(table[a2]);
sm2=modtable[modeaa][1]; Delay1ms(2);sm2=1;

dataport=~(table[a3]);
sm3=modtable[modeaa][2]; Delay1ms(2);sm3=1;

dataport=~(table[a4]);
sm4=modtable[modeaa][3]; Delay1ms(2);sm4=1;
ia++;

if(ia==40) ia=0;//40次一轮

}

② 51单片机 数码管动态显示时钟,位置不对

sbit gew=P2^4;
sbit shiw=P2^5;
sbit fengw=P2^6;
sbit shifengw=P2^7;

你把这几个的顺序调一下,自己试试看~
比如
sbit gew=P2^7;
sbit shiw=P2^6;
sbit fengw=P2^5;
sbit shifengw=P2^4;

③ 单片机C语言如何实现数组动态调用

sizeof一般是在编译时计算,不适合用在你这种情况,如下修改已仿真验证可切换传送。

#include<reg52.h>
#defineucharunsignedchar
#defineuintunsignedint
/*********端口定义*************/
//SCLK串行同步时钟
//SID串行数据输入端
//CS片选,高#include<reg52.h>
#defineucharunsignedchar
#defineuintunsignedint
/*********端口定义*************/
//SCLK串行同步时钟
//SID串行数据输入端
//CS片选,高电平有效
sbitCS=P1^2;
sbitSID=P1^1;
sbitSCLK=P1^0;
/******************************/
/*******字幕显示定义***********/
ucharcodeTable1[]={"ILoveMCU"};
ucharcodeTable2[]={"我爱单片机!"};
/******************************/
voidDelaynms(ucharx)
{
uchari,j;
for(i=0;i<x;i++)
{
for(j=0;j<110;j++);
}
}
voidDatComOperation(uchardatas,uchardatcom)
{
uchartemp;
uinti;
temp=datas;
CS=1;
SCLK=0;
for(i=0;i<8;i++)
{
SID=(bit)(temp&0x80);
SCLK=0;
SCLK=1;
temp<<=1;
}
temp=datcom;
temp&=0xf0;
for(i=0;i<8;i++)
{
SID=(bit)(temp&0x80);
SCLK=0;
SCLK=1;
temp<<=1;
}
temp=datcom;
temp<<=4;
for(i=0;i<8;i++)
{
SID=(bit)(temp&0x80);
SCLK=0;
SCLK=1;
temp<<=1;
}
CS=0;
Delaynms(10);
}
voidSendCommand(ucharcomm)//12232发送指令
{
DatComOperation(0xf8,comm);
}
voidSendData(uchardatas)//12232发送数据
{
DatComOperation(0xfa,datas);
}
voidLcd12Initial()
{
Delaynms(100);
SendCommand(0x30);
SendCommand(0x02);
SendCommand(0x06);
SendCommand(0x0c);
SendCommand(0x01);
SendCommand(0x80);
}
voidDispInfor(ucharx,ucharcode*arrays)//???????
{
uchari,j;
SendCommand(x);//定义字符显示的位置
//for(i=0;i<sizeof(arrays)/sizeof(arrays[0]);i++)
//SendData(arrays[i]);
i=0;
while(j=arrays[i++])SendData(j);
}
voidmain()
{
Lcd12Initial();
DispInfor(0x80,Table1);//DisInfor(0x80,Table1);
DispInfor(0x90,Table2);//DisInfor(0x90,Table2);
while(1);//等待
}

④ 51单片机有没有动态

51单片机本身是无所谓动态还是静态控制的,要实现动态控制(比如数码管显示,矩阵键盘扫描等等),是有软硬件共同协作完成的。动态控制,可以节省很大一部分的硬件资源,所以应用十分广泛。

⑤ 单片机数码管动态显示电路问题,程序/问题如下

进入主循环
P3=0x01;
然后P3<<=1;
然后
延时
所以当P3_0=1的时候
就立即位移了
所以
看不到P3_0=1
的效果
你只要把delay()
与p3<<=1换下位置就可以了

⑥ MCS-51单片机的位地址空间是如何分配的

MCS-51单片机的位地址空间: 总共有221位

由2部分构成:

内部数据存储器20H~2FH单元(16个单元 每个单元有8位 可以按位操作 共计128个位地址

地址编号:00H~7FH)

还有一部分在特殊寄存器块中 共有12个特殊寄存器可以进行位操作

分别是 ACC、B 、 PSW 、 P0、 P1 、P2 、P3 、IP 、 IE 、TCON 、 T2COIN 、 SCON (其为地址在80H~FFH之间)。

⑦ 单片机静态显示和动态显示的原理是什么各有什么特点

数码管静态显示就是每个数码管的驱动电平不会改变,知道这个数码管的数值发生变化。
动态显示就是利用人眼反应迟钝,数码管轮流显示一段时间,比如都是20ms,效果看起来是几个数码管同时亮(实际是只有一个在点亮,其他的是余晖)。
静态显示亮度比较亮,功耗大
动态显示亮度稍微差点,但是显示位数多
注意动态扫描频率不要低于50Hz,最好高于60Hz,否则会看到数码管闪烁

⑧ 单片机静态显示和动态显示的原理各有什么特点

一般在控制数码管显示的时候有:
1.
静态显示:每个数码管的段如8段和位有专门的硬件控制,如专门的译码器控制,单片机控制对应的译码器就可以了。每个数码管之间不相互影响。
2.
动态显示:多个数码管的段对应连接在一起,共用单片机的IO资源。位对应不同的IO资源,显示时需不停的改变段码和位选来控制显示。实际某个时刻只有一个数码管在显示。利于人眼的滞后效应,人眼看着感觉是全部在显示。所以动态扫描显示时对应的延时要控制好,同时还要做好消隐措施,防止相邻数码管之间串扰。

⑨ 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;

}

}

}

仿真结果

阅读全文

与单片机的动态位置相关的资料

热点内容
新手学电脑编程语言 浏览:891
云空间在哪个文件夹 浏览:926
编程游戏小猫抓小鱼 浏览:790
安卓dosbox怎么打开 浏览:774
服务器无影响是怎么回事 浏览:952
比德电子采购平台加密 浏览:202
加密货币400亿 浏览:524
植发2次加密 浏览:44
vc6查看编译的错误 浏览:595
心理大全pdf 浏览:1002
区域链加密币怎么样 浏览:343
查找命令符 浏览:95
压缩工具zar 浏览:735
白盘怎么解压 浏览:475
辰语程序员学习笔记 浏览:47
程序员被公司劝退 浏览:523
java三子棋 浏览:693
加密空间怎么强制进入 浏览:345
ug分割曲线命令 浏览:209
学码思程序员 浏览:610