电路仿真.docx
- 文档编号:25079201
- 上传时间:2023-06-04
- 格式:DOCX
- 页数:29
- 大小:205.97KB
电路仿真.docx
《电路仿真.docx》由会员分享,可在线阅读,更多相关《电路仿真.docx(29页珍藏版)》请在冰豆网上搜索。
电路仿真
#include
#defineuintunsignedint
#defineucharunsignedchar
ucharcodeFFW[]=
{
0x01,0x03,0x02,0x06,0x04,0x0c,0x08,0x09
};
ucharcodeREV[]=
{
0x09,0x08,0x0c,0x04,0x06,0x02,0x03,0x01
};
sbitK1=P3^0;
sbitK2=P3^1;
sbitK3=P3^2;
voidDelayMS(uintms)
{
uchari;
while(ms--)
{
for(i=0;i<120;i++);
}
}
voidSETP_MOTOR_FFW(ucharn)
{
uchari,j;
for(i=0;i<5*n;i++)
{
for(j=0;j<8;j++)
{
if(K3==0)break;
P1=FFW[j];
DelayMS(25);
}
}
}
voidSETP_MOTOR_REV(ucharn)
{
uchari,j;
for(i=0;i<5*n;i++)
{
for(j=0;j<8;j++)
{
if(K3==0)break;
P1=REV[j];
DelayMS(25);
}
}
}
voidmain()
{
ucharN=3;
while
(1)
{
if(K1==0)
{
P0=0xfe;
SETP_MOTOR_FFW(N);
if(K3==0)break;
}
elseif(K2==0)
{
P0=0xfd;
SETP_MOTOR_REV(N);
if(K3==0)break;
}
else
{
P0=0xfb;
P1=0x03;
}
}
}
/***************writer:
shopping.w******************/
#include
#include
#defineuintunsignedint
#defineucharunsignedchar
#definedelayNOP(){_nop_();_nop_();_nop_();_nop_();}
sbitDQ=P3^3;
sbitLCD_RS=P2^0;
sbitLCD_RW=P2^1;
sbitLCD_EN=P2^2;
ucharcodeTemp_Disp_Title[]={"CurrentTemp:
"};
ucharCurrent_Temp_Display_Buffer[]={"TEMP:
"};
ucharcodeTemperature_Char[8]=
{
0x0c,0x12,0x12,0x0c,0x00,0x00,0x00,0x00
};
ucharcodedf_Table[]=
{
0,1,1,2,3,3,4,4,5,6,6,7,8,8,9,9
};
ucharCurrentT=0;
ucharTemp_Value[]={0x00,0x00};
ucharDisplay_Digit[]={0,0,0,0};
bitDS18B20_IS_OK=1;
voidDelayXus(uintx)
{
uchari;
while(x--)
{
for(i=0;i<200;i++);
}
}
bitLCD_Busy_Check()
{
bitresult;
LCD_RS=0;
LCD_RW=1;
LCD_EN=1;
delayNOP();
result=(bit)(P0&0x80);
LCD_EN=0;
returnresult;
}
voidWrite_LCD_Command(ucharcmd)
{
while(LCD_Busy_Check());
LCD_RS=0;
LCD_RW=0;
LCD_EN=0;
_nop_();
_nop_();
P0=cmd;
delayNOP();
LCD_EN=1;
delayNOP();
LCD_EN=0;
}
voidWrite_LCD_Data(uchardat)
{
while(LCD_Busy_Check());
LCD_RS=1;
LCD_RW=0;
LCD_EN=0;
P0=dat;
delayNOP();
LCD_EN=1;
delayNOP();
LCD_EN=0;
}
voidLCD_Initialise()
{
Write_LCD_Command(0x01);
DelayXus(5);
Write_LCD_Command(0x38);
DelayXus(5);
Write_LCD_Command(0x0c);
DelayXus(5);
Write_LCD_Command(0x06);
DelayXus(5);
}
voidSet_LCD_POS(ucharpos)
{
Write_LCD_Command(pos|0x80);
}
voidDelay(uintx)
{
while(--x);
}
ucharInit_DS18B20()
{
ucharstatus;
DQ=1;
Delay(8);
DQ=0;
Delay(90);
DQ=1;
Delay(8);
DQ=1;
returnstatus;
}
ucharReadOneByte()
{
uchari,dat=0;
DQ=1;
_nop_();
for(i=0;i<8;i++)
{
DQ=0;
dat>>=1;
DQ=1;
_nop_();
_nop_();
if(DQ)
dat|=0X80;
Delay(30);
DQ=1;
}
returndat;
}
voidWriteOneByte(uchardat)
{
uchari;
for(i=0;i<8;i++)
{
DQ=0;
DQ=dat&0x01;
Delay(5);
DQ=1;
dat>>=1;
}
}
voidRead_Temperature()
{
if(Init_DS18B20()==1)
DS18B20_IS_OK=0;
else
{
WriteOneByte(0xcc);
WriteOneByte(0x44);
Init_DS18B20();
WriteOneByte(0xcc);
WriteOneByte(0xbe);
Temp_Value[0]=ReadOneByte();
Temp_Value[1]=ReadOneByte();
DS18B20_IS_OK=1;
}
}
voidDisplay_Temperature()
{
uchari;
uchart=150,ng=0;
if((Temp_Value[1]&0xf8)==0xf8)
{
Temp_Value[1]=~Temp_Value[1];
Temp_Value[0]=~Temp_Value[0]+1;
if(Temp_Value[0]==0x00)
Temp_Value[1]++;
ng=1;
}
Display_Digit[0]=df_Table[Temp_Value[0]&0x0f];
CurrentT=((Temp_Value[0]&0xf0)>>4)|((Temp_Value[1]&0x07)<<4);
Display_Digit[3]=CurrentT/100;
Display_Digit[2]=CurrentT%100/10;
Display_Digit[1]=CurrentT%10;
Current_Temp_Display_Buffer[11]=Display_Digit[0]+'0';
Current_Temp_Display_Buffer[10]='.';
Current_Temp_Display_Buffer[9]=Display_Digit[1]+'0';
Current_Temp_Display_Buffer[8]=Display_Digit[2]+'0';
Current_Temp_Display_Buffer[7]=Display_Digit[3]+'0';
if(Display_Digit[3]==0)
Current_Temp_Display_Buffer[7]='';
if(Display_Digit[2]==0&&Display_Digit[3]==0)
Current_Temp_Display_Buffer[8]='';
if(ng)
{
if(Current_Temp_Display_Buffer[8]=='')
Current_Temp_Display_Buffer[8]='-';
elseif(Current_Temp_Display_Buffer[7]=='')
Current_Temp_Display_Buffer[7]='-';
else
Current_Temp_Display_Buffer[6]='-';
}
Set_LCD_POS(0x00);
for(i=0;i<16;i++)
{
Write_LCD_Data(Temp_Disp_Title[i]);
}
Set_LCD_POS(0x40);
for(i=0;i<16;i++)
{
Write_LCD_Data(Current_Temp_Display_Buffer[i]);
}
Set_LCD_POS(0x4d);
Write_LCD_Data(0x00);
Set_LCD_POS(0x4e);
Write_LCD_Data('C');
}
voidmain()
{
LCD_Initialise();
Read_Temperature();
Delay(50000);
Delay(50000);
while
(1)
{
Read_Temperature();
if(DS18B20_IS_OK)
Display_Temperature();
DelayXus(100);
}
}
#include
#defineucharunsignedchar
#defineuintunsignedint
sbitBEEP=P3^7;
ucharcodeDSY_CODE[]=
{
0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e,0x00
};
ucharPre_KeyNO=16,KeyNO=16;
voidDelayMS(uintms)
{
uchart;
while(ms--)
{
for(t=0;t<120;t++);
}
}
voidKeys_Scan()
{
ucharTmp;
P1=0x0f;
DelayMS
(1);
Tmp=P1^0x0f;
switch(Tmp)
{
case1:
KeyNO=0;break;
case2:
KeyNO=1;break;
case4:
KeyNO=2;break;
case8:
KeyNO=3;break;
default:
KeyNO=16;
}
P1=0xf0;
DelayMS
(1);
Tmp=P1>>4^0x0f;
switch(Tmp)
{
case1:
KeyNO+=0;break;
case2:
KeyNO+=4;break;
case4:
KeyNO+=8;break;
case8:
KeyNO+=12;
}
}
voidBeep()
{
uchari;
for(i=0;i<100;i++)
{
DelayMS
(1);
BEEP=~BEEP;
}
BEEP=1;
}
voidmain()
{
P0=0x00;
while
(1)
{
P1=0xf0;
if(P1!
=0xf0)
Keys_Scan();
if(Pre_KeyNO!
=KeyNO)
{
P0=~DSY_CODE[KeyNO];
Beep();
Pre_KeyNO=KeyNO;
}
DelayMS(100);
}
#include
#include
#defineucharunsignedchar
#defineuintunsignedint
ucharCount;
sbitDot=P0^7;
ucharcodeDSY_CODE[]=
{
0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f
};
ucharDigits_of_6DSY[]={0,0,0,0,0,0};
voidDelayMS(uintx)
{
uchari;
while(--x)
{
for(i=0;i<120;i++);
}
}
voidmain()
{
uchari,j;
P0=0x00;
P3=0xff;
Count=0;
TMOD=0x01;
TH0=(65535-50000)/256;
TL0=(65535-50000)%256;
IE=0x82;
TR0=1;
while
(1)
{
j=0x7f;
for(i=5;i!
=-1;i--)
{
j=_crol_(j,1);
P3=j;
P0=DSY_CODE[Digits_of_6DSY[i]];
if(i==1)P0|=0x80;
DelayMS
(2);
}
}
}
voidTime0()interrupt1
{
uchari;
TH0=(65535-50000)/256;
TL0=(65535-50000)%256;
if(++Count!
=2)return;
Count=0;
Digits_of_6DSY[0]++;
for(i=0;i<=5;i++)
{
if(Digits_of_6DSY[i]==10)
{
Digits_of_6DSY[i]=0;
if(i!
=5)Digits_of_6DSY[i+1]++;
}
elsebreak;
}
}
#include
#include
#defineucharunsignedchar
#defineuintunsignedint
ucharcodeTable_OF_Digits[]=
{
0x00,0x3e,0x41,0x41,0x41,0x3e,0x00,0x00,
0x00,0x00,0x00,0x21,0x7f,0x01,0x00,0x00,
0x00,0x27,0x45,0x45,0x45,0x39,0x00,0x00,
0x00,0x22,0x49,0x49,0x49,0x36,0x00,0x00,
0x00,0x0c,0x14,0x24,0x7f,0x04,0x00,0x00,
0x00,0x72,0x51,0x51,0x51,0x4e,0x00,0x00,
0x00,0x3e,0x49,0x49,0x49,0x26,0x00,0x00,
0x00,0x40,0x40,0x40,0x4f,0x70,0x00,0x00,
0x00,0x36,0x49,0x49,0x49,0x36,0x00,0x00,
0x00,0x32,0x49,0x49,0x49,0x3e,0x00,0x00,
};
uchari=0,t=0,Num_Index=0;
voidmain()
{
P3=0x80;
Num_Index=0;
TMOD=0x00;
TH0=(8192-2000)/32;
TL0=(8192-2000)%32;
TR0=1;
IE=0x82;
while
(1);
}
voidLED_Screen_Display()interrupt1
{
TH0=(8192-2000)/32;
TL0=(8192-2000)%32;
P3=_crol_(P3,1);
P0=~Table_OF_Digits[Num_Index*8+i];
if(++i==8)i=0;
if(++t==250)
{
t=0x00;
if(++Num_Index==10)Num_Index=0;
}
}
/***************writer:
shopping.w******************/
#include
#include
#include
#defineuintunsignedint
#defineucharunsignedchar
sbitIO=P1^0;
sbitSCLK=P1^1;
sbitRST=P1^2;
sbitRS=P2^0;
sbitRW=P2^1;
sbitEN=P2^2;
uchar*WEEK[]=
{
"SUN","***","MON","TUS","WEN","THU","FRI","SAT"
};
ucharLCD_DSY_BUFFER1[]={"DATE00-00-00"};
ucharLCD_DSY_BUFFER2[]={"TIME00:
00:
00"};
ucharDateTime[7];
voidDelayMS(uintms)
{
uchari;
while(ms--)
{
for(i=0;i<120;i++);
}
}
voidWrite_A_Byte_TO_DS1302(ucharx)
{
uchari;
for(i=0;i<8;i++)
{
IO=x&0x01;SCLK=1;SCLK=0;x>>=1;
}
}
ucharGet_A_Byte_FROM_DS1302()
{
uchari,b=0x00;
for(i=0;i<8;i++)
{
b|=_crol_((uchar)IO,i);
SCLK=1;SCLK=0;
}
returnb/16*10+b%16;
}
ucharRead_Data(ucharaddr)
{
uchardat;
RST=0;SCLK=0;RST=1;
Write_A_Byte_TO_DS1302(addr);
dat=Get_A_Byte_FROM_DS1302();
SCLK=1;RST=0;
returndat;
}
voidGetTime()
{
uchari,addr=0x81;
for(i=0;i<7;i++)
{
DateTime[i]=Read_Data(addr);addr+=2;
}
}
ucharRead_LCD_State()
{
ucharstate;
RS=0;RW=1;EN=1;DelayMS
(1);
state=P0;
EN=0;DelayMS
(1);
returnstate;
}
voidLCD_Busy_Wait()
{
while((Read_LCD_State()&0x80)==0x80);
DelayMS(5);
}
voidWrite_LCD_Data(uchardat)
{
LCD_Busy_Wait();
RS=1;RW=0;EN=0;P0=dat;EN=1;DelayMS
(1);EN=0;
}
voidWrite_LCD_Command(ucharcmd)
{
LCD_Busy_Wait();
RS=0;RW=0;EN=0;P0=cmd;EN=1;DelayMS
(1);EN=0;
}
voidInit_LCD()
{
Write_LCD_Command(0x38);
DelayMS
(1);
Write_LCD_Command(0x01);
DelayMS
(1);
Write_LCD_Command(0x06);
DelayMS
(1);
Write_LCD_Command(0x0c);
DelayMS
(1);
}
voidSet_LCD_POS(ucharp)
{
Write_LCD_Command(p|0x80);
}
voidDisplay_LCD_String(ucharp,uchar*s)
{
uchari;
Set_LCD_POS(p);
for(i=0;i<16;i++)
{
Write_LCD_Data(s[i]);
DelayMS
(1);
}
}
void
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 电路 仿真