影音先锋男人资源在线观看,精品国产日韩亚洲一区91,中文字幕日韩国产,2018av男人天堂,青青伊人精品,久久久久久久综合日本亚洲,国产日韩欧美一区二区三区在线

AD9850 基于51單片機 1602液晶

上傳人:小**** 文檔編號:59475137 上傳時間:2022-03-03 格式:DOCX 頁數(shù):11 大?。?1.42KB
收藏 版權(quán)申訴 舉報 下載
AD9850 基于51單片機 1602液晶_第1頁
第1頁 / 共11頁
AD9850 基于51單片機 1602液晶_第2頁
第2頁 / 共11頁
AD9850 基于51單片機 1602液晶_第3頁
第3頁 / 共11頁

下載文檔到電腦,查找使用更方便

16 積分

下載資源

還剩頁未讀,繼續(xù)閱讀

資源描述:

《AD9850 基于51單片機 1602液晶》由會員分享,可在線閱讀,更多相關(guān)《AD9850 基于51單片機 1602液晶(11頁珍藏版)》請在裝配圖網(wǎng)上搜索。

1、/* 1 、可通過按鍵實現(xiàn)頻率輸出步進加減;步進頻率范圍0~10MHz; 2、步進值有七種選擇:1HZ,10Hz、100Hz、1000Hz、10KHz、100KHz、1000KHz 3、采用1602液晶顯示屏,可以實時顯示輸出頻率值,顯示當前步進值,顯示頻率的單位都為Hz。 */ //基本功能全部實現(xiàn);2011/8/9 #include "reg52.h" //調(diào)用頭文件(單片機內(nèi)部的寄存器定義) #include "intrins.h" #define uchar unsigned char #define uint unsigned int

2、/******本段為硬件I/O口定義********/ sbit LCD_E = P2^7;//定義1602液晶的使能管腳; sbit LCD_RW = P2^6;//定義1602液晶的讀寫管腳; sbit LCD_RS = P2^5;//定義1602液晶的選通管腳; sbit reset = P2^0; //ad9850的復(fù)位引腳; sbit w_clk = P2^1; //ad9850的時鐘引腳; sbit fqud = P2^2; //ad9850的輸出更新引腳; sbit bit_data= P3^0; #define LCD_DA

3、TA P0 //向1602液晶傳送數(shù)據(jù)的端口,這里用的是P1口; #define LCD_BUSY 0x80 // 用于檢測LCD的忙標識(本程序中用的是延時,未檢測) //LCD顯示內(nèi)容,定義到代碼段; unsigned char code LcdBuf1[]= "FRQ: Hz"; unsigned char code LcdBuf2[]= "SETP:"; //unsigned char code LcdBuf3[]="wei wen bo "; //unsigned cha

4、r code LcdBuf4[]="15177684256"; double Con_Word_1 = 0x00;//定義了一個浮點變量,用于計算控制字; double Con_Word_2 = 0x00;//定義了一個浮點變量,用于計算控制字; long uint control_word = 0x00;//用來存儲控制字的數(shù)值; long uint Frequency_Out;//設(shè)置的頻率值; uchar a,b,c,d,e,f,g,h; //為了向1602寫入頻率值,首先將頻率值拆分存于這8個變量中; sbit Light = P3^2; //程序狀態(tài)指示燈,它與單片機對9

5、850控制無關(guān),只是調(diào)試程序的時候使用! /*定義按鍵;2X3矩陣鍵盤; sbit P1_0 = P1^0; sbit P1_1 = P1^1; sbit P1_2 = P1^2; sbit P1_3 = P1^3; sbit P1_4 = P1^4; sbit P1_5 = P1^5; sbit P1_6 = P1^6; sbit P1_7 = P1^7;*/ uchar dat = 0;//鍵盤子程序處理過程中使用的中間變量; uchar keyzhi = 0x00;//鍵值;鍵盤掃描子程序的返回值存于該變量中; //函數(shù)聲明 void

6、 lcd_init(void);//1602液晶初始化子程序; void display_string(unsigned char x,unsigned char y,unsigned char *s); //顯示字符子程序;x、y是坐標;x:從左邊數(shù)起第幾個字符:y:是第一行還是第二行; /************************************************** ** 函數(shù)名稱: delay ** 入口參數(shù):z(int型) ** 出口參數(shù):無 ** 功能描述: 延時,使用11.0592晶體,1MS *******************

7、*********************************/ void delay(uint z) { uint x,y; for(x=z;x>0;x--) for(y=111;y>0;y--); } /************************************************** ** 函數(shù)名稱: WriteDataLcd ** 入口參數(shù):wdata(unsigned char型) ** 出口參數(shù):無 ** 功能描述: 寫數(shù)據(jù)到LCD *********************************************

8、*******/ void WriteDataLcd(uchar date)//向1602液晶寫入數(shù)據(jù); { LCD_RS=1; LCD_RW=0; LCD_E=0; LCD_E=1; LCD_DATA=date; delay(2); //短暫延時,代替檢測忙狀態(tài) LCD_E=0; } /************************************************** ** 函數(shù)名稱: WriteCommandLcd ** 入口參數(shù):wdata(unsigned char型) ** 出口

9、參數(shù):無 ** 功能描述: 寫命令到LCD ****************************************************/ void WriteCommandLcd(uchar com)//向1602液晶寫入命令; { LCD_RS=0; LCD_RW=0; LCD_E=0; LCD_E=1; LCD_DATA=com; delay(2); //短暫延時,代替檢測忙狀態(tài) LCD_E=0; } //LCD初始化 void lcd_init(void) {

10、 LCD_DATA = 0; delay(10); WriteCommandLcd(0x38); delay(5); WriteCommandLcd(0x38); //顯示模式設(shè)置 delay(5); WriteCommandLcd(0x38); //顯示模式設(shè)置 delay(5); WriteCommandLcd(0x01); //關(guān)閉顯示 WriteCommandLcd(0x08); //顯示清屏 WriteCommandLcd(0x0c); //光標不顯示 WriteC

11、ommandLcd(0x06); //顯示開及光標移動設(shè)置 //WriteCommandLcd(0x1c); //屏幕左移 } /************************************************** ** 函數(shù)名稱: display_xy ** 入口參數(shù):x(unsigned char型),y(unsigned char型) ** 出口參數(shù):無 ** 功能描述: 設(shè)置光標位置, x是行號,y是列號 ****************************************************/ void

12、display_xy(unsigned char x,unsigned char y) { if(y==0x01) { x = x + 0x40 + 0x80; } else { x = x+0x80; } WriteCommandLcd(x); } /********************************************************************* ** 函數(shù)名稱: display_string ** 入口參數(shù):x(unsigned char型),y(unsig

13、ned char型),s(指針型) ** 出口參數(shù):無 ** 功能描述: 在具體位置顯示字符串,以/0結(jié)束,x是列號,y是行號 **********************************************************************/ void display_string(unsigned char x,unsigned char y,unsigned char *s) { display_xy(x,y); while(*s) { WriteDataLcd(*s); s++; } } Qu

14、_Chu_Shu_Ma_Ge_Wei() //取出要顯示的每一位數(shù)據(jù); { a = Frequency_Out % 10; b = (Frequency_Out % 100)/10; c = (Frequency_Out % 1000)/100; d = (Frequency_Out % 10000)/1000; e = (Frequency_Out % 100000)/10000; f = (Frequency_Out % 1000000)/100000; g = (Frequency_Ou

15、t % 10000000)/1000000; h = (Frequency_Out % 100000000)/10000000; } display_data() //顯示數(shù)據(jù)子程序 { Qu_Chu_Shu_Ma_Ge_Wei();//取出要顯示的每一位數(shù)據(jù); display_string(1,0,LcdBuf1);//顯示第一行,從第2個位置開始 WriteCommandLcd(0x85);//顯示數(shù)值的話,用其真實的地址,如0x83等, WriteDataLcd(0x30+h); //如果要顯示字符的話,暫時用x、y坐標的方式 Wr

16、iteDataLcd(0x30+g);//以下都是送顯示數(shù)據(jù); WriteDataLcd(0x30+f); WriteDataLcd(0x30+e); WriteDataLcd(0x30+d); WriteDataLcd(0x30+c); WriteDataLcd(0x30+b); WriteDataLcd(0x30+a); } scan_KEY(void) //鍵值處理子程序 { uchar key; key=P1; switch(key) { case 0xee: keyzhi=1;break;

17、 // 1110 1110 case 0xde: keyzhi=2;break; // 1101 1110 case 0xbe: keyzhi=3;break; // 1011 1110 case 0x7e:keyzhi=4;break; // 0111 1110 case 0xed: keyzhi=5;break; // 1110 1101 case 0xdd: keyzhi=6;break; // 1101 1101 case 0xbd: keyzhi=7;

18、break; // 1011 1101 case 0x7d:keyzhi=8;break; // 0111 1101 case 0xeb: keyzhi=9;break; // 1110 1011 case 0xdb: keyzhi=10;break; // 1101 1011 case 0xbb: keyzhi=11;break; // 1011 1011 case 0x7b:keyzhi=12;break; // 0111 1011 cas

19、e 0xe7: keyzhi=13;break; // 1110 0111 case 0xd7:keyzhi=14;break; // 1101 0111 case 0xb7: keyzhi=15;break; // 1011 0111 case 0x77:keyzhi=16;break; // 0111 0111 default:keyzhi=0;break; } return (keyzhi); } keychuli()//鍵盤掃描子程序 { uchar row,col

20、; P1=0xf0; if((P1&0xf0)!=0xf0) //判斷有無按下 { delay(10); if((P1&0xf0)!=0xf0) //再次判斷 { row=0xfe; //得到行 dat = scan_KEY(); while((row&0x10)!=0) //用來判斷是否移位過頭 { P1=row; if((P1&0xf0)!=0xf0)

21、 { col=(P1&0xf0)|0x0f; //得到列 dat = scan_KEY(); return(row&col); //得出列(高四位)+行(低四位) } else { row=row<<1|0x01; //移位用于判斷在哪行 } } } else

22、 return 0; } } void ad9850_reset_serial() //復(fù)位AD9850 { w_clk=0; fqud=0; //reset信號 reset=0; reset=1; reset=0; //w_clk信號 w_clk=0; w_clk=1; w_clk=0; //f_qud信號 fqud=0; fqud=1; fqud=0; } Calculate_control_word(long uint Frequency_Out) { Con_Word_1 = Frequency_Out * 3

23、4; //125M FSW=fo*2^32/fc Con_Word_2 = Frequency_Out *0.35973836; //小數(shù)部分 // Con_Word_1 = Frequency_Out * 42; //100M // Con_Word_2 = Frequency_Out *0.94967296; Con_Word_2 = Con_Word_2 + 0.5;//小數(shù)部分四舍五入; Con_Word_1 = Con_Word_1 + Con_Word_2; //根據(jù)設(shè)定的頻率以浮點形

24、式計算控制字 control_word = Con_Word_1 / 1;//將控制字換算成整數(shù)形式 } void write_control_word(long uint control_word ) { uchar i; fqud = 0; w_clk = 0; for(i=0;i<40;i++) { w_clk = 0; delay(10); if(control_word & 0x01) bit_data=1; else bit_data=0; _

25、nop_(); w_clk = 1; control_word = control_word >> 1; } fqud = 1; w_clk = 0; delay(20); fqud = 0; } main() { uchar i = 0x00; uint Step_Bian_Liang = 0;//步進變量; long uint Step_Data = 100;//默認為100Hz; long unsigned int Step_Data_Xian_Shi = 0x00;

26、 ad9850_reset_serial(); //復(fù)位AD9850; delay(10); lcd_init(); //初始化子程序; Frequency_Out = 100;//開機默認的頻率輸出值為100; Calculate_control_word(Frequency_Out);//根據(jù)設(shè)置的頻率換算成將要送入AD9850中的整數(shù)值; write_control_word(control_word); //向AD9850送出頻率控制字; display_data(); //顯示數(shù)據(jù);

27、 display_string(0,1,LcdBuf2); //顯示第二行,從第0個位置開始; WriteCommandLcd(0xc5);//從第二行第六個開始顯示數(shù)據(jù); WriteDataLcd(0x30+(Step_Data/1000));//送出顯示數(shù)據(jù); WriteDataLcd(0x30+(Step_Data/100)%10);//送出顯示數(shù)據(jù); WriteDataLcd(0x30+(Step_Data/10)%10);//送出顯示數(shù)據(jù); WriteDataLcd(0x30+(Step_Data%10));//送出顯示數(shù)據(jù); disp

28、lay_string(9,1,"Hz");//顯示Hz; while(1) { keychuli();//鍵處理子程序 if(dat == 1)//鍵值為1;步進加 { dat = 0;delay(50); Frequency_Out = Frequency_Out + Step_Data; if(Frequency_Out > 10000000) { Frequency_Out = Frequency_Out - Step_Data; } Light =~Light; di

29、splay_data(); ad9850_reset_serial(); //復(fù)位AD9850; delay(5); //使AD9850進入正常的工作狀態(tài); Calculate_control_word(Frequency_Out);//根據(jù)設(shè)置的頻率換算成將要送入AD9850中的整數(shù)值; write_control_word(control_word); //向AD9850送出頻率控制字; } if(dat == 4)//鍵值為4;步進減 { dat =

30、0;delay(50); if(Frequency_Out >= Step_Data) { Frequency_Out = Frequency_Out - Step_Data; } Light =~Light; display_data(); ad9850_reset_serial(); //復(fù)位AD9850; delay(10); Calculate_control_word(Frequency_Out);//根據(jù)設(shè)置的頻率換算成將要送入AD9850中的整數(shù)值; write_control

31、_word(control_word); //向AD9850寫入頻率控制字; } if(dat == 6)//步進選擇;這里有三種選擇 { dat = 0;delay(50);Light =~Light; Step_Bian_Liang++; Step_Bian_Liang = Step_Bian_Liang%7; if(Step_Bian_Liang == 0) { Step_Data = 1;//步進1; } if(Step_Bian_Liang == 1) { S

32、tep_Data = 10;//步進10; } if(Step_Bian_Liang == 2) { Step_Data = 50; } if(Step_Bian_Liang == 3) { Step_Data = 100; } if(Step_Bian_Liang == 4) { Step_Data = 500; } if(Step_Bian_Liang == 5) { Step_Data = 1000; }

33、if(Step_Bian_Liang == 6) { Step_Data = 10000; } if(Step_Data<=1000) { WriteCommandLcd(0xc5);//參考上面類似的部分 WriteDataLcd(0x30+(Step_Data/1000)); WriteDataLcd(0x30+(Step_Data/100)%10); WriteDataLcd(0x30+(Step_Data/10)%10); WriteDataLcd(0x30+(Step_Data%10));

34、 display_string(9,1,"Hz "); } else { Step_Data_Xian_Shi = Step_Data/1000; WriteCommandLcd(0xc5);//參考上面類似的部分 WriteDataLcd(0x30+(Step_Data_Xian_Shi/1000)); WriteDataLcd(0x30+(Step_Data_Xian_Shi/100)%10); WriteDataLcd(0x30+(Step_Data_Xian_Shi/10)%10); WriteDataLcd(0x30+(Step_Data_Xian_Shi%10)); display_string(9,1,"kHz"); } delay(10); } if(dat==5) { dat=0;delay(50);Light=~Light; break; } } }

展開閱讀全文
溫馨提示:
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)容負責。
6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

相關(guān)資源

更多
正為您匹配相似的精品文檔
關(guān)于我們 - 網(wǎng)站聲明 - 網(wǎng)站地圖 - 資源地圖 - 友情鏈接 - 網(wǎng)站客服 - 聯(lián)系我們

copyright@ 2023-2025  zhuangpeitu.com 裝配圖網(wǎng)版權(quán)所有   聯(lián)系電話:18123376007

備案號:ICP2024067431-1 川公網(wǎng)安備51140202000466號


本站為文檔C2C交易模式,即用戶上傳的文檔直接被用戶下載,本站只是中間服務(wù)平臺,本站所有文檔下載所得的收益歸上傳人(含作者)所有。裝配圖網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對上載內(nèi)容本身不做任何修改或編輯。若文檔所含內(nèi)容侵犯了您的版權(quán)或隱私,請立即通知裝配圖網(wǎng),我們立即給予刪除!