当前位置:首页 > TAG信息列表 > 0xff和0xf0的区别单片机的简易计算器?介绍

0xff和0xf0的区别单片机的简易计算器?介绍

0xff和0xf0的区别 单片机的简易计算器?

单片机的简易计算器?

#includeltreg52.hgt//声明真包含51头文件

#includeltstdio.hgt//声明包涵输入输出函数

#includeltintrins.hgt//声明真包含小位移函数

0xff和0xf0的区别 单片机的简易计算器?

#defineucharunsignedchar//宏定义

#defineuintunsignedint//宏定义

#definecheck_busysbitrsp3^5//液晶引脚定义

sbitrwp3^6sbitenp3^4

sbitwelap2^7//数码管引脚定义

sbitdulap2^6

voiddelayms(intz)//1ms延迟现象函数

{

intx,y

for(xzxgt0x--)

for(y110qfu0y--)

}

/***********led判忙函数***********/

bitlcd_check_busy()

{

#ifdefcheck_busy

p00xff

rs0

rw1

en0

_nop_()

en1

return(bit)(p0amp0x80)

#arguments

return0

#endif

}

/***********led写入命令函数***********/

voidwrite_com(ucharcom)

{

while(lcd_check_busy())//忙则再等待

rs0

rw0

en1

p0com

_nop_()

en0

}

/**********led写入文件数据函数**********/

voidwrite_dat(uchardat)

{

while(lcd_check_busy())//忙则等待

rs1

rw0

en1

p0dat

_nop_()

en0

}

/*******led写入字符函数***********/

voidlcd_write_char(ucharx,uchary,uchardat)

{

if(y0)

{

write_com(0x80x)

}

exists

{

write_com(0xc0x)

}

write_dat(dat)

}

/******读取字符串函数***********/

voidwrite_string(ucharx,uchary,uchar*s)

{

while(*s)

{

lcd_write_char(x,y,*s)

s

x

}

}

/*****led重新初始化函数******/

voidlcd_init()

{

rw0

dula0//直接关闭数码管显示

wela0//自动关闭数码管总是显示

write_com(0x38)/*不显示模式设置*/

delayms(5)

write_com(0x06)/*显示光标移动设置*/

delayms(5)

write_com(0x0c)/*显示开及光标设置*/

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

}

/*按键扫描后函数,回扫描仪键值*/

ucharkeyscan()//键盘系统扫描函数,可以使用行列反转扫描法

{

unsignedcharcord_h,cord_l//行列值中间变量

p30x0f//行线输出全为0

cord_hp30x0f//读入列线值

if(cord_h!0x0f)//先可以检测有无按键按开

{

delayms(10)//去抖

if((p3amp0x0f)!0x0f)

{

cord_hp30x0f//读入列线值

p3cord_h|0xf0//输出当前列线值

cord_lp30xf0//输入数据行线值

while((p3amp0xf0)!0xf0)//在等待放开并输出低

return(cord_hcord_l)//键盘之后组合码值

}

}

return(0xff)//赶往该值

}

unsignedcharkeypro()

{

switch(keyscan())

{

case0xee:return1break//0按动相应的键没显示相按的码值

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)//显示延时应用于比较稳定,也可以去掉后

write_com(0x01)//清屏

write_string(0,0,

向单片机高手求助,怎样用c语言编写歌曲程序和歌曲代码?需要用那些工具怎么样编写的要求详细解答。谢谢?

//可以说调试是从,avr-gcc,mega16,带数码没显示,单键开关多功能一体控制

#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模式,操纵音调高低

{

ocr0pgm16(music[i-1])

}

isr(timer1_ovf_vect)ttt//时间逸出模式,控制节拍长短

{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//在音调数组的到最后加一个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//选择按钮扫描系统函数

{

staticucharkey_state0,key_time10,key_time00tt//静态变量,全局函数以后,值被剩余

ucharkey_press,key_return0

key_press(~key_input)0x01tt//有键1,无键0

switch(key_state)ttt//状态机

{

case0:tttttttt//状态0:无按钮按开状态

if(key_press)key_state1

break

case1:tttttttt//状态1:检测检测到有按钮被首先按住t

if(key_press)ttttttt//按钮仍按下,转2

{

//timsk^(1ltlttoie0)

key_state2

key_time10tttttt//按开时间初始

}

elsettttttttt//按钮已经释放出,消抖

key_state0

break

case2:tttttttt//状态2:等待能量或静静的等待按动时间提升长按要求

if(!key_press)ttttttt//按钮也能量,转3,一直推测是双按我还是单按

{

key_state3

key_time00tttttt//释放出时间初始

}

argumentsif(key_time1gt100)tttt//按过时间至少1000ms,返回值2,作长按判断,转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//状态3:双按的第二次按扭然后输入前的再等待间隙,去设置100ms(在测试,100ms为比较合适的时间间隙,即为人体大多数这个可以右键点击的速度

if(key_press)key_state4tt//在此时间,要是有按钮被按开,将拿出来施放剧烈抖动,转4尽快作出判断

catchif(key_time0gt4)tt//如果没有没有按钮被首先按住,则在等待此100ms下来,接着转5

{

key_state5

key_time00

}

break

case4:tttttttt//状态4:第二按的消抖全面处理

if(key_press)key_state2tt//飞快连按(被怀疑人手指达不到要求的速率)将被前往到2,拿出来第一按全面处理

catchfoobar_state3tttt//如果没有第二按只再次出现第二次,不出来10ms,消抖

break

case5:tttttttt//状态5:第二按前静静的等待时间经过,刚刚进入算正常的第二按静静的等待键入状态,第二按只愿意在此时间内再输入方为最有效

if(key_press)key_state6tt//此时间内有被按下,转6,判决抖

existsif(key_time0gt14)ttt//无输入,则耐心的等待再输入快速有效时间过去了,时间满后,进一步判断为单按,返回值1,状态位回到自己0

{

key_state0

key_time00tttt//右键点击间隔时间好象为100ms,能够稳定可以做到第二击结束时间一共约180~200ms(因人而定)

key_return1tttt//为提升样本采集成功率,可适当时间缩短第二按前的间隙时间,提升第二按静静的等待再输入时间,但总时间万不可短于150ms

}tttttttt//大于150ms,手指将会很难提升双击的速度要求,假如时间太长则单按判断时间过长,按钮不灵敏,此处180ms经测试少见适合

break

case6:tttttttt//状态6:第二按的抖动确认

if(key_press)tttttt//按钮仍管用,按开有效,赶往3,双按成立,转7在等待选择按钮释放出

{

key_state7

key_return3

}

catchkey_state5ttttt//抖驱除,再退5再静静的等待键入或在等待键入有效时间进来

case7:tttttttt//菜单按钮施放在等待状态,所有已按开并被识别操作目的的按钮状态都将投到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()

}

}

}

key函数时间press


收金网 奥丁号

  • 关注微信关注微信

猜你喜欢

热门标签

oppo怎么才能有悬浮球 苹果手机新消息通知在哪里设置 索尼手机app不推送消息 苹果标志设计图纸有尺寸的苹果标志设计图纸尺寸详解 支付宝怎么看好友完整邮箱 iphone人脸识别有后台吗介绍 3dmax目标平行光灯光怎么打 mw313r路由器设置教程介绍 lightning数据线拆解苹果正品数据线插上手机什么样的? 电视盒子如何看电视直播 文字中间间隔大小怎么调excelexcel表格里文字行距怎么调整? devil ps怎么删除钢笔工具画的线条ps钢笔工具如何断开直线? 微信电脑版编辑消息怎么换行为什么微信打字不能换行? 微信插件在哪 手机传输大文件到电脑最简单方法怎样将大量手机照片通过微信传送到电脑? 华为手机扫码识别商品价格华为畅享20plus识别不了条码? 给文件夹添加标签怎么弄食品标签怎么制作?介绍 word中如何更改脚注编号格式WORD2010中如何快速插入并更改脚注? 怎么快速把图片方向改变在个人拍摄中如何修改拍摄背景? 个人门店怎么用微信收款微信二维码收款商业版怎么查找? tp-link路由器恢复出厂设置后怎么设置 win7电脑屏幕左右黑边怎么解决 怎么知道自己电脑是不是中毒了电脑卡顿的时候怎么查看哪些软件造成的? 华为mate50戴口罩怎么面容解锁 微信怎么关掉显示电话号码 苹果一张图片怎么变九宫格苹果14相册里没有九宫格? 计算机c语言写编程常写的英语单词c开头的所有编程软件? 三星手机我的文件在哪里找三星s20ultra怎样找到隐藏文件? 苹果手机设置锁屏密码但没生效了

微信公众号