No.54147 作者:lxlong_006 邮件:lxlong_006@126.com ID:129021 登陆:2次 文章数:1篇 最后登陆IP:123.139.26.146 最后登陆:2011/4/26 16:19:55 注册:2009/7/3 11:36:40 财富:106 发帖时间:2011/4/26 16:19:55 发贴者IP:123.139.26.146 标题:lxlong_006:IC厂商技术交流区[求助] 摘要:No.54147IC厂商技术交流区[求助] #include <REG51.H> #include <absacc.h> #include <STDIO.H> #include <STRING.H> #include <MATH.H> #include <intrins.h> #include <key.h> #define DB P0 //sbit Spk=P1^3;//speaker unsigned char i=0; unsigned int Key_Num=0; unsigned char key1,key2,key3,key4; bit Flag; unsigned char Get_Key; bit Flag; //----液晶函数 void msec(unsigned int x) ; void configure(unsigned char com); //com配置参数,初始化时需要配置若干次 void LcdIni(); void printchar(unsigned char row,unsigned char col, buf ); void print(unsigned char row,unsigned char col,char * buf,unsigned char len ); //#define unsigned char unsigned char //#define uint unsigned int sbit RS=P2^0; sbit RW=P2^1; sbit E=P2^2; //sbit Spk=P1^3;//speaker ////延时函数////////// void msec(unsigned int x) { unsigned char j; while(x--) { for (j=0;j <125;j++) {;} } } //液晶配置函数 void configure(unsigned char com) //com配置参数,初始化时需要配置若干次 { unsigned char m; RS=0; RW=1; do { DB=0x0ff; E=1; m=DB; E=0; m=m&0x80; } while (m==0x80); RW=0; DB=com; E=1; E=0; } //写数据函数 void writeData(unsigned char buf) { unsigned char m; RS=0; RW=1; do { DB=0x0ff; E=1; m=DB; E=0; m=m&0x80; } while (m==0x80); RS=1; RW=0; DB=buf; E=1; E=0; } //--------------------------------- //显示函数 void printchar(unsigned char row,unsigned char col, buf ) { unsigned char cod; unsigned char m; cod=0x80; if(row==1) cod=cod+0x40; if(row==2) cod=cod+0x14; if(row==3) cod=cod+0x54; cod=cod+col; //cod=0x80 + 0x10 * row + col/2; configure(cod); RS=0; RW=1; do { DB=0x0ff; E=1; m=DB; E=0; m=m&0x80; } while (m==0x80); RS=1; RW=0; DB=buf; E=1; E=0; } //-------------------------- void print(unsigned char row,unsigned char col,char * buf,unsigned char len )//行,列 { unsigned char i; unsigned char cod; unsigned char m; cod=0x80; if(row==1) cod=cod+0x10; if(row==2) cod=cod+0x08; if(row==3) cod=cod+0x18; cod=cod+col; //cod=0x80 + 0x10 * row + col/2; configure(cod); for(i=0;i <len;i++) { RS=0; RW=1; do { DB=0x0ff; E=1; m=DB; E=0; m=m&0x80; } while (m==0x80); RS=1; RW=0; DB=buf; E=1; E=0; // msec(0x10); } } void LcdIni() { DB=0x30; RS=0; RW=0; msec(0x15); DB=0x38; E=1; E=0; configure(0x01); configure(0x0c); configure(0x06); print(1,2,"陕西创新", strlen("陕西创新")); print(2,0,"科技有限公司", strlen("科技有限公司")); msec(1000); configure(0x01);//清屏 msec(2000); // msec(100); // configure(0x01); //清除显示,并且设定地址指针为00H print(0,0,"名称:", strlen("名称:")); print(0,5,"型号", strlen("型号")); print(2,0,"电压:", strlen("电压:")); print(3,0,"状态:", strlen("状态:")); print(1,0,"方向:", strlen("方向:")); } //单片机初始化: void InitialCpu() { //开串行中断 ET0=1; //开定时中断0 ET1=0; //关定时中断1 ES=1; //开串行中断 EX0=0; //开外部中断0 EX1=0; //开外部中断1 EA=1; //中断允许 IP=0x00; //中断优先级 //串行中断设置: SCON=0x50; //SM0 SM1 SM2 REN =0101,模式1,允许接收; //假设波特率19.2k,晶震为11.059M. PCON=PCON | 0x80; //SMOD=1; TMOD=0x21 ; //定时器1工作模式2,8位自动重装.当溢出后自动装载TH1到TL1.定时器1工作模式1:16位 TL1=0xFD; TH1=0xFD; //初值 TR1=1; //启动订时器 TR0=1; TL0=76; //50毫秒定时 TH0=247; //初值 } void Timer0() interrupt 1 { static unsigned int Timer0i=0; Timer0i++; if(Timer0i==20) { Timer0i=0; TL0=76; //50毫秒定时 TH0=247; //初值 } } //键盘键值获取Get_Key值 void kk() { switch(Get_Key) { case 1: configure(0x85); configure(0x0d); TR0=0; key1++; if(key1> 4) { key1=0; } else //利用一个按键实现3种不同内容显示, { if(key1==1) ......
>>返回讨论的主题
|