车辆测速系统程序设计

附录 系统程序

#include

#include

#define uchar unsigned char

#define uint unsigned int

#define LCD_data P0 //数据口

#define delay_msNOP(); {_nop_();_nop_();_nop_();_nop_();};

sbit lcdrs=P2^7;

sbit lcdrw=P2^6;

sbit lcden=P2^5;

sbit s1=P1^0;

sbit s2=P1^1;

sbit s3=P1^2;

sbit s4=P1^3;

sbit ledr=P2^4;

sbit ledg=P2^3;

sbit beep=P2^0;

int t0,s1num,t1,shur;

uchar code str1[]="speed:000km/h";

uchar code str2[]="max:000km/h";

uint tmp1,pinlv;

void delay_ms(uint z)

{

uint x,y;

for(x=z;x>0;x--)

for(y=123;y>0;y--); //延时函数 //定义IO 口

}

void Check_Busy()

{

lcdrs=0;

lcdrw=1;

lcden=1;

P0=0xff;

while((P0&0x80)==0x80);//忙则等待 lcden=0;

}

void write_com(uchar cmd) //写命令 {

Check_Busy(); //LCD1602忙检测

lcdrs = 0;

lcdrw = 0;

LCD_data = cmd; lcden = 1;

delay_msNOP();

lcden = 0;

}

void write_date(uchar dat) //写数据 {

Check_Busy();

lcdrs = 1;

lcdrw = 0;

LCD_data = dat;

lcden = 1; delay_msNOP();

lcden = 0;

}

void write_str(uchar *p)

{

}

void diyihang(uint z)

{

}

void dierhang(uint z)

{

}

void init_1602( )

{

delay_ms(40); //液晶初始化 z--; write_com(0x80+0x40+z); //写第二行 z--; write_com(0x80+z); //写第一行 while(*p) write_date(*p++);

write_com(0x38); //基本指令操作 delay_ms(5);

write_com(0x38); //基本指令操作 delay_ms(1);

write_com(0x0c); //显示开,关光标 delay_ms(5);

write_com(0x01); //清除LCD 的显示内容

delay_ms(5);

}

void keyscan( )

{

if(s1==0) { delay_ms(10); if(s1==0) { while(!s1); s1num++; TR0=0; if(s1num==1) { } dierhang(9); write_com(0x0f); //s1功能切换键 //按键检测 write_com(0x06); diyihang(3); write_str(str1); dierhang(3); write_str(str2); //游标自动右移,整体画面不移动 if(s1num==2) { } if(s1num==3) { } dierhang(7); dierhang(8);

} } { } s1num=1; dierhang(9); if(s2==0) { } if(s3==0) { //确定键 delay_ms(10); if(s2==0) { } while(!s2); s1num=0; write_com(0x0c); TR0=1; //加键 delay_ms(10); if(s3==0) { while(!s3); if(s1num==1) { } shur++; if(shur>=999)shur=999; write_date('0'+shur%10); dierhang(9);

} } { } if(s1num==3) { } shur+=100; if(shur>=999)shur=999; write_date('0'+shur/100); dierhang(7); shur+=10; if(shur>=999)shur=999 write_date('0'+shur%100/10); dierhang(8); if(s4==0) { //减键 delay_ms(20); if(s4==0) { while(!s4); if(s1num==1) { } if(s1num==2) { shur--; if(shur=

}

} } } if(shur=

void leddisplay()

{

//LED显示函数 if( pinlv>=shur) { } else if(pinlv

void init_time0()

{

}

void main()

{

}

void timer0() interrupt 1

{

TH0=(65536-50000)/256; TL0=(65536-50000)%256; t0++; if(t0==20) { //T0中断子程序 init_1602(); init_time0(); while(1) { } keyscan(); leddisplay(); //主函数 TMOD=0x11; //设置定时器0,1工作模式 TH0=(65536-50000)/256; TL0=(65536-50000)%256; EA=1; //开总中断 //定时器T0初始化 ET0=1;//开T0中断 TR0=1;//启动定时器T0 EX1=1;//开外部中断 IT1=1;//负跳沿触发

pinlv=tmp1;

EX1=0;

diyihang(9);

write_date('0'+pinlv/100); write_date('0'+pinlv%100/10); write_date('0'+pinlv%10); t0=0;

TR0=1;

tmp1=0;

EX1=1;

}

}

void zhongduan1() interrupt 2 {

tmp1++;

}

//INT1中断子程序

附录 系统程序

#include

#include

#define uchar unsigned char

#define uint unsigned int

#define LCD_data P0 //数据口

#define delay_msNOP(); {_nop_();_nop_();_nop_();_nop_();};

sbit lcdrs=P2^7;

sbit lcdrw=P2^6;

sbit lcden=P2^5;

sbit s1=P1^0;

sbit s2=P1^1;

sbit s3=P1^2;

sbit s4=P1^3;

sbit ledr=P2^4;

sbit ledg=P2^3;

sbit beep=P2^0;

int t0,s1num,t1,shur;

uchar code str1[]="speed:000km/h";

uchar code str2[]="max:000km/h";

uint tmp1,pinlv;

void delay_ms(uint z)

{

uint x,y;

for(x=z;x>0;x--)

for(y=123;y>0;y--); //延时函数 //定义IO 口

}

void Check_Busy()

{

lcdrs=0;

lcdrw=1;

lcden=1;

P0=0xff;

while((P0&0x80)==0x80);//忙则等待 lcden=0;

}

void write_com(uchar cmd) //写命令 {

Check_Busy(); //LCD1602忙检测

lcdrs = 0;

lcdrw = 0;

LCD_data = cmd; lcden = 1;

delay_msNOP();

lcden = 0;

}

void write_date(uchar dat) //写数据 {

Check_Busy();

lcdrs = 1;

lcdrw = 0;

LCD_data = dat;

lcden = 1; delay_msNOP();

lcden = 0;

}

void write_str(uchar *p)

{

}

void diyihang(uint z)

{

}

void dierhang(uint z)

{

}

void init_1602( )

{

delay_ms(40); //液晶初始化 z--; write_com(0x80+0x40+z); //写第二行 z--; write_com(0x80+z); //写第一行 while(*p) write_date(*p++);

write_com(0x38); //基本指令操作 delay_ms(5);

write_com(0x38); //基本指令操作 delay_ms(1);

write_com(0x0c); //显示开,关光标 delay_ms(5);

write_com(0x01); //清除LCD 的显示内容

delay_ms(5);

}

void keyscan( )

{

if(s1==0) { delay_ms(10); if(s1==0) { while(!s1); s1num++; TR0=0; if(s1num==1) { } dierhang(9); write_com(0x0f); //s1功能切换键 //按键检测 write_com(0x06); diyihang(3); write_str(str1); dierhang(3); write_str(str2); //游标自动右移,整体画面不移动 if(s1num==2) { } if(s1num==3) { } dierhang(7); dierhang(8);

} } { } s1num=1; dierhang(9); if(s2==0) { } if(s3==0) { //确定键 delay_ms(10); if(s2==0) { } while(!s2); s1num=0; write_com(0x0c); TR0=1; //加键 delay_ms(10); if(s3==0) { while(!s3); if(s1num==1) { } shur++; if(shur>=999)shur=999; write_date('0'+shur%10); dierhang(9);

} } { } if(s1num==3) { } shur+=100; if(shur>=999)shur=999; write_date('0'+shur/100); dierhang(7); shur+=10; if(shur>=999)shur=999 write_date('0'+shur%100/10); dierhang(8); if(s4==0) { //减键 delay_ms(20); if(s4==0) { while(!s4); if(s1num==1) { } if(s1num==2) { shur--; if(shur=

}

} } } if(shur=

void leddisplay()

{

//LED显示函数 if( pinlv>=shur) { } else if(pinlv

void init_time0()

{

}

void main()

{

}

void timer0() interrupt 1

{

TH0=(65536-50000)/256; TL0=(65536-50000)%256; t0++; if(t0==20) { //T0中断子程序 init_1602(); init_time0(); while(1) { } keyscan(); leddisplay(); //主函数 TMOD=0x11; //设置定时器0,1工作模式 TH0=(65536-50000)/256; TL0=(65536-50000)%256; EA=1; //开总中断 //定时器T0初始化 ET0=1;//开T0中断 TR0=1;//启动定时器T0 EX1=1;//开外部中断 IT1=1;//负跳沿触发

pinlv=tmp1;

EX1=0;

diyihang(9);

write_date('0'+pinlv/100); write_date('0'+pinlv%100/10); write_date('0'+pinlv%10); t0=0;

TR0=1;

tmp1=0;

EX1=1;

}

}

void zhongduan1() interrupt 2 {

tmp1++;

}

//INT1中断子程序


相关文章

  • 中致2ZH-15窄波便携式雷达测速仪
  • 中致测速抓拍系统设计方案 北京中航致远科技有限公司 2ZH-15 测速抓拍系统 设计方案 北京中航致远科技有限公司 二〇一四年三月 中致测速抓拍系统设计方案 目录 一.概述.................................. ...查看


  • 高速公路违章超速图像抓拍系统简介
  • 公路交通技术!""+年!月第&期012.345467489:6.;AB1CD!""+E4D&!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ...查看


  • 电子狗工作原理
  • GPS 电子狗工作原理 国内常用测速设备的工作原理 地面埋设感应圈(或感应棒) 这种方法比较经典,检测效果也不错.如我国南方,如上海.广东等地区多采用此法.根据车辆经过平行线圈的速度来判断是否超速,并摄像取证.该检测方法的缺点是在于地面埋设 ...查看


  • 高速公路行车超速提示系统
  • 车辆超速是造成交通事故的重要原因之一,尤其是在高速公路上,车速较快,极易引发事故,造成人员伤亡.财产损失,并引发交通堵塞.因此,为了提升告诉公路服务水平,更好的协调和诱导交通,保护司乘人员安全,降低事故发生率,根据河南省交通厅管理年工作要求 ...查看


  • 激光测速的原理及应用
  • 激光测速的原理及应用 随着信息社会的发展和改革开放的不断深入,人民生话水平不断提高,使汽车的普及率也越来越高,交通事故也时有发生,因而迫切需要对运行汽车进行检测,尤其是能对汽车车速有一个有效检测手段,这也是现代智能交通系统中的重要组成部分, ...查看


  • 齿轮测速传感器
  • 齿轮测速传感器 齿轮测速传感器: 金华牌齿轮测速传感器,是对导磁材料做的齿轮的位置(齿或槽)及转速的测量.非接触方式.范围在1-20000转/ 分,输出的方波脉冲可直接和TTL;COMS等电路接口,配测速仪表或工业控制微机可进行测速和控制. ...查看


  • 基于激光传感器的智能车循迹系统
  • 装 订 线 河北大学工商学院 本科生毕业论文(设计) 题目: 学 部 信息科学与工程学部 学科门类 工学 专 业 电气工程及自动化 学 号 姓 名 指导教师 2013年5月16日 基于激光传感器的智能车循迹系统 摘 要 智能汽车是未来汽车发 ...查看


  • 宁波交通网车辆违章查询
  • 点击图片可直接进入官网查询 附:道路交通安全违法行为处理程序规定 第一章 总 则 第一条 为了规范道路交通安全违法行为处理程序,保障公安机关交通管理部门正确履行职责,保护公民.法人和其他组织的合法权益,根据<中华人民共和国道路交通安全 ...查看


  • 交通工程监理实施细则 2
  • 交通工程监理实施细则 一. 概述 合肥市望江西路(天智路-西客站西)工程起点位于天智路,终点位于西客站西.本交通工程附属设施涉及范围为:天智路-怀宁路段,线路设计起点位于天智路,起点桩号:K0-100,线路由西向东,终点位于怀宁路,终点桩号 ...查看


热门内容