桂林电子科技大学毕业设计(论文)报告用纸 第33 页
参考文献:
[1] 月影狂风. 自行车[EB/OL].
http://baike.http://www.wodefanwen.com//view/6328.htm?fr=aladdin 2014-5-1 [2]汪道辉. 单片机系统设计与实践[M]. 北京: 电子工业出版社, 2006,5
[3]V. Yu. Teplov,A. V. Anisimov. Thermostatting System Using a Single-Chip Microcomputer a nd Thermoelectric Modules Based on the Peltier Effect[J] ,2002
[4] Meehan Joanne,Muir Lindsey.SCM in Merseyside SMEs:Benefits and barriers[J].. TQM [5]sumnerss1989. STC89C52RC用户使用手册[EB/OL].
http://wenku.http://www.wodefanwen.com//view/6edcbad0195f312b3169a5c3.html 2014-5-7 [6] phjryp. 测速仪[EB/OL].
http://www.doc88.com/p-291182781113.html 2014-5-7
[7]黄明强.DS1302在单片机系统中的应用[N].保定师范专科学校学报.2004 [8] 天山晴雪wyj.DS18B20工作原理[EB/OL].
http://wenku.http://www.wodefanwen.com//view/0dd2f163ddccda38376baff0.html 2014-5-7 [9]曹海平.基于单片机和DS18B20的分布式多点温度检测系统的设计[D].自动化技术与应用.27(11):90-93 2008
[10]李金群.基于51单片机的12864液晶图文显示研究[J].机电信息.2010.36
[11]陈朝大.李杏彩.单片机原理与应用—基于Keil C和虚拟仿真技术[M].北京.化工工业出版社.2013.23-35
33
桂林电子科技大学毕业设计(论文)报告用纸 第34 页
附 录
主设计程序:
//自行车测速驱动 C51版本 //Programmer:Steve Lee //coyp @Lee
//Caution: Do not privately modify the program, //pleaserespect the programmers sweat, thank you //2014.3.11
//***************************************************** #include\#include\#include\#include\#include\
sbit Display = P1^3; //显示路程控制端
sbit Clear = P1^5; //清除屏幕显示的路程信息 sbit Count = P3^2; //外部中断管脚,计脉冲数
unsigned int num=0,Speed=0;
unsigned char bai=0,shi=0,ge=0,i=0,j=0,k=0,l=0,m=0; unsigned int num;
//定时器计数
long Couter=0,Couter1=0,S=0; // Couter脉冲数用于计算速度,Couter1脉冲数用于计算路程
bit flag=0,flag1=0;
void main() //主函数 {
TMOD = 0x01; //设置定时器0工作模式1 TH0 = (65536-45872)/256; //定时器赋初值50ms TL0 = (65536-45872)%6; EA = 1; //开启总中断
34
//标志位
unsigned char code d[10]={\定义字符数组显示数字
桂林电子科技大学毕业设计(论文)报告用纸 第35 页
ET0 = 1; //打开定时器0中断 EX0 = 1; //打开外部中0 TR0 = 1; //转动启定时器 IT0 = 1; //边沿触发 Lcd_Int(); //液晶初始化 Init_DS1302(); while(1) {
Display_DS18B20(); //显示温度 Display_Data(); //显示时间
//DS1302初始化
if(Display == 0) //路程显示与否标志位控制
{
delay(1); if(Display == 0)
{
flag1 = 1;
while(!Display); }
} {
if(Clear == 0)
delay(1);
//清除路程显示信息
if(Clear == 0)
{
Write_Address(3,3); Write_Data(d[0]); Write_Data('.'); Write_Data(d[0]); Write_Data(d[0]); Write_Data(d[0]);
while(!Clear);
35
桂林电子科技大学毕业设计(论文)报告用纸 第36 页
}
} {
if(flag) //500ms显示一次速度
flag = 0; TR0 = 0; EX0 = 0; Couter = 0;
//关闭定时器0 //关闭外部中断
Speed = Couter/2; //一个脉冲等于25cm
//清零
bai=Speed/100; shi=Speed0/10; ge=Speed0; Write_Address(2,5); Write_Data(d[bai]); Write_Data(d[shi]); Write_Data(d[ge]); TR0=1;
//打开定时器0
//打开外部中断
EX0 = 1;
}
if((Speed == 0)&(flag1 == 1)) //路程显示 {
if((Couter1/4)>9999)
{
Write_Address(3,3); Write_Data('e'); Write_Data('r'); Write_Data('r');
Write_Data('o'); Write_Data('r'); Couter1 = 0; flag1=0;
} else
{
36
桂林电子科技大学毕业设计(论文)报告用纸 第37 页
}
}
i = Couter1/4/1000;
j = Couter1/400/100;
l = Couter1/4000; Write_Address(3,3); Write_Data(d[i]); Write_Data('.'); Write_Data(d[j]); Write_Data(d[k]); Write_Data(d[l]); Couter1 = 0; flag1=0; }
k = Couter1/4000/10;
}
void timer0(void) interrupt 1 //定时器0中断服务程序 { }
void int0(void) interrupt 0 //外部中断0服务程序 {
37
TH0=(65536-50000)/256; TL0=(65536-50000)%6; num++; if(num==10) {
EX0 = 0; num = 0; TR0 = 0; flag =1;
//清零计数
//关闭定时器0 //打开标志位
//定时500ms 显示一次速度
}