導航:首頁 > 操作系統 > 單片機的動態位置

單片機的動態位置

發布時間: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;

}

}

}

模擬結果

閱讀全文

與單片機的動態位置相關的資料

熱點內容
大奶女電影版 瀏覽:653
汽車遙控編程器 瀏覽:784
方舟在伺服器如何發全體文字 瀏覽:346
一部很多女子格鬥的電影 瀏覽:770
外國大胸美女電影推薦 瀏覽:208
大尺很色床戲電影 瀏覽:432
鄭州阿里程序員 瀏覽:131
韓國愛情推理片全部復制 瀏覽:462
台灣影視國語 瀏覽:571
穿越之我那三千個兄弟訓誡 瀏覽:486
連母親都收的小說 瀏覽:839
葉子媚演過尺較大的電影在線觀看 瀏覽:832
app反感怎麼解決 瀏覽:332
極光設置app是什麼 瀏覽:79
app廣告怎麼賺錢 瀏覽:917
男主被系統控制的小說下載 瀏覽:951
鈦2電影高清完整版 瀏覽:440
linux啟動項目命令 瀏覽:531
乳山迷霧txt全文閱讀全文小說 瀏覽:885
vm同步命令 瀏覽:14