自行车简易数字里程表设计论文

发布时间 : 星期三 文章自行车简易数字里程表设计论文更新完毕开始阅读

}

write_sfm2(1,0,i); }

void init_ds1302_io() {

rst = 0; //第一次读写数据时要把IO品拿低 clk = 0; io = 0; }

/*************定时器0初始化程序***************/

void init_1602_ds1302() {

// write_sfm2_ds1302(2,3,nian); // write_sfm2_ds1302(2,6,yue); // write_sfm2_ds1302(2,9,ri); write_sfm2_ds1302(1,11,shi); write_sfm2_ds1302(1,14,fen); // write_sfm2_ds1302(1,14,miao); // write_sfm1(1,14,week); }

/***********外部中断0初始化程序****************/ void init_int0() {

EX0=1; //允许外部中断0中断

EA=1; //开总中断 IT0 = 1; //外部中断0负跳变中断 }

/*************定时器0初始化程序***************/

void time_init() //定时器0初始化程序 {

EA = 1; //开总中断 TMOD = 0X11; //定时器0、工作方式1

ET0 = 1; //开定时器0中断

TR0 = 1; //允许定时器0定时

ET1 = 1; //开定时器1中断

TR1 = 1; //允许定时器1定时 }

/***********计算速度函数**************/

void menu_dis() //计算速度函数 {

static uchar value; if(menu_1 == 0) {

if(flag_1s == 1) {

flag_1s = 0; if(flag_en == 0) {

value ++;

if(value >= 3) //2秒

{

speed_km = 0; //速度为0

shudu = (uint)speed_km;

value = 0;

} }

if((flag_en == 1)) {

value = 0; flag_en = 0; //1s = 1 / 1000000us; // 1m/s=0.001km除以1/3600h=3.6km/h

f_hz = (t2_num *

65536.0 + TH11 * 256 + TL11) / 1000000 ; //算出来就是秒 t2_num = 0; //把变量清零 TH11 = 0; TL11 = 0; speed_m = f_hz * zhijing * 3.14 ; //算出来的是m/s juli_z = (juli_z + (uint)speed_m) ; //总路程m speed_km = speed_m * 3.6 ; //(带个小数点) km/s shudu = (uint)speed_km; zong_lc += speed_m; } write_sfm2(1,3,shudu); write_sfm4(2,3,juli_z); } } } /********************独立按键程序*****************/ uchar key_can; //按键值 void key() //独立按键程序 { static uchar key_new; key_can = 20; //按键值还原 P3 |= 0x78; //对应的按键IO口输出为1 if((P3 & 0x78) != 0x78) //按键按下 { delay_1ms(1); //按键消抖动 if(((P3 & 0x78) != 0x78) && (key_new == 1)) { //确认是按键按下 key_new = 0; switch(P3 & 0x78) { case 0x70: key_can = 4; break; //得到按键值 case 0x68: key_can = 3; break; //得到按键值 case 0x58: key_can = 2; break; //得到按键值 case 0x38: key_can = 1; break; //得到按键值 } // write_sfm2(1,0,key_can); //显示按键值 } } else key_new = 1; } /**********************设置函数************************/ void key_with() { if(key_can == 1) //设置键 { menu_1++; if(menu_1 == 1) //设置时间 { menu_2 = 1; write_string(1,0,\\ write_string(2,0,\- \ } if(menu_1 == 2) //设置报警速度 { menu_2 = 1; write_string(1,0,\

\ shi = (shi & 0xf0) write_string(2,0,\+ 0x10; \ } menu_2 = 1; if(menu_1 > 2) //回到正常显示 { menu_1 = 0; write_guanbiao(1,2,0); //关闭光标 init_1602(); //1602初始化 //初始化液晶显示 } } if(key_can == 2) //选择键 { if(menu_1 == 1) //设置时间 { menu_2 ++; if(menu_2 > 7) menu_2 = 1; } if(menu_1 == 2) //设置 { menu_2 ++; if(menu_2 > 2) menu_2 = 1; } } if(menu_1 == 1) { if(menu_2 == 1) //设置时 { if(key_can == 3) //加 { shi+=0x01; if((shi & 0x0f) >= 0x0a) if(shi >= 0x24) shi = 0; } if(key_can == 4) //减 { if(shi == 0x00) shi = 0x24; if((shi & 0x0f) == 0x00) shi = (shi | 0x0a) - 0x10; shi -- ; } } if(menu_2 == 2) //设置分 { if(key_can == 3) //加 { fen+=0x01; if((fen & 0x0f) >= 0x0a) fen = (fen & 0xf0) + 0x10; if(fen >= 0x60) fen = 0; } if(key_can == 4) //减 { if(fen == 0x00) fen = 0x5a; if((fen & 0x0f) == 0x00) fen = (fen | 0x0a) - 0x10; fen -- ; } } if(menu_2 == 3) //设置秒 {

if(key_can == 3) //加 {

miao+=0x01;

if((miao & 0x0f) >= 0x0a)

miao = (miao & 0xf0) + 0x10;

if(miao >= 0x60) miao = 0; }

if(key_can == 4) //减

{

if(miao == 0x00) miao = 0x5a;

if((miao & 0x0f) == 0x00)

miao = (miao | 0x0a) - 0x10;

miao -- ; } }

if(menu_2 == 4) //设置星期

{

if(key_can == 3) //加 {

week+=0x01;

if((week & 0x0f) >= 0x0a)

week = (week & 0xf0) + 0x10;

if(week >= 0x08) week = 1; }

if(key_can == 4) //减

{

if(week == 0x01) week = 0x08;

if((week & 0x0f) == 0x00)

week = (week | 0x0a) - 0x10; week -- ; } }

if(menu_2 == 5) //设置年

{

if(key_can == 3) //加 {

nian+=0x01;

if((nian & 0x0f) >= 0x0a)

nian = (nian & 0xf0) + 0x10;

if(nian >= 0x9a) nian = 1; }

if(key_can == 4) //减

{

if(nian == 0x01) nian = 0x9a;

if((nian & 0x0f) == 0x00)

nian = (nian | 0x0a) - 0x10;

nian -- ; } }

if(menu_2 == 6) //设置月

{

if(key_can == 3) //加 {

yue+=0x01;

if((yue & 0x0f) >= 0x0a)

yue = (yue & 0xf0) + 0x10;

if(yue >= 0x13) yue = 1; }

if(key_can == 4) //减

{

联系合同范文客服:xxxxx#qq.com(#替换为@)