1、毕业设计自行车测速仪#include #include #include #define GDM12864ADataPort P1 /LCD数据线#define uchar unsigned charsbit DI=P22; / 数据指令 选择sbit RW=P21; / 读写 选择sbit EN=P20; / 读写使能sbit cs1=P24; / 片选1sbit cs2=P23; / 片选2sbit sclk=P25;sbit i_o=P26;sbit rstb=P27;sbit ds18s20_dq=P36;sbit I2C_SCK=P33;sbit I2C_SDA=P35;uchar
2、qq=0,pp=0;/开始/暂停按键,计算机传输过来的数据为8则上传uchar code a=/16*16 0x10,0x22,0x64,0x0C,0x80,0x00,0xFE,0x92,0x92,0x92,0x92,0x92,0xFF,0x02,0x00,0x00, 0x04,0x04,0xFE,0x01,0x40,0x7E,0x42,0x42,0x7E,0x42,0x7E,0x42,0x42,0x7E,0x40,0x00, 0x00,0x00,0xFC,0x24,0x24,0x24,0xFC,0xA5,0xA6,0xA4,0xFC,0x24,0x34,0x26,0x04,0x00, 0x4
3、0,0x20,0x9F,0x80,0x42,0x42,0x26,0x2A,0x12,0x2A,0x26,0x42,0x40,0xC0,0x40,0x00, 0x00,0xFC,0x84,0x84,0x84,0xFE,0x14,0x10,0x90,0x10,0x10,0x10,0xFF,0x10,0x10,0x00, 0x00,0x3F,0x10,0x10,0x10,0x3F,0x00,0x00,0x00,0x23,0x40,0x80,0x7F,0x00,0x00,0x00, 0x00,0xF8,0x01,0x02,0xF6,0x10,0x12,0x12,0x12,0x12,0xFA,0x12,
4、0x02,0xFF,0x02,0x00, 0x00,0xFF,0x00,0x00,0x3F,0x11,0x11,0x11,0x11,0x11,0x3F,0x40,0x80,0x7F,0x00,0x00, 0x40,0x42,0x44,0xCC,0x00,0xF4,0x94,0x94,0x94,0xFF,0x94,0x94,0x94,0xF6,0x04,0x00, 0x00,0x40,0x20,0x1F,0x20,0x51,0x48,0x44,0x42,0x7F,0x42,0x44,0x4C,0x61,0x20,0x00, 0x00,0x00,0xFE,0x12,0x12,0x12,0x12,0
5、xFE,0x12,0x12,0x12,0x12,0xFF,0x02,0x00,0x00, 0x40,0x48,0x49,0x49,0x49,0x49,0x49,0x7F,0x49,0x49,0x49,0x49,0x4D,0x68,0x40,0x00, 0x24,0x24,0xA4,0xFE,0xA3,0x22,0x20,0x7E,0x42,0x42,0x42,0x42,0x42,0x7F,0x02,0x00, 0x08,0x06,0x01,0xFF,0x00,0x43,0x41,0x49,0x49,0x49,0x7F,0x49,0x4D,0x69,0x41,0x00, 0x00,0x00,0x
6、FE,0x82,0x92,0x92,0x92,0xFE,0x92,0x9A,0xD2,0x82,0xFF,0x02,0x00,0x00, 0x40,0x20,0x1F,0x00,0x00,0x7E,0x22,0x22,0x22,0x3F,0x42,0x80,0x7F,0x00,0x00,0x00, 0x80,0x80,0x80,0x80,0xFF,0x80,0x80,0xA0,0x90,0x88,0x84,0x86,0x80,0xC0,0x80,0x00, 0x00,0x00,0x00,0x00,0xFF,0x40,0x40,0x23,0x04,0x08,0x10,0x20,0x60,0x20
7、,0x00,0x00, 0x00,0x06,0x09,0x09,0xE6,0xF0,0x18,0x08,0x08,0x08,0x18,0x30,0x78,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x07,0x0F,0x18,0x30,0x20,0x20,0x20,0x10,0x08,0x00,0x00,0x00, 0x80,0x40,0x20,0xF8,0x47,0x48,0x48,0x48,0xC8,0x7F,0x48,0x48,0x4C,0x68,0x40,0x00, 0x00,0x00,0x00,0xFF,0x00,0x00,0x02,0x0B,0x12,
8、0x62,0xD2,0x0A,0x06,0x02,0x00,0x00;uchar code b=/8*160x00,0xF8,0x08,0x08,0x08,0x08,0xF8,0x00,0x00,0x3F,0x20,0x20,0x20,0x20,0x3F,0x00,0x00,0x00,0x00,0x00,0xF8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3F,0x00,0x00,0x00,0x00,0x08,0x08,0x08,0x08,0x08,0xF8,0x00,0x00,0x3F,0x21,0x21,0x21,0x21,0x21,0x00,0x00,0x
9、08,0x08,0x08,0x08,0x08,0xF8,0x00,0x00,0x21,0x21,0x21,0x21,0x21,0x3F,0x00,0x00,0xF8,0x00,0x00,0x00,0x00,0xF8,0x00,0x00,0x01,0x01,0x01,0x01,0x01,0x3F,0x00,0x00,0xF8,0x08,0x08,0x08,0x08,0x00,0x00,0x00,0x21,0x21,0x21,0x21,0x21,0x3F,0x00,0x00,0xF8,0x08,0x08,0x08,0x08,0x08,0x00,0x00,0x3F,0x21,0x21,0x21,0x
10、21,0x3F,0x00,0x00,0x08,0x08,0x08,0x08,0x08,0xF8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3F,0x00,0x00,0xF8,0x08,0x08,0x08,0x08,0xF8,0x00,0x00,0x3F,0x21,0x21,0x21,0x21,0x3F,0x00,0x00,0xF8,0x08,0x08,0x08,0x08,0xF8,0x00,0x00,0x01,0x01,0x01,0x01,0x01,0x3F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3E,0x
11、01,0x01,0x3E,0x01,0x01,0x3E,0x00,0x00,0x00,0x80,0x80,0x00,0x00,0x00,0x00,0x00,0x13,0x24,0x24,0x19,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x10,0x08,0x04,0x02,0x01,0x00,0x00,0x00,0x00,0x30,0x30,0x00,0x00,0x00,0x00,0x00,0x00,0x0C,0x0C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x
12、00,0x00,0x00,0x00,0x00,0x00,0x30,0x30,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x01,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0x00,0x00,0x80,0x40,0x00,0x00,0x00,0x3F,0x06,0x09,0x10,0x20,0x00,0x00,/17,k0x
13、00,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3F,0x02,0x02,0x02,0x3E,0x00,0x00/18,h;/延时程序,延时10usvoid Delay_10_uS(void)char i=10;while(i-);/n mS delayvoid Delay_N_mS( unsigned int n_milisecond) /* n mS delay */unsigned char i;while(n_milisecond-)i=37;while(i-);/启动传送bit I2C_Start(void)Delay_10_uS();I2C
14、_SDA =1;Delay_10_uS();I2C_SCK =1;Delay_10_uS();if ( I2C_SDA = 0) return 0;if ( I2C_SCK = 0) return 0;I2C_SDA = 0;Delay_10_uS();I2C_SCK = 0;Delay_10_uS();return 1;/停止信号void I2C_Stop(void)Delay_10_uS();I2C_SDA = 0;Delay_10_uS();I2C_SCK = 1;Delay_10_uS();I2C_SDA = 1;Delay_10_uS();/无应答的时序,有应答时需要在第9位输出0,
15、没有应答时,第9位为高void I2C_Nack(void)Delay_10_uS();I2C_SDA=1;Delay_10_uS();I2C_SCK=1;Delay_10_uS();I2C_SCK=0;Delay_10_uS();/如果发送完成并且在第9个脉冲处得到ack,那么返回0,表示成功bit I2C_Send_Byte( unsigned char d)unsigned char i = 8;bit bit_ack;while( i- )Delay_10_uS();if ( d &0x80 ) I2C_SDA =1;else I2C_SDA =0;Delay_10_uS();I2C_
16、SCK = 1;Delay_10_uS();I2C_SCK = 0;d = d 1;Delay_10_uS();I2C_SDA = 1;Delay_10_uS();I2C_SCK = 1;Delay_10_uS();bit_ack = I2C_SDA;I2C_SCK =0;Delay_10_uS();return bit_ack;/接收一个8位数据unsigned char I2C_Receive_Byte(void)unsigned char i = 8, d;Delay_10_uS();I2C_SDA = 1;while ( i-)d = d 1;Delay_10_uS();I2C_SCK
17、 =1;if ( I2C_SDA ) d+;Delay_10_uS();I2C_SCK =0;return d;/写EEPROM操作void AT24C64_W(void *mcu_address, unsigned int AT24C64_address, unsigned int count )while(count-)I2C_Start();I2C_Send_Byte( 0xa0 );I2C_Send_Byte( AT24C64_address/256 );I2C_Send_Byte( AT24C64_address %256 );I2C_Send_Byte( *(unsigned ch
18、ar*)mcu_address );I2C_Stop();Delay_N_mS(10);(unsigned char*)mcu_address)+;AT24C64_address+;/读EEPROM函数void AT24C64_R(void *mcu_address,unsigned int AT24C64_address,unsigned int count)while(count-)I2C_Start();I2C_Send_Byte( 0xa0 );I2C_Send_Byte( AT24C64_address/256 );I2C_Send_Byte( AT24C64_address % 2
19、56 );I2C_Start();I2C_Send_Byte( 0xa1 );*(unsigned char*)mcu_address = I2C_Receive_Byte();I2C_Nack();I2C_Stop();(unsigned char*)mcu_address)+;AT24C64_address+; /单总线延时void ds18s20delay(int useconds)int s;for(s=0;suseconds;s+);/单总线复位uchar ds18s20reset()uchar presencesignal;ds18s20_dq=0;ds18s20delay(30)
20、;ds18s20_dq=1;ds18s20delay(3);presencesignal=ds18s20_dq;ds18s20delay(30);return presencesignal;/单总线位写入void ds18s20writebit(char val)ds18s20_dq=0;if(val=1)ds18s20_dq=1;elseds18s20_dq=0;ds18s20delay(5);ds18s20_dq=1;/单总线字节写入void ds18s20writebyte(char val)uchar i;uchar temp;for(i=0;ii;temp&=0x01;ds18s20
21、writebit(temp);ds18s20delay(5);/单总线位读取uchar ds18s20readbit(void)uchar i;ds18s20_dq=0;ds18s20_dq=1;for(i=0;i3;i+)return ds18s20_dq;/单总线字节读取uchar ds18s20readbyte(void)uchar i;uchar value=0;for(i=0;i8;i+)if(ds18s20readbit()value|=0x01i;ds18s20delay(7);return(value); /实时时钟复位函数void resetds1302()ds18s20de
22、lay(1);sclk=0;ds18s20delay(1);rstb=0;ds18s20delay(1);rstb=1;ds18s20delay(1);/时钟字节读取函数uchar readbyteds1302()uchar i;uchar rbyte;uchar tempbyte; rbyte=0x00; i_o=1; ds18s20delay(1); for(i=0;i8;+i) sclk=1; ds18s20delay(1); sclk=0; ds18s20delay(1); tempbyte=(uchar)i_o; tempbyte=1; rbyte|=tempbyte; return
23、 rbyte; /时钟字节写入函数void writebyteds1302(uchar w_byte)uchar i;ds18s20delay(1); for(i=0;i=1; /时钟初始化函数void initds1302()resetds1302();writebyteds1302(0x8e);writebyteds1302(0);resetds1302();writebyteds1302(0x90);writebyteds1302(0xab);resetds1302();writebyteds1302(0xbe);writebyteds1302(0);writebyteds1302(0)
24、;writebyteds1302(0);writebyteds1302(0);writebyteds1302(0);writebyteds1302(0);writebyteds1302(0);writebyteds1302(0);writebyteds1302(0);resetds1302();/时钟字节写入函数void writeclkbyte(uchar adress,uchar date)adress=(adress*2)|0x80);resetds1302();writebyteds1302(adress);writebyteds1302(date);resetds1302(); /状
25、态检查 ,void CheckState() unsigned char dat; DI=0; RW=1; do GDM12864ADataPort=0x00; EN=1; dat=GDM12864ADataPort; EN=0; dat=0x80 & dat; /仅当第7位为0时才可操作(判别busy信号) while(!(dat=0x00); /向LCD发送命令/command :命令void SendCommandToLCD(unsigned char command) CheckState(); RW=0; GDM12864ADataPort=command; EN=1; EN=0;/
26、写显示数据/dat:显示数据void WriteByte(unsigned char dat) CheckState(); DI=1; RW=0; GDM12864ADataPort=dat; EN=1; EN=0; /设定行地址(页)-X 0-7void SetLine(unsigned char line) line=line & 0x07; / 0=line=7 line=line|0xb8; /1011 1xxx SendCommandToLCD(line);/设定列地址-Y 0-63void SetColumn(unsigned char column) column=column
27、&0x3f; / 0=column=63 感觉多余的,column已近小于64了。 column=column | 0x40; /01xx xxxx SendCommandToLCD(column);/设定显示开始行-XXvoid SetStartLine(unsigned char startline) /0-63 startline=startline & 0x07; startline=startline|0xc0; /1100 0000 SendCommandToLCD(startline); /开关显示void SetOnOff(unsigned char onoff)onoff=0
28、x3e | onoff; /0011 111xSendCommandToLCD(onoff);/选择屏幕/screen: 0-全屏,1-左屏,2-右屏void SelectScreen(unsigned char screen) /cs1: 1-左; cs2: 1-右switch(screen) case 0: cs1=0;/全屏_nop_(); _nop_(); _nop_(); cs2=0; _nop_(); _nop_(); _nop_(); break; case 1: cs1=0;/左屏_nop_(); _nop_(); _nop_(); cs2=1;_nop_(); _nop_()
29、; _nop_(); break;case 2: cs1=1;/右屏_nop_(); _nop_(); _nop_(); cs2=0; _nop_(); _nop_(); _nop_(); break;/延时delay(unsigned int t )unsigned int i=t,m,n;for(m=0;mi;m+)for(n=0;n100;n+);/清屏/screen: 0-全屏,1-左屏,2-右 ?分屏干嘛,直接全屏不好吗void ClearScreen(unsigned char screen) unsigned char i,j;SelectScreen(screen);for(i=0;i8;i+)SetLine(i);for(j=0;j128;j+)WriteByte
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1