logo资料库

基于51单片机的公交车报站系统程序.doc

第1页 / 共23页
第2页 / 共23页
第3页 / 共23页
第4页 / 共23页
第5页 / 共23页
第6页 / 共23页
第7页 / 共23页
第8页 / 共23页
资料共23页,剩余部分请下载后查看
基于 51 单片机的公交车报站系统程序 2007-11-24 14:42 系统源程序(C 语言版) /*+++++++++++++++++++++++++++++++++++++ LCD 显示,采用 FM12864FLCD 显示模块(带中文字库) 功能说明:键盘显示,键盘采用普通彩电遥控器(SAA3010A), 语音芯片采用 ISD1420P,能够录放 20 秒, 单片机采用 AT89C51, 通过键盘控制实现,语音报站同时 LCD 显示站名, 晶振 24MHz。 接线说明:P1 口接 LCD 的数据口, P0 口接 ISD1420P 的地址口, P3.2----PLAY P3.3----REC P3.4----RS P3.5----WR P3.6----E P3.7 接 SM0038 信号输出脚 版本时间:2007-05-27 23:12 +++++++++++++++++++++++++++++++++++++++*/ #include void Clear(); void Delay(unsigned int t); void Write_com(unsigned char d); void Write_data(unsigned char d); unsigned char Read_data(); void Disp_char(unsigned char pos,unsigned char dat); void Disp_word0(unsigned char posx,unsigned char *p,unsigned char n); void Lcd_system(void); bit hw_yima(); void delay0(unsigned int t); void Disp_control(unsigned char zm); void Disp_number(unsigned char pos,unsigned int dat); void Report(unsigned char sl); void Rec_bus(unsigned char rec); void Disp_pucture(unsigned char *p); void bus_contorl(); unsigned char n=0; unsigned char p_last=0; unsigned char zm_last=0; unsigned char k=0; //红外码位数 //上一次显示指针偏移量
//录音密码 ymcode = 255; //红外线编码 //译码标志位 //放音 //录音 //解码成功失败标志位 P1_0 = P3^7; //红外线信号输入断口 //显示输入密码标志位 //录音允许位 //模式选择,0:报站模式,1 录音模式(录音需要输入密码)。 unsigned char *q2; unsigned int secret=0; unsigned int bit flag0=1; bit s; bit hw=0; bit mode=0; bit xs=0; bit ly=0; sbit sbit PLAY=P3^3; sbit REC =P3^2; sbit LCD_RS=P3^4; sbit LCD_WR=P3^5; sbit LCD_E =P3^6; unsigned int tm=0; unsigned char code gImage_word0[1024]; unsigned char code gImage_word2[1024]; unsigned char code table0[]={"虎泉 桌刀泉广阜屯街道口洪山 丁字桥傅家坡大东门阅马场下 一站:"}; unsigned char code table1[]={"深圳市勤正达电子有限公司成立于 2002 年,是专业研发及生产 液晶显示器" //数据、命令选择信号 //读写信号 //使能信号 "和液晶模块的高新技术企业。LCD 显示器覆盖了多种系列多年来公司秉承" "全力面向客户,技术专攻的经营理念,一直致力于为广大电子成品制造商" "提供质量精良,性能稳定,品种齐全的 LCD 显示屏及 LCM 显示模块系列产" "品。望成为您的首选合作伙伴。 "}; unsigned char code table2[]={"请输入密码:""录音模式""密码错误!"}; void main() { unsigned char num=0; unsigned int i=0; unsigned char *q; TMOD=0x11; TH1 = 0xF0; TL1 = 0x60; EA = 1; ET1 = 1; REC = 1; PLAY= 1; Delay(100); Lcd_system(); q=gImage_word2; Disp_pucture(q); //系统初始化
delay0(30000); q=gImage_word0; Disp_pucture(q); delay0(40000); Clear(); while(1) q=table1; for(num=0;num<5;num++) { if(0==mode) { Disp_word0(0,q,32); q=q+64; } for(i=0;i<60000;i++) { bus_contorl(); } } { } } /*************************************** * 名称: Clear() * 说明: * 功能: 清除全屏显示 * 参数: 无 * 返回值: 无 ****************************************/ void Clear() { Write_com(0x01); Write_com(0x34); Write_com(0x30); } /*************************************** * 名称: Lcd_system() * 说明: * 功能: 系统初始化 * 参数: 无 * 返回值: 无 ****************************************/
void Lcd_system(void) { Delay(600); LCD_E = 0; Write_com(0x34); Delay(10000); Write_com(0x30); Delay(10000); Write_com(0x01); Delay(10000); Write_com(0x06); Delay(10000); Write_com(0x0c); Delay(10000); } /*************************************** * 名称: Delay(unsigned int t) * 说明: * 功能: 延时 * 参数: t:延时长度 * 返回值: 无 ****************************************/ void Delay(unsigned int t) { unsigned int i; for(i=0;i
Delay(40); LCD_E = 0; LCD_WR = 1; Delay(100); } /*************************************** * 名称: Write_data(unsigned char d) * 说明: * 功能: 写数据 * 参数: d:需要写入的数据 * 返回值: 无 ****************************************/ void Write_data(unsigned char d) { LCD_E = 0; LCD_RS = 1; LCD_WR = 0; P1 = d; LCD_E = 1; Delay(40); LCD_E = 0; LCD_WR = 1; Delay(100); } /*************************************** * 名称: unsigned char Read_data(void) * 说明: * 功能: 读数据 * 参数: 无 * 返回值: d:读出数据 ****************************************/ unsigned char Read_data(void) { unsigned char d = 0; LCD_E = 0; LCD_RS = 1; LCD_WR = 1; LCD_E = 1; Delay(50); d = P1; LCD_E = 0; LCD_WR = 0;
Delay(100); return(d); } /*************************************** * 名称: Disp_word0(unsigned char posx,unsigned char *p,unsigned char n) * 说明: * 功能: 显示一串汉字 * 参数: pos:显示位置(第一行:0-6,第二行:7-13), p:汉字码的地址指针, n:显示字的个数, * 返回值: 无 ****************************************/ void Disp_word0(unsigned char posx,unsigned char *p,unsigned char n) { unsigned char i=0; unsigned char pos; for(i=0;i15)&&(pos<24))) { if(pos>15)pos=pos-8; Write_com(0x80|pos); Write_data(p[0]); Write_data(p[1]); } else { if(pos<16) { pos =pos-8; } else { pos =pos-16; } Write_com(0x90|pos); Write_data(p[0]); Write_data(p[1]); } posx++; p=p+2; }
} /*************************************** * 名称: Disp_row(unsigned char row,unsigned char pos,unsigned char dat) * 说明: * 功能: 显示一个字母或数字 * 参数: row:行选择,pos:显示位置(0-15),dat:数字码 * 返回值: 无 ****************************************/ void Disp_row(unsigned char row,unsigned char pos,unsigned char dat) { unsigned char dat0; unsigned char pos0; row = row%2; row = row<<4; pos0 = pos/2; if((pos+1)/2==pos0) { Write_com((0x80+row)|pos0); Write_data(dat); } else { Write_com((0x80+row)|pos0); dat0 = Read_data(); Write_data(dat); } } /*************************************** * 名称: Disp_char(unsigned char pos,unsigned char dat) * 说明: * 功能: 显示一个字母或数字 * 参数: pos:显示位置(第一行:0-15,第二行:16-31,第一行:32-47,第二行:48-63),dat:数 字码 * 返回值: 无 ****************************************/ void Disp_char(unsigned char pos,unsigned char dat) { if(pos<16) { Disp_row(0,pos,dat); } if((pos<32)&&(pos>15))
{ Disp_row(1,pos-16,dat); } if((pos<48)&&(pos>31)) { Disp_row(2,pos-16,dat); } if((pos<64)&&(pos>47)) { Disp_row(3,pos-32,dat); } } /*************************************** * 名称: void Disp_number(unsigned char pos,unsigned long dat) * 说明: * 功能: 显示一个数(0-65536) * 参数: pos:显示位置,dat:显示数据 * 返回值: 无 ****************************************/ void Disp_number(unsigned char pos,unsigned int dat) { unsigned int d; unsigned char i=0; unsigned char addr; unsigned char tab[5]={0}; d =dat; // while(d) { tab[i] = d%10; d=d/10; i++; } if(i
分享到:
收藏