|
仿真原理圖如下(Multisim仿真工程文件可到本帖附件中下載)
0@OK[)5(G}TX7Z(N2Q({R{P.png (109.99 KB, 下載次數(shù): 47)
下載附件
2022-5-6 21:28 上傳
截圖不太清楚,盡力了,,,不得不說(shuō),用multisim仿真51單片機(jī)效果實(shí)在是一言難盡!
出現(xiàn)了一些問(wèn)題,主要是multisim的鍋,51單片機(jī)在計(jì)算的時(shí)候引腳電平會(huì)亂閃,這也就導(dǎo)致了這個(gè)時(shí)候數(shù)碼管會(huì)顯示亂碼。
需要等一段時(shí)間,仿真運(yùn)行才能穩(wěn)定下來(lái),可以通過(guò)示波器觀看仿真運(yùn)行速度以及仿真跑到哪了。
它果然只能仿真點(diǎn)小電路。。
51hei.gif (118.63 KB, 下載次數(shù): 33)
下載附件
2022-5-7 02:59 上傳
單片機(jī)源程序如下:
- #include <reg51.h> //調(diào)用51單片機(jī)的頭文件
- #define uint unsigned int
- #define ulint unsigned long int
- #define uchar unsigned char
-
- #define AMing_T 10 //測(cè)量周期數(shù)宏定義
- #define AMing_F 50 //測(cè)量信號(hào)頻率宏定義
- //數(shù)碼管字形表,供顯示時(shí)查詢
- unsigned char code AMing_LED[10]=
- { //定義表格一定要使用code,這樣會(huì)做到程序存儲(chǔ)區(qū)中
- 0x00, //"0"的字形表,0B00111111
- 0x01, //"1"的字形表,0B00000110
- 0x02, //"2"的字形表,0B01011011
- 0x03, //"3"的字形表,0B01001111
- 0x04, //"4"的字形表,0B01100110
- 0x05, //"5"的字形表,0B01101101
- 0x06, //"6"的字形表,0B01111101
- 0x07, //"7"的字形表,0B00000111
- 0x08, //"8"的字形表,0B01111111
- 0x09, //"9"的字形表,0B01101111
- };
- ulint AMing_n=0; //計(jì)數(shù)
- uint AMing_k=0; //用于標(biāo)記n的變化.控制數(shù)碼管刷新頻率
- char AMing_k_Flag=0; //用于標(biāo)記k的變化
- //延時(shí)函數(shù)
- void AMing_Delay(uint z)
- {
- uint x,y;
- for(x=z;x>0;x--)
- for(y=50;y>0;y--);
- }
- //定時(shí)器0初始化
- void AMing_time_init(void) //定時(shí)器初始化函數(shù)
- {
- TMOD=0x02; //選擇方式2
- TH0=56; //重裝初值為156 200us
- TL0=56; //運(yùn)行值為156
- EA=1; //使能總中斷 //開(kāi)總中斷
- PT0 = 0; //設(shè)為低優(yōu)先級(jí)
- }
- //外部中斷0中斷初始化
- void AMing_ConfigExitIint0()
- {
- IT0 = 1; //選擇為下降沿觸發(fā)方式(為1代表下降沿觸發(fā),為0代表低電平觸發(fā))
- EX0 = 1; //使能外部中斷0
- PX0 = 1; //設(shè)為高優(yōu)先級(jí)
- }
- //外部中斷1中斷初始化
- void AMing_ConfigExitIint1()
- {
- IT1 = 1; //選擇為下降沿觸發(fā)方式
- EX1 = 1; //使能外部中斷1
- PX1 = 1; //設(shè)為高優(yōu)先級(jí)
- }
- //數(shù)碼管顯示函數(shù)
- void AMing_Display(void)
- {
- uint p2=0; //用于記錄P2的變化
- uint p0=0; //用于記錄P0的變化
- uint i=0;
- uint j=0;
- i = (ulint)(360*AMing_F*(float)AMing_n/5000/AMing_k); //360*AMing_F*t t是單位周期相位超前時(shí)間,單位是s
- p2 = AMing_LED[i%10];
- j = AMing_LED[i/100]<<4;
- p0 = j+AMing_LED[i%100/10];
- P2 = 0x00;
- P0 = 0x00;
- AMing_Delay(50);
- P2 = p2;
- P0 = p0;
- }
- //主函數(shù)
- void main(void) //主函數(shù),單片機(jī)開(kāi)機(jī)后就是從這個(gè)函數(shù)開(kāi)始運(yùn)行
- {
- P1 = 0xFF;
- P3 = 0xFF;
- P2 = 0x00;
- P0 = 0x00;
- AMing_ConfigExitIint0();
- AMing_ConfigExitIint1();
- AMing_time_init();
- while(1) //死循環(huán),單片機(jī)初始化后,將一直運(yùn)行這個(gè)死循環(huán)
- {
- // AMing_Delay(1); //等待multisim
- if(AMing_k_Flag)
- {
- AMing_Display(); //數(shù)碼管顯示
- AMing_k = AMing_k_Flag = 0; //重置標(biāo)志
- AMing_n = 0; //清零
- EA = 1; //開(kāi)總中斷
- }
- }
- }
- //外部中斷0中斷服務(wù)函數(shù)
- //由相移前的波整形后下降沿觸發(fā)
- void extInt0ISR() interrupt 0
- {
- AMing_k++;
- ET0=1; //開(kāi)定時(shí)器0中斷
- TR0=1; //開(kāi)定時(shí)器0 //開(kāi)始計(jì)時(shí)
- }
- //外部中斷1中斷服務(wù)函數(shù)
- //由相移后的波整形后下降沿觸發(fā)
- void extInt1ISR() interrupt 2
- {
- if(AMing_k)
- { //判斷外部中斷0是否已觸發(fā),以確定基準(zhǔn)
- ET0=0; //關(guān)定時(shí)器0中斷
- TR0=0; //關(guān)定時(shí)器0
- if(AMing_k >= AMing_T)
- { //
- AMing_k_Flag = 1; //標(biāo)志位置1
- EA = 0; //關(guān)總中斷
- }
- }
- }
- //定時(shí)器0中斷
- void timer() interrupt 1 //定時(shí)器0中斷
- {
- AMing_n++; //AMing_n(200us)
- }
復(fù)制代碼
Multisim14仿真文件51hei附件下載:
51單片機(jī)的Multisim仿真.7z
(875.56 KB, 下載次數(shù): 29)
2022-5-7 03:01 上傳
點(diǎn)擊文件名下載附件
multiisim 正弦波/方波360度移向 51數(shù)碼管顯示 下載積分: 黑幣 -5
|
評(píng)分
-
查看全部評(píng)分
|