附件為:LCD12864顯示漢字和數字的程序與電路 /* 自定義延時子函數 */ void delayms(uchar z) { int x,y; for(x=z;x>0;x--) for(y=110;y>0;y--); } /* 判斷LCD忙信號狀態 */ void buys() { int dat; RW=1; RS=0; do { P0=0x00; E=1; dat=P0; E=0; dat=0x80 & dat; } while(!(dat==0x00)); } /* LCD寫指令函數 */ void w_com(uchar com) { //buys(); RW=0; RS=0; E=1; P0=com; E=0; } /* LCD寫數據函數 */ void w_date(uchar date) { //buys(); RW=0; RS=1; E=1; P0=date; E=0; } /* LCD選屏函數 */ void select_screen(uchar screen) { switch(screen) { case 0: //選擇全屏 CS1=0; CS2=0; break; case 1: //選擇左屏 CS1=0; CS2=1; break; case 2: //選擇右屏 CS1=1; CS2=0; break; /* case 3: //選擇右屏 CS1=1; CS2=1; break; */ } } /* LCDx向上滾屏顯示 */ void lcd_rol() { int x; for(x=0;x<64;x++) { select_screen(0); w_com(0xc0+x); delayms(500); } } /* LCD清屏函數:清屏從第一頁的第一列開始,總共8頁,64列 */ void clear_screen(screen) { int x,y; select_screen(screen); //screen:0-選擇全屏,1-選擇左半屏,2-選擇右半屏 for(x=0xb8;x<0xc0;x++) //從0xb8-0xbf,共8頁 { w_com(x); w_com(0x40); //列的初始地址是0x40 for(y=0;y<64;y++) { w_date(0x00); } } } /* LCD顯示漢字字庫函數 */ void lcd_display_hanzi(uchar screen,uchar page,uchar col,uint mun) { //screen:選擇屏幕參數,page:選擇頁參數0-3,col:選擇列參數0-3,mun:顯示第幾個漢字的參數 int a; mun=mun*32; select_screen(screen); w_com(0xb8+(page*2)); w_com(0x40+(col*16)); for ( a=0;a<16;a++) { w_date(hanzi[mun++]); } w_com(0xb8+(page*2)+1); w_com(0x40+(col*16)); for ( a=0;a<16;a++) { w_date(hanzi[mun++]); } } /* LCD顯示字符字庫函數 */ void lcd_display_zifuk(uchar screen,uchar page,uchar col,uchar mun) { //screen:選擇屏幕參數,page:選擇頁參數0-3,col:選擇列參數0-7,mun:顯示第幾個漢字的參數 int a; mun=mun*16; select_screen(screen); w_com(0xb8+(page*2)); w_com(0x40+(col*8)); for ( a=0;a<8;a++) { w_date(zifu[mun++]); } w_com(0xb8+(page*2)+1); w_com(0x40+(col*8)); for ( a=0;a<8;a++) { w_date(zifu[mun++]); } } /* LCD顯示數字字庫函數 */ void lcd_display_shuzi(uchar screen,uchar page,uchar col,uchar mun) { //screen:選擇屏幕參數,page:選擇頁參數0-3,col:選擇列參數0-7,mun:顯示第幾個漢字的參數 int a; mun=mun*16; select_screen(screen); w_com(0xb8+(page*2)); w_com(0x40+(col*8)); for ( a=0;a<8;a++) { w_date(shuzi[mun++]); } w_com(0xb8+(page*2)+1); w_com(0x40+(col*8)); for ( a=0;a<8;a++) { w_date(shuzi[mun++]); } } /* LCD初始化函數 */ void lcd_init() { w_com(0x3f); //LCD開顯示 w_com(0xc0); //LCD行初始地址,共64行 w_com(0xb8); //LCD頁初始地址,共8頁 w_com(0x40); //LCD列初始地址,共64列 } /* LCD顯示主函數 */ void main() { //第一行 int x; lcd_init(); //LCD初始化 clear_screen(0); //LCD清屏幕 lcd_display_shuzi(1,0,4,5); //LCD顯示數字 lcd_display_shuzi(1,0,5,1); //LCD顯示數字 lcd_display_hanzi(1,0,3,0); //LCD顯示漢字 lcd_display_hanzi(2,0,0,1); //LCD顯示漢字 //LCD字符漢字 lcd_display_hanzi(2,0,1,2); //LCD顯示漢字 //第二行 lcd_display_zifuk(1,1,2,0); //LCD顯示字符 lcd_display_zifuk(1,1,3,0); //LCD顯示字符 lcd_display_zifuk(1,1,4,0); //LCD顯示字符 lcd_display_zifuk(1,1,5,4); //LCD顯示字符 lcd_display_shuzi(1,1,6,8); //LCD顯示字符 lcd_display_shuzi(1,1,7,9); //LCD顯示字符 lcd_display_shuzi(2,1,0,5); //LCD顯示字符 lcd_display_shuzi(2,1,1,1); //LCD顯示字符 lcd_display_zifuk(2,1,2,4); lcd_display_zifuk(2,1,3,1); lcd_display_zifuk(2,1,4,2); lcd_display_zifuk(2,1,5,3); //第三行 for(x=0;x<4;x++) { lcd_display_hanzi(1,2,x,3+x); //LCD顯示漢字 } for(x=0;x<4;x++) { lcd_display_hanzi(2,2,x,7+x); //LCD顯示漢字 } //第四行 for(x=0;x<4;x++) { lcd_display_zifuk(1,3,x,5+x); //LCD顯示漢字 } lcd_display_shuzi(1,3,4,7); lcd_display_shuzi(1,3,5,5); lcd_display_shuzi(1,3,6,5); lcd_display_zifuk(1,3,7,9); lcd_display_shuzi(2,3,0,8); lcd_display_shuzi(2,3,1,9); lcd_display_shuzi(2,3,2,9); lcd_display_shuzi(2,3,3,5); lcd_display_shuzi(2,3,4,6); lcd_display_shuzi(2,3,5,8); lcd_display_shuzi(2,3,6,9); lcd_display_shuzi(2,3,7,2); while(1); /* while(1) { // LCD向上滾屏顯示 lcd_rol(); } */ }
上傳時間: 2013-11-08
上傳用戶:aeiouetla
C函數速查手冊 出版社:人民郵電出版社 《C函數速查手冊》中所講的C語言函數按照功能順序和字母順序進行排序,讀者既可以按照功能順序查找,也可以按照字母順序學習。《C函數速查手冊》不僅適合于C語言初學者學習使用,而且也可以作為中、高級C語言開發人員的參考手冊。 目錄 第1章 數學函數 1.1 _clear87函數:清除浮點狀態字 1.2 _status87函數:取浮點狀態字 1.3 abs函數:求整數的絕對值 1.4 acos、acosl函數:反余弦函數 1.5 asin、asinl函數:反正弦函數 1.6 atan函數:反正切函數 1.7 atan2、atan2l函數:計算Y/X的反正切值 1.8 cabs函數:計算復數的模 1.9 ceil函數:向上取整 1.10 cos函數:余弦函數 1.11 cosh函數:雙曲余弦函數 1.12 div函數:求兩個整數相除的商和余數 1.13 exp函數:指數函數 1.14 fabs函數:求浮點數的絕對值 1.15 floor函數:向下取整 1.16 fmod函數:計算x對y的模 1.17 frexp函數:將浮點數分為底數與指數 1.18 hypot函數:計算直角三角形的斜邊 1.19 labs函數:取長整數的絕對值 1.20 ldexp、ldexpl函數:冪計算 1.21 ldiv函數:兩個長整型數相除 1.22 log、logl函數:計算自然對數 1.23 log10、log10l函數:計算常用對數 1.24 max函數:求兩個數中的最大者 1.25 min函數:求兩個數中的最小者 1.26 modf、modfl函數:分割數為整數部分和小數部分 1.27 poly函數:計算多項式 1.28 pow函數:指數函數 1.29 pow10函數:指數函數 1.30 rand函數:隨機數發生器 1.31 random函數:隨機數發生器 1.32 randomize函數:初始化隨機數發生器 1.33 sin函數:正弦函數 1.34 sinh函數:雙曲正弦函數 1.35 sqrt函數:計算平方根 1.36 srand函數:初始化隨機數發生器 1.37 tan、tanl函數:正切函數 1.38 tanh、tanhl函數:雙曲正切函數 第2章 字符串函數 2.1 atof函數:把字符串轉換成浮點數 2.2 atoi函數:將字符串轉換成整型數 2.3 atol函數:將字符串轉換成長整型數 2.4 ecvt函數:將浮點數轉換為字符串 2.5 fcvt函數:將浮點數轉換為字符串 2.6 gcvt函數:將浮點數轉換成字符串 2.7 itoa函數:將整數值轉換為字符串 2.8 isalnum函數:字母、數字判斷函數 2.9 isalpha函數:字母判斷函數 2.10 isascii函數:整數值的字符分類 2.11 iscntrl函數:控制字符判斷函數 2.12 isdigit函數:數字判斷函數 2.13 isgraph函數:打印字符判斷 2.14 islower函數:小寫字母判斷函數 2.15 isprint函數:可打印字符判斷函數 2.16 isptmct函數:標點符號判斷函數 2.17 isspace函數:空格等判斷函數 2.18 isupper函數:大寫字母判斷函數 2.19 isxdigit函數:十六進制數字判斷函數 2.20 ltoa函數:將長整值轉換為字符串 2.21 mbstowcs函數:將多字節字符序列轉換成相應的寬字符序列 2.22 mbtowc函數:將多字節字符轉換成相應的寬字符 2.23 stpcpy函數:復制字符串 2.24 strcat函數:拼接字符串 2.25 strchr函數:查找給定字符 2.26 strcmp函數:比較字符串 2.27 strcmpi函數:比較字符串 2.28 strcpy函數:復制字符串 2.29 strcspn函數:查找不包含指定字符集子串的段 2.30 strdup函數:將字符串復制到新建的位置 2.31 stricmp函數:比較字符串 2.32 strlen函數:獲取字符長度
上傳時間: 2014-12-25
上傳用戶:水口鴻勝電器
用單片機制作的高精度數顯計數器 單片機C51計數器 要求:編寫一個計數器程序,將T0作為計數器來使用,對外部信號計數,將所計數字顯示在數碼管上。 該部分的硬件電路如圖所示,U1的P0口和P2口的部份引腳構成了6位LED數碼管驅動電路,數碼管采用共陽型,使用PNP型三極管作為片選端的驅動,所有三極管的發射極連在一起,接到正電源端,它們的基極則分別連到P2.0…P2.5,當P2.0…P2.5中某引腳輸是低電平時,三極管導通,給相應的數碼管供電,該位數碼管點亮哪些筆段,則取決于筆段引腳是高或低電平。圖中看出,所有6位數碼管的筆段連在一起,通過限流電阻后接到P0口,因此,哪些筆段亮就取決于P0口的8根線的狀態。 里面包含了:單片機C51計數器、計算器流程圖、工作原理,
上傳時間: 2013-11-16
上傳用戶:myworkpost
P0端口由鎖存器、輸入緩沖器、切換開關、一個與非門、一個與門及場效應管驅動電路構成。再看圖的右邊,標號 為P0.X引腳的圖標,也就是說P0.X引腳可以是P0.0到P0.7的任何一位,即在P0口有8個與上圖相同的電路組成。
上傳時間: 2014-01-13
上傳用戶:fandeshun
//CM3 有 最多240個中斷(通常外部中斷寫作IRQs),就是 軟件上說的 IRQ CHANAELx(中斷通道號x) 每個中斷有自己的可編程的中斷優先級【 有唯一對應的 中斷優先級寄存器 】. 由于CM3支持 硬件中斷嵌套,所以可以有 256 級的可編程優先級 和 256級中斷嵌套【 書上稱:搶占(preempt) 優先級】 所以大家可以設: IRQ CHANAEL 0 通道 = 2 中斷優先級WWDG 窗口定時器中斷 IRQ CHANAEL 1 通道 = 0 中斷優先級PVD 聯到EXTI的電源電壓檢測(PVD)中斷 IRQ CHANAEL 3 通道 = 255 中斷優先級RTC 實時時鐘(RTC)全局中斷 IRQ CHANAEL 6 通道 = 10 中斷優先級EXTI0 EXTI線0中斷 ..... IRQ CHANAEL 239 通道 = (0<x<255) 中斷優先級..
上傳時間: 2013-10-28
上傳用戶:redherr
MSP430系列C編譯器編程指南第1章 安裝和文檔關系圖本章說明如何安裝和運行IAR 產品的命令行和Windwos Workbench 版本并給出與產品一起提供的用戶指南的概述請注意某此產品只有命令行版本且根據用戶正在使用的產品或平臺資料可能稍有不同1.1 命令行版本本節敘述怎樣安裝和運得IAR 系統工具的命令版本1.1.1 用戶需要什么 DOS 4.X 或更高版本此產品也和運行在Windows95, Windows NT 3.51 或更高版本或Windows 3.1 X 下的DOS 窗口相兼容 至少 10M 字節的自由磁盤空間 最少有 4M 字節的RAM 可供IAR 應用程序使用
上傳時間: 2013-11-22
上傳用戶:agent
C51原理及相關基礎入門知識 第一章:C51 流程控制語句一、分類條件語句、循環語句和開關語句。下面將對這些語句作詳細介紹。(1) 條件語句條件語句的一般形式為:if(表達式)語句 1;else語句 2;上述結構表示: 如果表達式的值為非0(TURE)即真, 則執行語句1, 執行完語句1 從語句2 后開始繼續向下執行; 如果表達式的值為 0(FALSE)即假, 則跳過語句1 而執行語句2。所謂表達式是指關系表達式和邏輯表達式的結合式。注意:1. 條件執行語句中"else 語句2;"部分是選擇項, 可以缺省, 此時條件語句變成:if(表達式) 語句1;表示若表達式的值為非 0 則執行語句1 , 否則跳過語句1 繼續執行。2. 如果語句1 或語句2 有多于一條語句要執行時, 必須使用"{"和"}" 把這些語句包括在其中, 此時條件語句形式為:if(表達式){語句體 1;}else{語句體 2;}3. 條件語句可以嵌套, 這種情況經常碰到, 但條件嵌套語句容易出錯, 其原因主要是不知道哪個if 對應哪個else。例如:if(x>20||x<-10)if(y<=100&&y>x)printf("Good");elseprintf("Bad");對于上述情況,規定: else 語句與最近的一個if 語句匹配, 上例中的 else 與 if(y<=100&&y>x) 相匹配。為了使 else 與if(x>20||x<-10) 相匹配, 必須用花括號。如下所示:if(x>20||x<-10){if(y<=100&&y>x)printf("Good");}
上傳時間: 2013-10-24
上傳用戶:Sophie
NE1617A是一款高精度雙通道數字溫度監控器。其可以測量本地溫度及遠程溫度。遠程溫度傳感器可以使用分立NPN/PNP三極管(以二極管方式連接),如2N3904/2N3906。或者選用一些內嵌PNP結構(連接成二極管形式)的芯片,如INTEL的微處理器。
上傳時間: 2013-11-17
上傳用戶:199311
PIC單片機實用教程基礎篇+提高篇 PIC單片機(Peripheral Interface Controller)是一種用來開發的去控制外圍設備的集成電路(IC)。一種具有分散作用(多任務)功能的CPU。與人類相比,大腦就是CPU,PIC 共享的部分相當于人的神經系統。 PIC 單片機是一個小的計算機 PIC單片機有計算功能和記憶內存像CPU并由軟件控制允行。然而,處理能力—存儲器容量卻很有限,這取決于PIC的類型。但是它們的最高操作頻率大約都在20MHz左右,存儲器容量用做寫程序的大約1K—4K字節。 時鐘頻率與掃描程序的時間和執行程序指令的時間有關系。但不能僅以時鐘頻率來判斷程序處理能力,它還隨處理裝置的體系結構改變(1*)。如果是同樣的體系結構,時鐘頻率較高的處理能力會較強。 這里用字來解釋程序容量。用一個指令(2*)表示一個字。通常用字節(3*)來表示存儲器(4*)容量。一個字節有8位,每位由1或0組成。PIC16F84A單片機 的指令由14位構成。當把1K個子轉換成位為:1 x 1,024 x 14 = 14,336位。再轉換為字節為:14,336/(8 x 1,024) = 1.75K。在計算存儲器的容量時,我們規定 1G 字節 = 1,024M 字節, 1M 字節 = 1,024K 字節, 1K 字節= 1,024 字節. 它們不是以1000為倍數,因為這是用二進制計算的緣故。 1*計算機的物理結構,包括組織結構、容量、該計算機的CPU、存儲器以及輸入輸出設備間的互連。經常特指CPU的組織結構,包括它的寄存器、標志、總線、算術邏輯部件、指令譯碼與執行機制以及定時和控制部件。 2*指出某種操作并標識其操作數(如果有操作數的話)的一種語言構造 3*作為一個單位來操作(運算)的一個二進制字符串,通常比計算機的一個字短。 4*處理機內的所有可尋址存儲空間以及用于執行指令的其它內存儲器。 在計算存儲器的容量時,我們規定 1G 字節 = 1,024M 字節, 1M 字節 = 1,024K 字節, 1K 字節= 1,024 字節. 它們不是以1000為倍數,因為這是用二進制計算的緣故。 用PIC單片機使電路做的很小巧變得可能。 因為PIC單片機可以把計算部分、內存、輸入和輸出等都做在一個芯片內。所以她工作起來效率很高、功能也自由定義還可以靈活的適應不同的控制要求,而不必去更換不同的IC。這樣電路才有可能做的很小巧。
上傳時間: 2013-10-15
上傳用戶:sxdtlqqjl
關于PCB封裝的資料收集整理. 大的來說,元件有插裝和貼裝.零件封裝是指實際零件焊接到電路板時所指示的外觀和焊點的位置。是純粹的空間概念.因此不同的元件可共用同一零件封裝,同種元件也可有不同的零件封裝。像電阻,有傳統的針插式,這種元件體積較大,電路板必須鉆孔才能安置元件,完成鉆孔后,插入元件,再過錫爐或噴錫(也可手焊),成本較高,較新的設計都是采用體積小的表面貼片式元件(SMD)這種元件不必鉆孔,用鋼膜將半熔狀錫膏倒入電路板,再把SMD 元件放上,即可焊接在電路板上了。晶體管是我們常用的的元件之一,在DEVICE。LIB庫中,簡簡單單的只有NPN與PNP之分,但實際上,如果它是NPN的2N3055那它有可能是鐵殼子的TO—3,如果它是NPN的2N3054,則有可能是鐵殼的TO-66或TO-5,而學用的CS9013,有TO-92A,TO-92B,還有TO-5,TO-46,TO-52等等,千變萬化。還有一個就是電阻,在DEVICE 庫中,它也是簡單地把它們稱為RES1 和RES2,不管它是100Ω 還是470KΩ都一樣,對電路板而言,它與歐姆數根本不相關,完全是按該電阻的功率數來決定的我們選用的1/4W 和甚至1/2W 的電阻,都可以用AXIAL0.3 元件封裝,而功率數大一點的話,可用AXIAL0.4,AXIAL0.5等等。現將常用的元件封裝整理如下:電阻類及無極性雙端元件:AXIAL0.3-AXIAL1.0無極性電容:RAD0.1-RAD0.4有極性電容:RB.2/.4-RB.5/1.0二極管:DIODE0.4及DIODE0.7石英晶體振蕩器:XTAL1晶體管、FET、UJT:TO-xxx(TO-3,TO-5)可變電阻(POT1、POT2):VR1-VR5這些常用的元件封裝,大家最好能把它背下來,這些元件封裝,大家可以把它拆分成兩部分來記如電阻AXIAL0.3 可拆成AXIAL 和0.3,AXIAL 翻譯成中文就是軸狀的,0.3 則是該電阻在印刷電路板上的焊盤間的距離也就是300mil(因為在電機領域里,是以英制單位為主的。同樣的,對于無極性的電容,RAD0.1-RAD0.4也是一樣;對有極性的電容如電解電容,其封裝為RB.2/.4,RB.3/.6 等,其中“.2”為焊盤間距,“.4”為電容圓筒的外徑。對于晶體管,那就直接看它的外形及功率,大功率的晶體管,就用TO—3,中功率的晶體管,如果是扁平的,就用TO-220,如果是金屬殼的,就用TO-66,小功率的晶體管,就用TO-5,TO-46,TO-92A等都可以,反正它的管腳也長,彎一下也可以。對于常用的集成IC電路,有DIPxx,就是雙列直插的元件封裝,DIP8就是雙排,每排有4個引腳,兩排間距離是300mil,焊盤間的距離是100mil。SIPxx 就是單排的封裝。等等。值得我們注意的是晶體管與可變電阻,它們的包裝才是最令人頭痛的,同樣的包裝,其管腳可不一定一樣。例如,對于TO-92B之類的包裝,通常是1 腳為E(發射極),而2 腳有可能是B 極(基極),也可能是C(集電極);同樣的,3腳有可能是C,也有可能是B,具體是那個,只有拿到了元件才能確定。因此,電路軟件不敢硬性定義焊盤名稱(管腳名稱),同樣的,場效應管,MOS 管也可以用跟晶體管一樣的封裝,它可以通用于三個引腳的元件。Q1-B,在PCB 里,加載這種網絡表的時候,就會找不到節點(對不上)。在可變電阻
上傳時間: 2013-11-03
上傳用戶:daguogai