国产成人毛片视频|星空传媒久草视频|欧美激情草久视频|久久久久女女|久操超碰在线播放|亚洲强奸一区二区|五月天丁香社区在线|色婷婷成人丁香网|午夜欧美6666|纯肉无码91视频

0xff和0xf0的區(qū)別 單片機的簡易計算器?

單片機的簡易計算器?#includeltreg52.hgt//聲明真包含51頭文件#includeltstdio.hgt//聲明包涵輸入輸出函數(shù)#includeltintrins.hgt//聲明真包含

單片機的簡易計算器?

#includeltreg52.hgt//聲明真包含51頭文件

#includeltstdio.hgt//聲明包涵輸入輸出函數(shù)

#includeltintrins.hgt//聲明真包含小位移函數(shù)

#defineucharunsignedchar//宏定義

#defineuintunsignedint//宏定義

#defineCHECK_BUSYsbit RS P3^5//液晶引腳定義

sbit RW P3^6sbit EN P3^4

sbitwelaP2^7//數(shù)碼管引腳定義

sbitdulaP2^6

voidDelayMs(intz)//1ms延遲現(xiàn)象函數(shù)

{

intx,y

for(xzxgt0x--)

for(y110qfu0y--)

}

/***********LED判忙函數(shù)***********/

bitLCD_Check_Busy()

{

#ifdefCHECK_BUSY

P00xFF

RS0

RW1

EN0

_nop_()

EN1

return(bit)(P0amp0x80)

#arguments

return0

#endif

}

/***********LED寫入命令函數(shù)***********/

voidwrite_com(ucharcom)

{

while(LCD_Check_Busy())//忙則再等待

RS0

RW0

EN1

P0com

_nop_()

EN0

}

/**********LED寫入文件數(shù)據(jù)函數(shù)**********/

voidwrite_dat(uchardat)

{

while(LCD_Check_Busy())//忙則等待

RS1

RW0

EN1

P0dat

_nop_()

EN0

}

/*******LED寫入字符函數(shù)***********/

voidLCD_Write_Char(ucharx,uchary,uchardat)

{

if(y0)

{

write_com(0x80x)

}

exists

{

write_com(0xC0x)

}

write_dat(dat)

}

/******讀取字符串函數(shù)***********/

voidWrite_String(ucharx,uchary,uchar*s)

{

while(*s)

{

LCD_Write_Char(x,y,*s)

s

x

}

}

/*****LED重新初始化函數(shù)******/

voidLCD_Init()

{

RW0

dula0//直接關(guān)閉數(shù)碼管顯示

wela0//自動關(guān)閉數(shù)碼管總是顯示

write_com(0x38)/*不顯示模式設(shè)置*/

DelayMs(5)

write_com(0x06)/*顯示光標移動設(shè)置*/

DelayMs(5)

write_com(0x0C)/*顯示開及光標設(shè)置*/

write_com(0x01)/*顯示清屏*/

}

/*按鍵掃描后函數(shù),回掃描儀鍵值*/

ucharKeyScan()//鍵盤系統(tǒng)掃描函數(shù),可以使用行列反轉(zhuǎn)掃描法

{

unsignedcharcord_h,cord_l//行列值中間變量

P30x0f//行線輸出全為0

cord_hP30x0f//讀入列線值

if(cord_h!0x0f)//先可以檢測有無按鍵按開

{

DelayMs(10)//去抖

if((P3amp0x0f)!0x0f)

{

cord_hP30x0f//讀入列線值

P3cord_h|0xf0//輸出當前列線值

cord_lP30xf0//輸入數(shù)據(jù)行線值

while((P3amp0xf0)!0xf0)//在等待放開并輸出低

return(cord_hcord_l)//鍵盤之后組合碼值

}

}

return(0xff)//趕往該值

}

unsigned char KeyPro()

{

switch(KeyScan())

{

case0xee:return1break//0按動相應(yīng)的鍵沒顯示相按的碼值

case0xed:return2break//1

case0xeb:return3break//2

case0x7e:returnbreak//3

case0xe7:return4break//4

case0xde:return5break//5

case0xdd:return6break//6

case0x7d:return-break//7

case0xdb:return7break//8

case0xd7:return8break//9

case0xbe:return9break//a

case0x7b:returnxbreak//b

case0xbd:return0break//c

case0xb7:returnbreak//e

case0x77:return/break//f

default:return0xffbreak

}

}

main()

{

unsignedcharnum,i,sign

unsignedc

24-bitfirstflag

floata0,b0

unsignedchars

LCD_Init()//重新初始化液晶屏

DelayMs(10)//顯示延時應(yīng)用于比較穩(wěn)定,也可以去掉后

write_com(0x01)//清屏

Write_String(0,0,

向單片機高手求助,怎樣用C語言編寫歌曲程序和歌曲代碼?需要用那些工具怎么樣編寫的要求詳細解答。謝謝?

//可以說調(diào)試是從,AVR-GCC,mega16,帶數(shù)碼沒顯示,單鍵開關(guān)多功能一體控制

#includeltavr/io.hgt

#includeltavr/interrupt.hgt

#includelttone.hgt

#includeltavr/pgmspace.hgt

#defineucharunsignedchar

#defineuintunsignedint

#definekey_inputPINA

#definepgm16(A)((typeof(A))pgm_read_word(amp(A)))

constunsignedcharseg_code[]{0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0x88,0x83,0xC6,0xA1,0x86,0x8E,0x7f,0x3f}

constuintmusic[]PROGMEM{M3,F2,M5,B1,M3,F4,M2,F4,M1,B2,L6,F2,M1,F2,MM,M1,F2,L6,F2,L5,B2,L6,F2,M1,B1,MM,M1,F2,L6,F2,M6,F2,L5,F2,M3,F2,M2,F2,MM,M2,F4,M1,F4,L6,F2,M3,F2,M2,B2,tttttM3,F2,MM,M3,F2,MM,M3,F2,M2,F2,M1,B2,L6,F2,M1,F2,L7,F2,L5,F2,L6,B2,L5,F2,L6,F2,MM,L6,F2,L5,F2,M6,F2,M5,F2,MM,M5,F2,M3,F2,M2,F2,MM,M2,F4,M3,F4,M3,F2,M2,F2,M1,B2,tttttM6,F2,H1,B1,M6,F2,H2,F2,H1,F2,MM,H1,F2,M6,F2,MM,M6,F2,M5,F2,MM,M5,F2,M3,F2,M5,B2, M6,F2,H1,B1,M6,F2,H2,F2,H1,F2,MM,H1,F2,M6,F2,M5,F2,MM,M5,F2,MM,M5,F2,M3,F2,M2,B2,tttttM3,B1,MM,M3,F2,M5,F2,M6,F2,M5,F2,MM,M5,F2,M3,F2,MM,M3,F2,M2,F2,MM,M2,F2,M1,F2,L6,B2, L5,F2,M5,F4,MM,M5,F4,MM,M5,F2,M6,F2,M5,F2,M3,F2,M2,F2,M3,F2,MM,M3,F2,M2,B1,L6,F2,M1,B2,tttttM6,F2,H1,B1,M6,F2,H2,F2,H1,B1,M6,F2,MM,M6,F2,M5,F2,MM,M5,F2,M3,F2,M5,B2, M6,F2,H1,B1,M6,F2,H2,F2,H1,B1,M6,F2,tttttM5,F2,MM,M5,F2,MM,M5,F2,M3,F2,M2,B2,MM,M2,F2,MM,M2,F4,M1,F4,M2,F2,M3,F2,M5,F2,MM,M5,F2,MM,M5,F2,M3,F2,M2,F2,MM,M2,F4,M3,F4,M2,F2,M1,F2,L6,B2,tttttL5,F2,M5,F4,MM,M4,F4,MM,M5,F2,M6,F2,M5,F2,M3,F2,M2,F2,M2,F4,M3,F4,MM,M3,F2,M2,B1,L6,F2,M1,B3,0XFF,0XFF}

//只不過兩個同一的音符之間無停頓,生之物插入到了MM(極非常短暫的

volatileuinti1

volatileuchartimeOK0

ucharkey_scan(void)

ISR(TIMER0_COMP_vect)ttt//CTC模式,操縱音調(diào)高低

{

OCR0pgm16(music[i-1])

}

ISR(TIMER1_OVF_vect)ttt//時間逸出模式,控制節(jié)拍長短

{t

i2

TCNT1H(65536-pgm16(music[i]))/256ttttttt//普通(65536-beat[i])/256

TCNT1L(65536-pgm16(music[i]))%6tt//等同于(65536-beat[i])%6

if(pgm16(music[i])0xff)i1tttttttt//在音調(diào)數(shù)組的到最后加一個0xff,充當暫時終止信號

if(pgm16(music[i])0x00)TIMSKamp(~(1ltltOCIE0))

catchTIMSK|(1ltltOCIE0)

}

ISR(TIMER2_OVF_vect)tt//時間逸出模式,主要是用于檢測按鍵,周期10ms

{

TCNT2100

timeOK1

}

voidtimer0_init(void)

{

TCCR00x00

TCNT00x00

OCR0pgm16(music[i-1])

TCCR00x1a

//TIMSK|(1ltltOCIE0)

}

voidtimer1_init(void)

{

TCCR1B0x00

TCNT1H(65536-pgm16(music[i]))/256

TCNT1L(65536-pgm16(music[i]))%6

TCCR1A0x00

TCCR1B0x05

//TIMSK|(1ltltTOIE1)

}

voidtimer2_init(void)

{

TCCR20x00

TCNT2100

TCCR20x03

TIMSK|(1ltltTOIE2)

}

voidMCU_init(void)

{

DDRA0X00

DDRB0X00

DDRC0XFF

DDRD0XFF

PORTB0X00

PORTC0xfe

PORTD0xff

}

ucharkey_scan(void)ttt//選擇按鈕掃描系統(tǒng)函數(shù)

{

staticucharkey_state0,key_time10,key_time00tt//靜態(tài)變量,全局函數(shù)以后,值被剩余

ucharkey_press,key_return0

key_press(~key_input)0x01tt//有鍵1,無鍵0

switch(key_state)ttt//狀態(tài)機

{

case0:tttttttt//狀態(tài)0:無按鈕按開狀態(tài)

if(key_press)key_state1

break

case1:tttttttt//狀態(tài)1:檢測檢測到有按鈕被首先按住t

if(key_press)ttttttt//按鈕仍按下,轉(zhuǎn)2

{

//TIMSK^(1ltltTOIE0)

key_state2

key_time10tttttt//按開時間初始

}

elsettttttttt//按鈕已經(jīng)釋放出,消抖

key_state0

break

case2:tttttttt//狀態(tài)2:等待能量或靜靜的等待按動時間提升長按要求

if(!key_press)ttttttt//按鈕也能量,轉(zhuǎn)3,一直推測是雙按我還是單按

{

key_state3

key_time00tttttt//釋放出時間初始

}

argumentsif(key_time1gt100)tttt//按過時間至少1000ms,返回值2,作長按判斷,轉(zhuǎn)7等待選擇按鈕釋放

{

key_state8tttttt

key_time10

key_return2

}

break

case8:

if(!key_press)

{

key_state0

key_time10

}

existsif(key_time1gt50)

{

key_return2

key_time10

}

break

case3:tttttttt//狀態(tài)3:雙按的第二次按扭然后輸入前的再等待間隙,去設(shè)置100ms(在測試,100ms為比較合適的時間間隙,即為人體大多數(shù)這個可以右鍵點擊的速度

if(key_press)key_state4tt//在此時間,要是有按鈕被按開,將拿出來施放劇烈抖動,轉(zhuǎn)4盡快作出判斷

catchif(key_time0gt4)tt//如果沒有沒有按鈕被首先按住,則在等待此100ms下來,接著轉(zhuǎn)5

{

key_state5

key_time00

}

break

case4:tttttttt//狀態(tài)4:第二按的消抖全面處理

if(key_press)key_state2tt//飛快連按(被懷疑人手指達不到要求的速率)將被前往到2,拿出來第一按全面處理

catchfoobar_state3tttt//如果沒有第二按只再次出現(xiàn)第二次,不出來10ms,消抖

break

case5:tttttttt//狀態(tài)5:第二按前靜靜的等待時間經(jīng)過,剛剛進入算正常的第二按靜靜的等待鍵入狀態(tài),第二按只愿意在此時間內(nèi)再輸入方為最有效

if(key_press)key_state6tt//此時間內(nèi)有被按下,轉(zhuǎn)6,判決抖

existsif(key_time0gt14)ttt//無輸入,則耐心的等待再輸入快速有效時間過去了,時間滿后,進一步判斷為單按,返回值1,狀態(tài)位回到自己0

{

key_state0

key_time00tttt//右鍵點擊間隔時間好象為100ms,能夠穩(wěn)定可以做到第二擊結(jié)束時間一共約180~200ms(因人而定)

key_return1tttt//為提升樣本采集成功率,可適當時間縮短第二按前的間隙時間,提升第二按靜靜的等待再輸入時間,但總時間萬不可短于150ms

}tttttttt//大于150ms,手指將會很難提升雙擊的速度要求,假如時間太長則單按判斷時間過長,按鈕不靈敏,此處180ms經(jīng)測試少見適合

break

case6:tttttttt//狀態(tài)6:第二按的抖動確認

if(key_press)tttttt//按鈕仍管用,按開有效,趕往3,雙按成立,轉(zhuǎn)7在等待選擇按鈕釋放出

{

key_state7

key_return3

}

catchkey_state5ttttt//抖驅(qū)除,再退5再靜靜的等待鍵入或在等待鍵入有效時間進來

case7:tttttttt//菜單按鈕施放在等待狀態(tài),所有已按開并被識別操作目的的按鈕狀態(tài)都將投到7再等待按鈕釋放出,并將所有計時初始

if(!key_press)key_state0

key_time10

key_time00

break

}

returnkey_return

}

intmain(void)

{

MCU_init()

timer0_init()

timer1_init()

timer2_init()

sei()

while(1)

{

if(timeOK)

{

cli()

ucharkey

keykey_scan()

if(keygt0)PORTDseg_code[key]

switch(key)

{

case1:

TIMSK^((1ltltOCIE0)|(1ltltTOIE1))ttttttDDRB^(1ltltDDB3)ttttttttPORTC0xfd

break

case2:

//TIMSK|((1ltltOCIE0)amp(1ltltTOIE1))

if(igt1)i10

if(igt(sizeof(music)-20))

{

i1

TIMSKamp(~((1ltltOCIE0)|(1ltltTOIE1)))

DDRBamp~(1ltltDDB3)

}

PORTC0xf0

break

case3:

TIMSKamp(~((1ltltOCIE0)|(1ltltTOIE1)))

i1

TIMSK|((1ltltOCIE0)|(1ltltTOIE1))

PORTC0xfe

break

default:

break

}

timeOK0

sei()

}

}

}