黃 凱高級講師
多年移動互聯(lián)網(wǎng)開發(fā)經(jīng)驗,精通Android與iOS開發(fā),對JavaEE等后臺技術也 有所研究。尤其精通Android平臺的開發(fā),對Android平臺下的性能優(yōu)化有極其豐富的經(jīng)驗。 曾就職于酷狗音樂擔任高級Android軟件工程師與Team Leader一職,帶領超過20人的開發(fā)團隊,有豐富的開發(fā)與管理經(jīng)驗。參與開發(fā)了<酷狗音樂>,<繁星網(wǎng)>,<中國電信移動辦公>, <智慧天河>,<翼健康>,<創(chuàng)餉無限>,<外修管家>等20多款互聯(lián)網(wǎng)熱門應用。其不但開發(fā)經(jīng)驗豐富,教學幽默風趣,而且對 學生要求嚴格,堅持授人與魚不如授人與漁的理念,注重培養(yǎng)學生的解決問題與自我思考的能力。
自學java與java培訓該如何選擇
從事IT培訓行業(yè)這些年,身邊經(jīng)常有朋友來咨詢,問現(xiàn)在是否可以加入這個高薪行業(yè),Java學習難不難,需要哪些條件?
在軟件開發(fā)設計行業(yè)當中,使用**多的編程語言就屬Java軟件開發(fā)了,很多人都想在Java編程開發(fā)領域?qū)で笠环莨ぷ鳌?/span>
Java是當前世界上比較流行的計算機編程語言,Java徹底改變了人們的生活,國內(nèi)的開發(fā)人才需求量仍然在不斷的增長,主要原因還是在于移動互聯(lián)網(wǎng)的快速發(fā)展,衍生出一大批的新生企業(yè),創(chuàng)業(yè)公司,預計在未來5年內(nèi)Java軟件開發(fā)人才的需求將會遠大于供給,其中java程序員、java工程師**為缺乏。
自學java與java培訓是兩個繞不開的話題,兩者的區(qū)別,前者知識是自己搜尋的,買書看或者網(wǎng)上找視頻看,而后者,技術知識是老師教的,作為一個普通大學生實際上任何人都能夠自學,只不過聰明程度和堅持的時間長短不同,花費的時間長一點短一點而已。
學習關乎到時間和金錢,沒有效果和質(zhì)量的培訓,其實是沒有任何意義的。Java培訓班有哪些呢?市面上的Java培訓良莠不齊,選擇時應該慎重些。Java致力于打造符合企業(yè)需求的全能型人才。課程定位定位中高級JAVA開發(fā)工程師,課程內(nèi)容涉及面廣,內(nèi)容深。課程涵蓋了Java、Web,數(shù)據(jù)庫,企業(yè)流行框架,Java等企業(yè)**佳實踐、云計算大數(shù)據(jù)課程、內(nèi)容由淺入深,剖析原理,讓學員掌握實用技術,做企業(yè)和社會需要的稀缺人才。
此外,Java培訓將為你提供就業(yè)保障,開設有就業(yè)指導課,設有專門的就業(yè)指導老師,在畢業(yè)前期,畢業(yè)之際,就業(yè)老師會為你做專門的就業(yè)指導,更有職業(yè)素養(yǎng)課程,不僅將你打造成Java開發(fā)技術達人,更是一位懂得職場之道的合格就業(yè)者。還有豐富的Java學習視頻免費為你提供學習。
JAVA 分布式大綱
一階段 java基礎,我們將學習變量,基本數(shù)據(jù)類型,進制,轉(zhuǎn)義字符,運 算符,分支語句和循環(huán)語句等,以達到訓練基礎語法和邏輯能力的目的。還有對數(shù)組、面向?qū)ο蠛彤惓L幚淼取?/span>
二階段 javaWeb,主要是學習Web前端開發(fā)基礎和框架、Servlet和JSP在Web 后端的應用、Web后端開發(fā)相關專題、MVC和分層架構(gòu)以及項目開發(fā)流程及CASE工具的使用等。
三階段 java框架,像框架整合開發(fā)(SSH/SSS)、RESTful架構(gòu)和移動端接口 設計、第三方接口和在線支付功能、網(wǎng)站安全和Spring Security應用實戰(zhàn)、復雜用戶交互處理和Spring Web Flow的應用、MyBatis的應用和SSM整合等 技術點都是需要你掌握的。
四階段 java 云數(shù)據(jù),億級并發(fā)架構(gòu)演進、Linux基礎、搭建tomcat環(huán)境以 及大數(shù)據(jù)開發(fā)云計算等高級Java教程,是Java技術的高端知識。其中穿插項目實戰(zhàn)演練,企業(yè)真實項目供學員應用學習,進行知識體系的“二次學習” 。
【51單片機】時光鐘 - 一寸光陰一寸光
>**時間就像光一樣,匆匆一撇卻已遠去,離去的時光怕是連光也望塵莫及。**
1.概要:有別于傳統(tǒng)石英鐘,內(nèi)部不使用任何機械結(jié)構(gòu),而是全部使用電子電路。**單片機控制發(fā)光二極管所形成的光束來指示時間。因為指針全部使用光束代替,所以在深夜也能看得很清楚,也因此可以當作“壁燈”使用。
2.原理:51單片機作為主控芯片,從DS3231時鐘得到時間數(shù)據(jù),再**74ls38譯碼器輸出低電平控制60個Led燈的開關。Led發(fā)光二極管安裝于全透明的聚光杯中,形成的光束作為指針,**單片機的PWM控制Led的形成長短不一的光束來區(qū)分時針、分針和秒針。HC06作為通信芯片,可連接手機的藍牙實現(xiàn)對本時鐘時間的修改,以及指定Led燈的亮滅(作為壁燈使用時),或者顯示一些預設的動畫效果,比如流水燈等。
PS:樓主由于工具所限(自己在家無聊時做的,純手工請不要嫌棄),這里只使用12個Led做了個原型,沒加藍牙模塊,只實現(xiàn)**核心的時間功能。
3.材料: 1. STC89C52RC 2. DS3231時鐘模塊 3. 12個高亮5mmLED 4. 3.7v鋰電池 5. TP4056鋰電池充電模塊 6. 奶茶店的透明吸管
PS:根據(jù)自己的喜好選擇led的顏色即可,但是注意不同波長的led形成的光束有別,有些會比較不明顯。
4.51單片機程序:
#include <reg52.h> #include <intrins.h> #define uchar unsigned char #define uint unsigned int #define DS3231_WriteAddress 0xD0 #define DS3231_ReadAddress 0xD1 #define DS3231_SECOND 0x00 #define DS3231_MINUTE 0x01 #define DS3231_HOUR 0x02 #define DS3231_WEEK 0x03 #define DS3231_DAY 0x04 #define DS3231_MONTH 0x05 #define DS3231_YEAR 0x06 bit ack; //ó|′e±ê???? sbit SDA = P0^6; //?£?aI2Cêy?Y′??í??SDA sbit SCL = P0^7; //?£?aI2Cê±?ó??????SCL sbit c1 = P2^6; //??£????? sbit c2 = P2^5; //·?£????? sbit c3 = P2^7; //??£????? sbit c4 = P2^3; //??£????? sbit c5 = P2^1; //??£?ê??? sbit c6 = P2^0; //??£????? sbit c7 = P3^7; //??£????? sbit c8 = P3^6; //??£????? sbit c9 = P3^2; //??£?ê??? sbit c10 = P1^5; //·?£?ê??? sbit c11 = P1^3; //ê±£????? sbit c12 = P1^2; //ê±£?ê??? unsigned int flag1, flag2, flag3, flag4, flag5, flag6, flag7, flag8, flag9, flag10, flag11, flag12; unsigned char hour, minute, second; unsigned char lastHour = 24, lastMinute = 60, lastSecond = 60; void TM1637_start(); void TM1637_stop(); void TM1637_write1Bit(unsigned char mBit); void TM1637_write1Byte(unsigned char mByte); void TM1637_writeCammand(unsigned char mData); void TM1637_writeData(unsigned char addr, unsigned char mData); void time_set(char hour, char min); void time_display(); void timer0_init(); void setZero(); void delay_140us(); void delayus(uint us); uchar BCD2HEX(uchar val) //BCD??×a???aByte { uchar temp; temp = val & 0x0f; val >>= 4; val &= 0x0f; val *= 10; temp = val; return temp; } uchar HEX2BCD(uchar val) //B??×a???aBCD?? { return (((val % 100) / 10) << 4) | (val % 10); } void delayus(uint us) { while(us--); } void Start_I2C() { SDA = 1; delayus(1); SCL = 1; delayus(5); SDA = 0; delayus(5); SCL = 0; delayus(2); } void Stop_I2C() { SDA = 0; delayus(1); SCL = 1; delayus(5); SDA = 1; delayus(4); } void SendByte(uchar c) { uchar BitCnt; for(BitCnt = 0;BitCnt < 8;BitCnt ) { if((c << BitCnt) & 0x80) SDA = 1; else SDA = 0; delayus(1); SCL = 1; delayus(5); SCL = 0; } delayus(2); SDA = 1; delayus(2); SCL = 1; delayus(3); if(SDA == 1) ack = 0; else ack = 1; SCL = 0; delayus(2); } uchar RcvByte() { uchar retc; uchar BitCnt; retc = 0; SDA = 1; for(BitCnt = 0;BitCnt < 8;BitCnt ) { delayus(1); SCL = 0; delayus(5); SCL = 1; delayus(3); retc = retc << 1; if(SDA == 1) retc = retc 1; delayus(2); } SCL = 0; delayus(2); return(retc); } void Ack_I2C(bit a) { if(a == 0) SDA = 0; else SDA = 1; delayus(3); SCL = 1; delayus(5); SCL = 0; delayus(2); } uchar write_byte(uchar addr, uchar write_data) { Start_I2C(); SendByte(DS3231_WriteAddress); if (ack == 0) return 0; SendByte(addr); if (ack == 0) return 0; SendByte(write_data); if (ack == 0) return 0; Stop_I2C(); delayus(10); return 1; } uchar read_current() { uchar read_data; Start_I2C(); SendByte(DS3231_ReadAddress); if(ack == 0) return(0); read_data = RcvByte(); Ack_I2C(1); Stop_I2C(); return read_data; } uchar read_random(uchar random_addr) { Start_I2C(); SendByte(DS3231_WriteAddress); if(ack == 0) return(0); SendByte(random_addr); if(ack == 0) return(0); return(read_current()); } /******************************************************************** * ??3? : delay_140us() * 1|?ü : ?óê± * ê?è? : void * ê?3? : ?T **************************************************************/ void delay_140us() { int i; for(i = 0; i < 20; i ) _nop_(); } /******************************************************************** * ??3? : void ModifyTime(uchar hou,uchar min,uchar sec) * 1|?ü : DT??ê±??£¨è?£? * ê?è? : void * ê?3? : ?T **************************************************************/ void ModifyTime(uchar hou, uchar min,uchar sec) { uchar temp = 0; temp = HEX2BCD(hou); write_byte(DS3231_HOUR, temp); //éè??ê± temp = HEX2BCD(min); write_byte(DS3231_MINUTE, temp); //éè??·? temp = HEX2BCD(sec); write_byte(DS3231_SECOND, temp); //éè???? } /******************************************************************** * ??3? : void ModifyTime(uchar hou,uchar min,uchar sec) * 1|?ü : DT??ê±??£¨ê±£? * ê?è? : void * ê?3? : ?T **************************************************************/ void ModifyHour(hour) { uchar temp = HEX2BCD(hour); write_byte(DS3231_HOUR, temp); //éè??ê± } /******************************************************************** * ??3? : void Modifymin(minute) * 1|?ü : DT??ê±??£¨·?£? * ê?è? : void * ê?3? : ?T **************************************************************/ void ModifyMinute(minute) { uchar temp = HEX2BCD(minute); write_byte(DS3231_MINUTE, temp); //éè??·? } /******************************************************************** * ??3? : void ModifyTime(uchar hou,uchar min,uchar sec) * 1|?ü : DT??ê±??£¨??£? * ê?è? : void * ê?3? : ?T **************************************************************/ void ModifySecond(second) { uchar temp = HEX2BCD(second); write_byte(DS3231_SECOND, temp); //éè???? } /******************************************************************** * ??3? : void init() * 1|?ü : 3ìDò3?ê??ˉ * ê?è? : void * ê?3? : ?T **************************************************************/ void init() { TMOD = 0x02; TH0 = 0x06; TL0 = 0x06; TR0 = 1; ET0 = 1; EA = 1; } /******************************************************************** * ??3? : void setZero() * 1|?ü : è?2???á?£??ùóDμ???2?áá * ê?è? : void * ê?3? : ?T **************************************************************/ void setZero() { flag1 = 0; flag2 = 0; flag3 = 0; flag4 = 0; flag5 = 0; flag6 = 0; flag7 = 0; flag8 = 0; flag9 = 0; flag10 = 0; flag11 = 0; flag12 = 0; } /******************************************************************** * ??3? : void light(uint number, uint level) * 1|?ü : ???¨μ?áá * ê?è? : uint number, uint level * ê?3? : ?T **************************************************************/ void light(uint number, uint level) { switch(number) { case 0: flag12 = level; break; case 1: flag1 = level; break; case 2: flag2 = level; break; case 3: flag3 = level; break; case 4: flag4 = level; break; case 5: flag5 = level; break; case 6: flag6 = level; break; case 7: flag7 = level; break; case 8: flag8 = level; break; case 9: flag9 = level; break; case 10: flag10 = level; break; case 11: flag11 = level; break; default:break; } } /******************************************************************** * ??3? : void computer_and_display_time() * 1|?ü : ??ê?ê±?? * ê?è? : void * ê?3? : ?T **************************************************************/ void compute_and_display_time() { //????ê±?? uchar Htemp1, Htemp2, Mtemp1, Mtemp2, Stemp1, Stemp2; Htemp1 = read_random(DS3231_HOUR); //??è?ê± Htemp1&=0x3f; Htemp2 = BCD2HEX(Htemp1); Mtemp1 = read_random(DS3231_MINUTE); //??è?·? Mtemp2 = BCD2HEX(Mtemp1); Stemp1 = read_random(DS3231_SECOND); //??è??? Stemp2 = BCD2HEX(Stemp1); hour = Htemp2 % 12; minute = Mtemp2 / 5; second = Stemp2 / 5; //update hour if(hour != lastHour){ light(hour, 40); } //update minute if(minute != lastMinute){ if(minute != hour) light(minute, 30); } //update second if(second != lastSecond){ if(second != hour && second != minute) light(second, 1); } if(lastHour != hour && lastHour != minute && lastHour != second) light(lastHour, 0); if(lastMinute != hour && lastMinute != minute && lastMinute != second) light(lastMinute, 0); if(lastSecond != hour && lastSecond != minute && lastSecond != second) light(lastSecond, 0); lastHour = hour; lastMinute = minute; lastSecond = second; } /******************************************************************** * ??3? : timer0() * 1|?ü : PWMμ÷??????±è,0~10, áá?èμY?? * ê?è? : void * ê?3? : ?T **************************************************************/ void timer0() interrupt 1 { static unsigned int count; count ; if(count == 50) { count = 0; c1 = 1; c2 = 1; c3 = 1; c4 = 1; c5 = 1; c6 = 1; c7 = 1; c8 = 1; c9 = 1; c10 = 1; c11 = 1; c12 = 1; } if(flag12 != 0 && flag12 == count) c12 = 0; else if(flag1 != 0 && flag1 == count) c1 = 0; else if(flag2 != 0 && flag2 == count) c2 = 0; else if(flag3 != 0 && flag3 == count) c3 = 0; else if(flag4 != 0 && flag4 == count) c4 = 0; else if(flag5 != 0 && flag5 == count) c5 = 0; else if(flag6 != 0 && flag6 == count) c6 = 0; else if(flag7 != 0 && flag7 == count) c7 = 0; else if(flag8 != 0 && flag8 == count) c8 = 0; else if(flag9 != 0 && flag9 == count) c9 = 0; else if(flag10 != 0 && flag10 == count) c10 = 0; else if(flag11 != 0 && flag11 == count) c11 = 0; } /*********************************************************** ***** ***** ?÷oˉêy ***** ***********************************************************/ void main() { init(); setZero(); // ModifyHour(16); // ModifyMinute(24); while(1) { compute_and_display_time(); } }5.焊接:(從代碼里可以看出怎么接線,所以就不再贅述了。)
拆了個舊風扇,搞定外殼。有沒有外殼其實無所謂。
6.半成品:
7.成品圖:(沒有工具制作合適的外殼所以只能PS假裝一下)
相關推薦: