|
這個(gè)就是模擬仿真控制電壓輸出波形的一個(gè)程序,用原先的hex文件是可以運(yùn)行的,但是后面重新生成的hex文件放到仿真當(dāng)中就沒(méi)有用了,請(qǐng)問(wèn)是怎么回事,有什么解決方法嗎
程序及仿真圖如下:
28d060e45c44ce40e030379fadc3e519.png (87.98 KB, 下載次數(shù): 31)
下載附件
2022-1-19 13:02 上傳
單片機(jī)源程序如下:- #include<reg51.h>
- #include <intrins.h>
- #define _nop_ _nop_()
- #define uchar unsigned char
- #define uint unsigned int
- uchar a,flang;
- sbit U3CS=P2^4; //DA引腳
- sbit U3WR=P2^5;
- sbit U2CS=P2^6;
- sbit U2WR=P2^7;
- sbit fudu_up=P1^2; //幅度
- sbit fudu_dn=P1^3; //幅度
- sbit L1=P2^0;
- sbit L2=P2^1;
- bit flag;
- uchar n=25;//幅度初始2.5v
- unsigned char code ledcode[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,
- 0x80,0x90,0x88,0x83,0xC6,0xA1,0x86,0x8E}; // 數(shù)碼管編碼
- uchar jj;
- uchar k;
- uint dingshi=0;
- uint SET_PL=50;
- uchar Tempho,Templo;
- uchar display_data[8];// 顯示緩存
- void set_time();
- void timetoseg(); //數(shù)據(jù)轉(zhuǎn)換成段碼
- void delay(uint z)
- {
- uint a,b;
- for(a=z;a>0;a--)
- for(b=20;b>0;b--);
- }
- void init()// 定時(shí)器初始化
- {
- TMOD=0x01;
- EA=1;
- TR0=1;
- ET0=1;
- }
- void key()
- {
- if(fudu_up==0)//幅度控制
- { delay(1);
- if(fudu_up==0)
- {
- n++;if(n==50)n=0;
- P3=0XFF;
- U3CS=1;_nop_;_nop_;//數(shù)據(jù)鎖存
- P3=n*5.1;//數(shù)據(jù)讀入 幅度按一次0.1
- U2CS=0;_nop_;_nop_; //數(shù)據(jù)寫(xiě)入弧度控制DA
- U2CS=1;//DA數(shù)據(jù)鎖存
- U3CS=0;//恢復(fù)數(shù)據(jù)輸出
- while(fudu_up==0);
- }
- }
- if(fudu_dn==0)//幅度控制-
- { delay(1);
- if(fudu_dn==0)
- {
- if(n>2)n--;
- else n=1;
- P3=0XFF;
- U3CS=1;_nop_;_nop_;//數(shù)據(jù)鎖存
- P3=n*5.1;//數(shù)據(jù)讀入 幅度按一次0.1
- U2CS=0;_nop_;_nop_; //數(shù)據(jù)寫(xiě)入弧度控制DA
- U2CS=1;//DA數(shù)據(jù)鎖存
- U3CS=0;//恢復(fù)數(shù)據(jù)輸出
- while(fudu_dn==0);
- }
- }
- }
- void set_time()//從新計(jì)算定時(shí)值
- {
- dingshi=200;
- Tempho =(65536-dingshi+15)/256;
- Templo =(65536-dingshi+15)%256;
- TH0=Tempho;
- TL0=Templo;
- }
- void main()
- {
- U3WR=0;
- U2WR=0;
- U3CS=1;
- U2CS=1;
- P3=n*5.1;//數(shù)據(jù)讀入 幅度按一次0.1
- U2CS=0;_nop_;_nop_; //數(shù)據(jù)寫(xiě)入弧度控制DA
- U2CS=1;//DA數(shù)據(jù)鎖存
- U3CS=0;//恢復(fù)數(shù)據(jù)輸出
- flang=1;
- set_time();
- init();
- while(1)
- {
- key();
- //數(shù)碼管掃描程序
- //數(shù)據(jù)轉(zhuǎn)換成段碼
- P0=ledcode[n/10]&0X7F;//幅度
- L1=1;
- delay(5);
- L1=0;
- P0=ledcode[n%10];//幅度
- L2=1;
- delay(5);
- L2=0;
- }
- }
- void time0() interrupt 1 //中斷
- {
- TH0=Tempho;
- TL0=Templo;
- if(flag==0)
- {
- a++;
- if(a==255)
- {
- flag=1;
- }
- }
- else
- {
- a--;
- if(a==0)
- {
- flag=0;
- }
- }
- P3=a; // 加載波形碼
- }
復(fù)制代碼
|
|