版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)
文檔簡介
1、/*數(shù)字中C程序設(shè)計*/#include#include#define uint unsigned int #define uchar unsigned char/*時間位變量定義*/sbit mode=P37;sbit inc=P36;sbit dec=P35;sbit enter=P34;sbit point=P07;bit flag=1;sbit DQ=P11; /設(shè)定溫度采集端sbit led=P27;/三色指示時鐘sbit speaker=P26;/聲音報警端口sbit d2=P25;sbit d3=P24;sbit d4=P23;sbit d5=P22;sbit d6=P21;sb
2、it d7=P20;/*變量定義*/uchar t,hhour,lhour,hmin,lmin,hsec,lsec;uchar hour,min,sec,vmode; uchar ahour,amin;uchar m,n,deta;uchar day,week,mon;/定義日期uint year;uchar temp;/存放溫度值uchar str3;/存放溫度分離值uchar code table=0 x3f,0 x06,0 x5b,0 x4f,0 x66,0 x6d,0 x7d,0 x07,0 x7f,0 x6f,0 x00,0 x00;/共陰型七段數(shù)碼管09的斷碼uchar code
3、choosebit=0 x01,0 x02,0 x04,0 x08,0 x10,0 x20;/P20P25是6個數(shù)碼管從地位到高位的位選uchar table1=31,31,29,31,30,31,30,31,31,30,31,30,31; /閏年uchar table2=31,31,28,31,30,31,30,31,31,30,31,30,31; /非閏年/*聲明時鐘調(diào)用子函數(shù)*/void delay(uint z);void delay_spk(uint cnt);void mode0();void mode1();void mode2();void mode3();void mode4
4、();void mode5();/顯示日期void mode6();/顯示溫度void display(uchar t_hour,uchar t_min,uchar t_sec);/*聲明ds18b20調(diào)用的子函數(shù)*/ uchar ReadTemperature(void); /讀取溫度void Init_DS18B20(void); /18b20初始化函數(shù)uchar ReadOneChar(void);/讀一個字節(jié)void WriteOneChar(uchar dat); /寫一個字節(jié)void delay_temperature(uint y);/延時函數(shù)void display_tempe
5、rature();/*主函數(shù)*/void main() vmode=0;speaker=0; hour=0;min=1;sec=0;ahour=0;amin=3;led=0;year=2009;mon=05;day=25;week=01;/日期賦初值TMOD=0 x11;/設(shè)置定時器0,1為工作方式1TH0=0 xd8;/定時器定時10msTL0=0 xf0; TH1=(65536-5000)/256;TL1=(65536-5000)%256;IE=0X8a;/開定時器0,1中斷 TR0=1;/啟動定時器0TR1=1;/啟動定時器1 t=0;/賦顯示初值while(1) switch(vmod
6、e)case 0:mode0();break;/正常走時case 1:mode1();break;/調(diào)整當(dāng)前時間分鐘case 2:mode2();break;/調(diào)整當(dāng)前時間小時case 3:mode3();break;/調(diào)整鬧鐘時間分鐘case 4:mode4();break;/調(diào)整鬧鐘時間分鐘 case 5:/正常日期case 6:/調(diào)整月值case 7:/調(diào)整日值case 8:mode5();break;/調(diào)整周值 case 9:mode6();break;/顯示溫度default:break;/*10mS定時中斷服務(wù)子函數(shù)*/void timer1_ISR(void) interrupt
7、 3 TH1=(65536-5000)/256;TL1=(65536-5000)%256;if(m=1)n+;if(n=50)n=0;m=0;P3=0 xff;if(P3!=0 xff) if(n=0)m=1; if(n=1) if(mode=0) vmode+; if(enter=0) vmode=0;TR0=1; if(vmode=1&inc=0) TR0=0;min+;if(min=60) min=0; if(vmode=1&dec=0) TR0=0;min-;if(min=24) hour=0; if(vmode=2&dec=0) TR0=0;hour-;if(hour=60) ami
8、n=0; if(vmode=3&dec=0) TR0=0;amin-;if(amin=24) ahour=0; if(vmode=4&dec=0) TR0=0;ahour-;if(ahour=13) mon=1; if(vmode=6&dec=0) TR0=0;mon-;if(mon=0) mon=12; if(vmode=7&inc=0) TR0=0;day+;if(year%4=0&year%100!=0|year%400=0) if(day=table1mon+1) day=1; else /非閏年if(day=table2mon+1) day=1; if(vmode=7&dec=0)
9、TR0=0;day-;if(year%4=0&year%100!=0|year%400=0) if(day=0) day=table1mon-1; else if(day=8) week=1; if(vmode=8&dec=0) TR0=0;week-;if(week=10)vmode=0;switch(vmode) case 0:mode0();break;/正常走時case 1:mode1();break;/調(diào)整正常走時的分鐘case 2:mode2();break;/調(diào)整正常走時的小時case 3:mode3();break;/調(diào)整定時的分鐘case 4:mode4();break;/調(diào)
10、整定時的小時 case 5: /顯示正常月日周 case 6: /調(diào)整月份值 case 7: /調(diào)整日期值 case 8:mode5();break; /調(diào)整星期值 case 9:mode6();break; /顯示溫度default:break; /時間正常運行void timer0_ISR(void) interrupt 1TH0=0 xd8;TL0=0 xf0;t+;deta+;if(deta=50)deta=0;flag=!flag;/每隔一秒最低位的小數(shù)點閃爍一次if(t=100)t=0;sec+;if(sec=60)sec=0;min+;if(min=60)min=0;hour+;
11、if(hour=24) hour=0;day+;week+;if(week=8) week=1;if(year%4=0&year%100!=0|year%400=0) /閏年 if(day=table1mon+1) day=1; mon+; if(mon=13) mon=1;year+;else /非閏年 if(day=table2mon+1) day=1; mon+;if(mon=13) mon=1;year+;/*模式設(shè)置*/模式0 正常走時并顯示void delay_spk(uint cnt)/延時while(-cnt);void mode0() uchar i; display(hou
12、r,min,sec); while(hour=ahour&min=amin)|(min=0)/鬧鐘和整點報時 for(i=0;i=60)hhour=10;lhour=10;else hhour=t_hour/10;lhour=t_hour%10; if(t_min=60)hmin=10;lmin=10;elsehmin=t_min/10;lmin=t_min%10;if(t_sec=60)hsec=10;lsec=10;elsehsec=t_sec/10;lsec=t_sec%10;/choose the first led d2=1;d3=0;d4=0;d5=0;d6=0;d7=0;P0=t
13、ablehhour;delay(2);P0=0;/choose the second led d2=0;d3=1;d4=0;d5=0;d6=0;d7=0;P0=tablelhour;delay(2);P0=0;/choose the third ledd2=0; d3=0;d4=1;d5=0;d6=0;d7=0;P0=tablehmin;delay(2);P0=0;/choose the fourth ledd2=0;d3=0;d4=0;d5=1;d6=0;d7=0;P0=tablelmin;delay(2);P0=0;/choose the fifth led d2=0;d3=0;d4=0;
14、d5=0;d6=1;d7=0;P0=tablehsec;delay(2);P0=0;/choose the sixth led d2=0;d3=0;d4=0;d5=0;d6=0;d7=1;P0=tablelsec;if(flag=1)point=1;delay(2);P0=0;void delay(uint z)uint y;for(;z0;z-)for(y=0;y0;i-) DQ = 0; / 給脈沖信號 dat=1; DQ = 1; / 給脈沖信號 if(DQ) dat|=0 x80; delay_temperature(5); return(dat);/寫一個字節(jié)void WriteOn
15、eChar(uchar dat) uchar i=0; for (i=8; i0; i-) DQ = 0; DQ = dat&0 x01; delay_temperature(5); DQ = 1; dat=1; delay_temperature(5);/*/*讀取溫度*/uchar ReadTemperature(void)uchar a=0;uchar b=0;uchar t1=0;/float tt=0;Init_DS18B20();WriteOneChar(0 xCC); / 跳過ROMWriteOneChar(0 x44); / 啟動溫度轉(zhuǎn)換delay_temperature(20
16、0);Init_DS18B20();WriteOneChar(0 xCC); /跳過ROM WriteOneChar(0 xBE); /讀取溫度寄存器等(共可讀9個寄存器) 前兩個就是溫度a=ReadOneChar(); /a是低八位,傳送先高位,后低位b=ReadOneChar(); /b是高八位b4; /高四位與低四位互換t1=b;/tt=t*0.0625;/t1= tt*10+0.5; /放大10倍輸出并四舍五入return(t1);/*/*溫度顯示子函數(shù)*/void display_temperature()/顯示十位speaker=0;/蜂鳴器不響d3=0;d4=0;d5=1;d6=
17、0;d7=0;P0=str2;delay(30);P0=0;/顯示位個speaker=0;d3=0;d4=0;d5=0;d6=1;d7=0;P0=str1;delay(30);P0=0;/顯示符號cspeaker=0;d3=0;d4=0;d5=0;d6=0;d7=1;P0=str0;delay(30);P0=0;/*ds18b20延時函數(shù)*/*/void delay_temperature(uint y)/延時函數(shù) while(y-);-/*1-VSS 2-VDD 3-V0 4-RS 5-R/W 6-E *7-14 DB0-DB7 15-BLA 16-BLK */*copyright 2007
18、,ShangHai HaoTun Electronic Technology co.,Ltd * *This sample is used for lcm1602 . * *write by Shifang 2007-8-11 * *V1.1 */#include#include#includeunsigned int hour,minute,second,count;sbit RS = P22;/Pin4sbit RW = P23; /Pin5sbit E = P24;/Pin6#define Data P0 /數(shù)據(jù)端口char data TimeNum= ;char data Test1=
19、 ;/*/* 函數(shù)聲明 */*/*/void DelayUs(unsigned char us)/delay us unsigned char uscnt; uscnt=us1;/* Crystal frequency in 12MHz*/ while(-uscnt);/*/void DelayMs(unsigned char ms)/delay Ms while(-ms) DelayUs(250); DelayUs(250); DelayUs(250); DelayUs(250); void WriteCommand(unsigned char c) DelayMs(5);/short de
20、lay before operation E=0; RS=0; RW=0; _nop_(); E=1; Data=c; E=0;/*/void WriteData(unsigned char c) DelayMs(5); /short delay before operation E=0; RS=1; RW=0; _nop_(); E=1; Data=c; E=0; RS=0;/*/void ShowChar(unsigned char pos,unsigned char c) unsigned char p; if (pos=0 x10) p=pos+0 xb0; /是第二行則命令代碼高4位
21、為0 xc else p=pos+0 x80; /是第二行則命令代碼高4位為0 x8 WriteCommand (p);/write command WriteData (c); /write data/*/void ShowString (unsigned char line,char *ptr) unsigned char l,i; l=line4; for (i=0;i16;i+) ShowChar (l+,*(ptr+i);/循環(huán)顯示16個字符/*/void InitLcd() DelayMs(15); WriteCommand(0 x38); /display mode WriteC
22、ommand(0 x38); /display mode WriteCommand(0 x38); /display mode WriteCommand(0 x06); /顯示光標(biāo)移動位置 WriteCommand(0 x0c); /顯示開及光標(biāo)設(shè)置 WriteCommand(0 x01); /顯示清屏/void main(void)InitLcd();/DelayMs(15);sprintf(Test1, );/the first lineShowString(0,Test1);sprintf(TimeNum,LCM1602 Test ok!);/the first lineShowStri
23、ng(1,TimeNum);while(1);-/18B20單線溫度檢測的應(yīng)用樣例程序#include#include#include#define uchar unsigned char#define uint unsigned int;/*/sbit DQ=P35;/ds18b20 端口/*/ unsigned int temp;uchar flag_get;/*/void delay1(uchar MS);unsigned char ReadTemperature(void);void Init_DS18B20(void);unsigned char ReadOneChar(void);
24、void WriteOneChar(unsigned char dat);void delay(unsigned int i);void DelayMs(unsigned char ms);/delay Msvoid InitLcd();void lcd_sef_chr();/*/void display(void);/外部函數(shù)main()TMOD|=0 x01;/定時器設(shè)置TH0=0 xef;TL0=0 xf0;IE=0 x82;TR0=1; InitLcd();/DelayMs(15);lcd_sef_chr(); /寫入自定義字符號while(1) if(flag_get=1) /定時讀
25、取當(dāng)前溫度 temp=ReadTemperature(); flag_get=0; display();/顯示 void tim(void) interrupt 1 using 1/中斷,用于數(shù)碼管掃描和溫度檢測間隔static unsigned char num;TH0=0 xef;/定時器重裝值TL0=0 xf0;num+;if (num=50) num=0; flag_get=1;/標(biāo)志位有效 /*/void delay(unsigned int i)/延時函數(shù) while(i-);/*/18b20初始化函數(shù)void Init_DS18B20(void) unsigned char x=
26、0; DQ = 1; /DQ復(fù)位 delay(8); /稍做延時 DQ = 0; /單片機將DQ拉低 delay(80); /精確延時 大于 480us DQ = 1; /拉高總線 delay(10); x=DQ; /稍做延時后 如果x=0則初始化成功 x=1則初始化失敗 delay(5);/讀一個字節(jié)unsigned char ReadOneChar(void)unsigned char i=0;unsigned char dat = 0;for (i=8;i0;i-) DQ = 0; / 給脈沖信號 dat=1; DQ = 1; / 給脈沖信號 if(DQ) dat|=0 x80; del
27、ay(5); return(dat);/寫一個字節(jié)void WriteOneChar(unsigned char dat) unsigned char i=0; for (i=8; i0; i-) DQ = 0; DQ = dat&0 x01; delay(5); DQ = 1; dat=1; delay(5);/讀取溫度unsigned char ReadTemperature(void)unsigned char a=0;unsigned char b=0;unsigned char t=0;/float tt=0;Init_DS18B20();WriteOneChar(0 xCC); /
28、 跳過讀序號列號的操作WriteOneChar(0 x44); / 啟動溫度轉(zhuǎn)換delay(200);Init_DS18B20();WriteOneChar(0 xCC); /跳過讀序號列號的操作 WriteOneChar(0 xBE); /讀取溫度寄存器等(共可讀9個寄存器) 前兩個就是溫度a=ReadOneChar();b=ReadOneChar();b4;t=b;/tt=t*0.0625;/t= tt*10+0.5; /放大10倍輸出并四舍五入return(t);-/18B20單線溫度檢測的應(yīng)用樣例程序#include#include#include#define uchar unsig
29、ned char#define uint unsigned int;/*/sbit seg1=P20;sbit seg2=P21;sbit seg3=P22;sbit DQ=P35;/ds18b20 端口sfr dataled=0 x80;/顯示數(shù)據(jù)端口/*/ uchar temp;uchar flag_get,count,num,minute,second;uchar code tab=0 xc0,0 xf9,0 xa4,0 xb0,0 x99,0 x92,0 x82,0 xf8,0 x80,0 x90;/7段數(shù)碼管段碼表共陽uchar str3;/*/void delay1(uchar M
30、S);unsigned char ReadTemperature(void);void Init_DS18B20(void);unsigned char ReadOneChar(void);void WriteOneChar(unsigned char dat);void delay(unsigned int i);/*/main()TMOD|=0 x01;/定時器設(shè)置TH0=0 xef;TL0=0 xf0;IE=0 x82;TR0=1;P2=0 x00; count=0;while(1) str0=0 xc6;/顯示C符號 str2=tabtemp/10; /十位溫度 str1=tabtem
31、p%10; /個位溫度 if(flag_get=1) /定時讀取當(dāng)前溫度 temp=ReadTemperature(); flag_get=0; void tim(void) interrupt 1 using 1/中斷,用于數(shù)碼管掃描和溫度檢測間隔TH0=0 xef;/定時器重裝值TL0=0 xf0;num+;if (num=50) num=0; flag_get=1;/標(biāo)志位有效 second+; if(second=60) second=0; minute+; count+;if(count=1) P2=0 xf7; dataled=str0;/數(shù)碼管掃描if(count=2) P2=0
32、 xfb; dataled=str1;if(count=3) P2=0 xfd; dataled=str2; count=0;/*/void delay(unsigned int i)/延時函數(shù) while(i-);/*/18b20初始化函數(shù)void Init_DS18B20(void) unsigned char x=0; DQ = 1; /DQ復(fù)位 delay(8); /稍做延時 DQ = 0; /單片機將DQ拉低 delay(80); /精確延時 大于 480us DQ = 1; /拉高總線 delay(10); x=DQ; /稍做延時后 如果x=0則初始化成功 x=1則初始化失敗 de
33、lay(5);/讀一個字節(jié)unsigned char ReadOneChar(void)unsigned char i=0;unsigned char dat = 0;for (i=8;i0;i-) DQ = 0; / 給脈沖信號 dat=1; DQ = 1; / 給脈沖信號 if(DQ) dat|=0 x80; delay(5); return(dat);/寫一個字節(jié)void WriteOneChar(unsigned char dat) unsigned char i=0; for (i=8; i0; i-) DQ = 0; DQ = dat&0 x01; delay(5); DQ = 1
34、; dat=1; delay(5);/讀取溫度unsigned char ReadTemperature(void)unsigned char a=0;unsigned char b=0;unsigned char t=0;/float tt=0;Init_DS18B20();WriteOneChar(0 xCC); / 跳過讀序號列號的操作WriteOneChar(0 x44); / 啟動溫度轉(zhuǎn)換delay(200);Init_DS18B20();WriteOneChar(0 xCC); /跳過讀序號列號的操作 WriteOneChar(0 xBE); /讀取溫度寄存器等(共可讀9個寄存器)
35、 前兩個就是溫度a=ReadOneChar();b=ReadOneChar();b4;t=b;/tt=t*0.0625;/t= tt*10+0.5; /放大10倍輸出并四舍五入return(t);-/*1-VSS 2-VDD 3-V0 4-RS 5-R/W 6-E *7-14 DB0-DB7 15-BLA 16-BLK */*copyright 2007,ShangHai HaoTun Electronic Technology co.,Ltd * *This sample is used for lcm1602 . * *write by Shifang 2007-8-11 * *V1.1
36、*/#include#include#includeunsigned int hour,minute,second,count;sbit RS = P22;/Pin4sbit RW = P23; /Pin5sbit E = P24;/Pin6#define Data P0 /數(shù)據(jù)端口char data TimeNum= ;char data Test1= ;/*/* 函數(shù)聲明 */*/*/void DelayUs(unsigned char us)/delay us unsigned char uscnt; uscnt=us1;/* Crystal frequency in 12MHz*/ w
37、hile(-uscnt);/*/void DelayMs(unsigned char ms)/delay Ms while(-ms) DelayUs(250); DelayUs(250); DelayUs(250); DelayUs(250); void WriteCommand(unsigned char c) DelayMs(5);/short delay before operation E=0; RS=0; RW=0; _nop_(); E=1; Data=c; E=0;/*/void WriteData(unsigned char c) DelayMs(5); /short dela
38、y before operation E=0; RS=1; RW=0; _nop_(); E=1; Data=c; E=0; RS=0;/*/void ShowChar(unsigned char pos,unsigned char c) unsigned char p; if (pos=0 x10) p=pos+0 xb0; /是第二行則命令代碼高4位為0 xc else p=pos+0 x80; /是第二行則命令代碼高4位為0 x8 WriteCommand (p);/write command WriteData (c); /write data/*/void ShowString (u
39、nsigned char line,char *ptr) unsigned char l,i; l=line4; for (i=0;i16;i+) ShowChar (l+,*(ptr+i);/循環(huán)顯示16個字符/*/void InitLcd() DelayMs(15); WriteCommand(0 x38); /display mode WriteCommand(0 x38); /display mode WriteCommand(0 x38); /display mode WriteCommand(0 x06); /顯示光標(biāo)移動位置 WriteCommand(0 x0c); /顯示開及光
40、標(biāo)設(shè)置 WriteCommand(0 x01); /顯示清屏/void main(void)InitLcd();/DelayMs(15);sprintf(Test1, );/the first lineShowString(0,Test1);sprintf(TimeNum,LCM1602 Test ok!);/the first lineShowString(1,TimeNum);while(1);-/*copyright 2007,ShangHai HaoTun Electronic Technology co.,Ltd * *This sample is used for 7-seg le
41、d dynamic display . * *write by Shifang 2007-4-23 * *V1.1 */#include unsigned char const dofly=0 xf9,0 xb0,0 x92,0 x80,0 xf9,0 xb0,0 x92,0 x80;/ 顯示數(shù)值表 13581358 /8位數(shù)碼管顯示13581358unsigned char code seg=0 x7f,0 xbf,0 xdf,0 xef,0 xf7,0 xfb,0 xfd,0 xfe;/分別對應(yīng)相應(yīng)的數(shù)碼管點亮/void delay(unsigned int cnt) while(-cnt
42、);/main() unsigned char i; while(1) P0=doflyi;/取顯示數(shù)據(jù) P2=seg7-i; /取段碼 delay(30000); /掃描間隙延時,這個時間比較長,用于演示動態(tài)掃描 /縮短這個時間,利用人眼的暫留效應(yīng)我們就可以看到 /類似靜態(tài)的顯示了 i+; if(8=i) i=0; -/*copyright 2007,ShangHai HaoTun Electronic Technology co.,Ltd * *This sample is used for 7-seg led dynamic display . * *write by Shifang 2
43、007-4-23 * *V1.1 */#include unsigned char const dofly=0 xf9,0 xb0,0 x92,0 x80,0 xf9,0 xb0,0 x92,0 x80;/ code table 13581358unsigned char code seg=0 x7f,0 xbf,0 xdf,0 xef,0 xf7,0 xfb,0 xfd,0 xfe;/分別對應(yīng)相應(yīng)的數(shù)碼管點亮/void delay(unsigned int cnt) while(-cnt);/main() unsigned char i; while(1) P0=doflyi;/取顯示數(shù)據(jù)
44、P2=seg7-i; /取段碼 delay(200); /掃描間隙延時 i+; if(8=i) /檢測8位掃描完全? i=0; -#include sbit key1=P30;/定義按鍵位置sbit key2=P31;sbit key3=P32;sbit key4=P33;/unsigned char const dofly=0 xf9,0 xb0,0 x92,0 x80;/ code table 1358/void delay(unsigned int cnt) while(-cnt);/main() P2=0 x00;/數(shù)碼管全亮 while(1) if(!key1) /按下相應(yīng)的按鍵,數(shù)
45、碼管顯示相應(yīng)的碼值 P0=0 xf9;/1 if(!key2) P0=0 xa4;/2 if(!key3) P0=0 xb0;/3 if(!key4) P0=0 x99;/4 /使用過程中如果碰到干擾情況,請增加去抖程序-#include #include#defineUchar unsigned char#define Uint unsigned int/ LCM1602A端口地址定義char xdata Lcd1602CmdPort _at_ 0 x7cff;/E=1 RS=0 RW=0char xdata Lcd1602WdataPort _at_ 0 x7eff; /E =1 RS=1
46、 RW=0char xdata Lcd1602StatusPort _at_ 0 x7dff; /CS=1 RS=0 RW=1#define Busy0 x80 / 忙判別位code char exampl=For an example. - By xiaoqin;void Delay400Ms(void);void Delay5Ms(void);void LcdWriteData( char dataW );void LcdWriteCommand( Uchar CMD,Uchar AttribC );void LcdReset( void );void Display( Uchar dd
47、);void DispOneChar(Uchar x,Uchar y,Uchar Wdata);void ePutstr(Uchar x,Uchar y, Uchar code *ptr);/主程序void main(void)Uchar temp;Delay400Ms();/啟動時必須的延時,等待lcm進入工作狀態(tài)LcdReset(); /這也是必需的.初始化temp = 32;ePutstr(0,0,exampl); /上面一行顯示一個預(yù)定字符串Delay400Ms(); /保留顯示內(nèi)容Delay400Ms();Delay400Ms();Delay400Ms();Delay400Ms();
48、Delay400Ms();Delay400Ms();Delay400Ms();while(1)temp &= 0 x7f; /只顯示ASCII字符if (temp31)l+;for (i=0;il;i+) DispOneChar(x+,y,ptri);if ( x = 16 )x = 0; y = 1;/ 演示一行連續(xù)字符串,配合上位程序演示移動字串void Display( Uchar dd ) Uchar i;for (i=0;i16;i+) DispOneChar(i,1,dd+);dd &= 0 x7f;if (dd32) dd=32;/ 顯示光標(biāo)定位void LocateXY( ch
49、ar posx,char posy) Uchar temp;temp = posx & 0 xf;posy &= 0 x1;if ( posy )temp |= 0 x40;temp |= 0 x80;LcdWriteCommand(temp,0);/ 按指定位置顯示數(shù)出一個字符void DispOneChar(Uchar x,Uchar y,Uchar Wdata) LocateXY( x, y ); / 定位顯示地址LcdWriteData( Wdata ); / 寫字符/ 初始化程序, 必須按照產(chǎn)品資料介紹的初始化過程進行void LcdReset( void ) LcdWriteCom
50、mand( 0 x38, 0);/ 顯示模式設(shè)置(不檢測忙信號)Delay5Ms();LcdWriteCommand( 0 x38, 0);/ 共三次Delay5Ms();LcdWriteCommand( 0 x38, 0);Delay5Ms();LcdWriteCommand( 0 x38, 1);/ 顯示模式設(shè)置(以后均檢測忙信號) LcdWriteCommand( 0 x08, 1);/ 顯示關(guān)閉 LcdWriteCommand( 0 x01, 1);/ 顯示清屏LcdWriteCommand( 0 x06, 1);/ 顯示光標(biāo)移動設(shè)置LcdWriteCommand( 0 x0c, 1)
51、;/ 顯示開及光標(biāo)設(shè)置/ 寫控制字符子程序: E=1 RS=0 RW=0void LcdWriteCommand( Uchar CMD,Uchar AttribC ) if (AttribC) while( Lcd1602StatusPort & Busy );/ 檢測忙信號?Lcd1602CmdPort = CMD;/ 當(dāng)前位置寫字符子程序: E =1 RS=1 RW=0void LcdWriteData( char dataW ) while( Lcd1602StatusPort & Busy );/ 檢測忙信號Lcd1602WdataPort = dataW;/ 短延時void Dela
52、y5Ms(void)Uint i = 5552;while(i-);/長延時void Delay400Ms(void)Uchar i = 5;Uint j;while(i-)j=7269;while(j-);-可編程邏輯器件課程簡介:本課程主要介紹在電子系統(tǒng)設(shè)計中當(dāng)前很流行的專門用于數(shù)字電路與系統(tǒng)設(shè)計的可編程邏輯器件及設(shè)計方法。通俗地講,就是利用可編程邏輯器件來設(shè)計電子系統(tǒng)的技術(shù),也就是通常所說的CPLD/FPGA應(yīng)用技術(shù)。它是EDA技術(shù)(電子設(shè)計自動化)的一個重要分支。本課程是一門工具性的課程。本課程主要包括以下幾個方面的內(nèi)容:EDA技術(shù)概述可編程邏輯器件的原理與系統(tǒng)設(shè)計Altera公司的M
53、AX+PLUS II軟件的使用VHDL語言編程基礎(chǔ)系統(tǒng)設(shè)計實驗本課程主要特點:理論較少,實踐性強,主要靠自己多動手編程設(shè)計,并上機實驗本課程的先修課程:數(shù)字電路(邏輯門,組合邏輯電路設(shè)計,時序邏輯電路設(shè)計)組合邏輯:邏輯門時序邏輯:觸發(fā)器、時鐘信號EDA技術(shù)概述1. EDA技術(shù)的發(fā)展EDA:Electronics Design Automation,電子設(shè)計自動化電子系統(tǒng)硬件設(shè)計的一般過程:功能設(shè)計電路原理設(shè)計PCB(Printed Circuit Board,印刷電路板)設(shè)計與制作元件安裝調(diào)試過去:狹義的電路板的設(shè)計(Protel等):布線、檢查、分析采用專用集成電路設(shè)計:效率高,體積小,電
54、路簡單,但不一定總能找到正好符合設(shè)計者的特殊要求的電路芯片,能找到最好,成本稍高,但貨源和價格受供貨商的限制。例:遙控小車、計算器、電子鐘、門鈴等。采用通用集成電路設(shè)計:需要設(shè)計電路,采用若干片芯片組合來實現(xiàn)所需功能。效率稍低,體積稍大,但貨源很廣,成本低。如74系列芯片。缺點:a)當(dāng)功能較復(fù)雜時,電路也很復(fù)雜,體積大,可靠性降低;b)一旦設(shè)計完成后,電路修改困難(反復(fù)改板,困難,周期長);c)調(diào)試?yán)щy,不便于仿真測試?,F(xiàn)在:采用可編程邏輯器件設(shè)計:是當(dāng)前新興的一類專門用于電路系統(tǒng)設(shè)計的通用的可編程芯片,設(shè)計者可以在電腦上通過軟件設(shè)計自己所需的電路或系統(tǒng),然后通過電纜下載到這類可編程芯片中,使
55、該芯片具有自己所需的功能,并可方便地進行仿真調(diào)試和功能測試,而且可以在線地進行修改而無需改動外部連線。好處:大大縮短開發(fā)周期,大大減少設(shè)計調(diào)試的工作量,提高開發(fā)效率和設(shè)計質(zhì)量,降低開發(fā)費用,提高產(chǎn)品競爭力。(PCB板的改動和升級周期很長,費用高)。特點:體積小,集成度高,設(shè)計、修改、測試方便,能在線修改。軟件硬化,運行速度比軟件快得多(例如,數(shù)字濾波,信號變換、編碼、解碼)EDA現(xiàn)狀:片上系統(tǒng)級設(shè)計、設(shè)計驗證與仿真、可優(yōu)化、可以設(shè)計與器件分離、可內(nèi)嵌微處理器核、IP核等。片上系統(tǒng)設(shè)計(SOC:System On Chip),借助有關(guān)軟件(如MAX +PLUS II),自己設(shè)計自己系統(tǒng)所需的專用
56、芯片(ASIC:Application Specific Integrated Circuits)。片上可編程系統(tǒng)設(shè)計(SOPC:System On Programmable Chip)EDA發(fā)展趨勢:SOPC、內(nèi)嵌:MPU/MCU核、DSP核、存儲器核、數(shù)/?;旌掀骷?、RF處理器等,效邏輯門數(shù)、密度、工作電壓、時鐘頻率等。2. EDA技術(shù)的構(gòu)成要素四大要素:1. 大規(guī)模可編程器件(芯片)PLD(Programmable Logic Device,可編程邏輯器件)低密度PLD:PAL(早期),GAL(小規(guī)模,現(xiàn)在仍有應(yīng)用)、PLA(早期)高密度PLD:CPLD(復(fù)雜可編程邏輯器件)、FPGA(
57、現(xiàn)場可編程門陣列)、ISP-PLD(在系統(tǒng)可編程邏輯器件)三大國際主流公司(前述)PAC(Programmable Analog Circuit,可編程模擬器件)Lattice公司的ispPAC芯片,內(nèi)含:運放、電阻、電容等可用元件2. 硬件描述語言(HDL,Hardware Description Language)類似于C語言,用于在設(shè)計電路/系統(tǒng)時,描述所設(shè)計電路的功能、信號連接關(guān)系、時序等,相當(dāng)于一種編程語言。用HDL語言設(shè)計好電路/系統(tǒng),再進行仿真,通過后寫入PLD芯片,完成設(shè)計。常用:VHDL、Verilog HDL3. 軟件開發(fā)工具它是一類集成開發(fā)環(huán)境,將電路設(shè)計(支持VHDL語
58、言)、仿真驗證、輸出下載等功能集成在一起。各大PLD生產(chǎn)廠商都為自己的芯片開發(fā)推出了相應(yīng)的集成開發(fā)軟件。見前表。4. 電腦書上講的“實驗開發(fā)系統(tǒng)”是為學(xué)習(xí)而用的,不是今后從事EDA工作必須的。但為了運行軟件開發(fā)工具,電腦是不可缺少的。3. EDA軟件系統(tǒng)的構(gòu)成設(shè)計輸入子模塊設(shè)計數(shù)據(jù)庫子模塊分析驗證子模塊綜合仿真子模塊布局布線子模塊4. 基于可編程邏輯器件EDA技術(shù)設(shè)計流程本節(jié)介紹利用可編程邏輯器件和EDA技術(shù)設(shè)計電子電路/系統(tǒng)的流程。流程如P7的圖1-1所示。1. 設(shè)計準(zhǔn)備:功能確定所需資源估計速度要求選擇器件2. 設(shè)計輸入:用某種方式來描述所需的電路、系統(tǒng)。原理圖輸入方式層次圖方式(用狀態(tài)圖
59、或波形圖、真值表等)HDL程序方式3. 設(shè)計實現(xiàn):主要是器件配置:由不針對任何器件的設(shè)計輸入,轉(zhuǎn)換成針對指定器件(廠家、型號)的文件。這是通過集成開發(fā)環(huán)境軟件中的有關(guān)設(shè)置來實現(xiàn)的。在第三章介紹MAX+PLUS II時將會學(xué)到具體方法。4. 器件編程與配置:就是通常所說的“下載”,將編譯好的設(shè)計文件通過下載電纜下載到目標(biāo)芯片CPLD/FPGA中去。對CPLD來說是將JED文件下載到CPLD芯片中去(Programming);對FPGA來說是將BG文件配置到FPGA芯片中去(Configurating)。下載時采用專用下載電纜,一端為并口,另一端是一個并口到JTAG口的轉(zhuǎn)換接頭,見P299下圖F-
60、2。5. 設(shè)計驗證:在以上每步完成后,都可進行有關(guān)的仿真,以驗證設(shè)計是否正確,并非一定要等到下載到芯片后才進行。如,時序仿真??删幊踢壿嬈骷c數(shù)字系統(tǒng)的設(shè)計可編程邏輯器件是用于數(shù)字電路/系統(tǒng)設(shè)計的。本章學(xué)習(xí)PLD的分類、原理、典型器件,及基于PLD的數(shù)字系統(tǒng)的設(shè)計方法。1.可編程邏輯器件概述一、分類:數(shù)字可編程邏輯器件,模擬可編程器件二、PLD的發(fā)展與應(yīng)用現(xiàn)在的PLD公用性強,批量大,成本低,可靠性高。用戶開發(fā)時,自己既是芯片的設(shè)計者,也是芯片的制造者。通常在產(chǎn)品的研發(fā)階段,為了提高研發(fā)速度,降低開發(fā)費用,多采用PLD進行設(shè)計(產(chǎn)品的原型設(shè)計)。等到產(chǎn)品大批量生產(chǎn)時,可把PLD再轉(zhuǎn)換成全定制的
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024物流園區(qū)建設(shè)與運營管理合同
- 二零二五年度出口退稅證明開具與國際物流配送服務(wù)合同3篇
- 2024物業(yè)租賃合同協(xié)議范本
- 2024網(wǎng)絡(luò)游戲代理運營合同
- 2025年度新型材料研發(fā)中心廠房租賃協(xié)議范本4篇
- 2025廠區(qū)食堂承包合同樣本:營養(yǎng)健康食譜定制版3篇
- 2025年度智慧園區(qū)場地服務(wù)合同范本7篇
- 2024年03月中國銀行股份有限公司2024年春季招考筆試歷年參考題庫附帶答案詳解
- 2025年度文化產(chǎn)業(yè)園場地承包經(jīng)營合作協(xié)議范本4篇
- 2025年度產(chǎn)業(yè)園區(qū)企業(yè)服務(wù)中心租賃合同4篇
- 2023光明小升初(語文)試卷
- 三年級上冊科學(xué)說課課件-1.5 水能溶解多少物質(zhì)|教科版
- GB/T 7588.2-2020電梯制造與安裝安全規(guī)范第2部分:電梯部件的設(shè)計原則、計算和檢驗
- GB/T 14600-2009電子工業(yè)用氣體氧化亞氮
- 小學(xué)道德與法治學(xué)科高級(一級)教師職稱考試試題(有答案)
- 申請使用物業(yè)專項維修資金征求業(yè)主意見表
- 河北省承德市各縣區(qū)鄉(xiāng)鎮(zhèn)行政村村莊村名居民村民委員會明細
- 實用性閱讀與交流任務(wù)群設(shè)計思路與教學(xué)建議
- 應(yīng)急柜檢查表
- 通風(fēng)設(shè)施標(biāo)準(zhǔn)
- 酒店市場營銷教案
評論
0/150
提交評論