C8051键盘测试程序.doc_第1页
C8051键盘测试程序.doc_第2页
C8051键盘测试程序.doc_第3页
C8051键盘测试程序.doc_第4页
C8051键盘测试程序.doc_第5页
已阅读5页,还剩4页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

#include c8051f000.h#include intrins.h/-#define uchar unsigned char#define uint unsigned int#define BAUDRATE #define SYSCLK void SYSCLK_Init (void);void delaynus(unsigned int q) ; void PORT_Init (void);void SPI0_Init (void);void LCD_Init(void);void SendSPIByte(unsigned char ch);void delaynms (unsigned int j);void writecom(unsigned char com);void writedata(unsigned char d);void writechar(unsigned char ua);void Write_COM(uchar ins);void lcden(datad);void LCD_set_xy( unsigned char x, unsigned char y );void LCD_write_string(unsigned char n);void lcd_key1(void);void lcd_key2(void);void lcd_key3(void);void lcd_key4(void);void UART0_Init (void);void presskey(void);/-/ Global CONSTANTS/-sbit S3=P10;sbit S4=P11;sbit S5=P12;sbit S6=P13;sbit lcdcs=P30;unsigned char comd,kk,sdf,ppca;unsigned char virt_port,v,b,m;unsigned char lcd_data_count;unsigned char *lcdpoint;unsigned char qqq; unsigned char data8;unsigned int i;/-/-void main(void)WDTCN = 0xde; / disable watchdog timerWDTCN = 0xad; SYSCLK_Init ();PORT_Init ();UART0_Init() ; / initialize crossbar and GPIOSPI0_Init (); LCD_Init() ; delaynms (20); delaynus (100); LCD_set_xy(0X00,0); delaynus (200); presskey(); delaynus (200); LCD_write_string(16); delaynus (200); while(1) if(S3=0) Write_COM(0X01); delaynms (200); LCD_set_xy(0X00,0); delaynus (200); lcd_key1(); delaynus (200); LCD_write_string(6); delaynus (200); else if(S4=0) Write_COM(0X01); delaynms (200); LCD_set_xy(0X00,0); delaynus (200); lcd_key2(); delaynus (200); LCD_write_string(6); delaynus (200); else if(S5=0) Write_COM(0X01); delaynms (200); LCD_set_xy(0X00,0); delaynus (200); lcd_key3(); delaynus (200); LCD_write_string(6); delaynus (200); else if(S6=0) Write_COM(0X01); delaynms (200); LCD_set_xy(0X00,0); delaynus (200); lcd_key4(); delaynus (200); LCD_write_string(6); delaynus (200); else /-/ Initialization Subroutines/-/-/ PORT_Init/-void PORT_Init (void) XBR0 = 0x27; / XBAR0: Initial Reset Value XBR1 = 0x00; / XBAR1: Initial Reset Value XBR2 = 0x5c; / XBAR2: Initial Reset Value PRT0CF = 0x14; / Output configuration for P0 PRT1CF = 0x10; / Output configuration for P3 PRT3CF = 0x01; / Output configuration for P3 /-/ SYSCLK_Init/-void SYSCLK_Init (void) OSCXCN = 0x67; / start external oscillator with for (i=0; i 256; i+) ; / XTLVLD blanking interval (1ms) while (!(OSCXCN 0x80) ; / Wait for crystal osc. to settle OSCICN = 0x88; / select external oscillator as SYSCLK /-/ SPI0_Init/-void SPI0_Init (void) SPI0CFG = 0x07; / data sampled on 1st SCK rising edge SPI0CFG|=0xC0; /CKPOL =1; SPI0CN = 0x03; / Master mode; SPI enabled; flags SPI0CKR = SYSCLK/2/2000000-1; / SPI clock = 8MHz (limited by / EEPROM spec.)/-/ UART0_Init/-void UART0_Init (void) SCON = 0x50; / SCON: mode 1, 8-bit UART, enable RX TMOD = 0x20; / TMOD: timer 1, mode 2, 8-bit reload TH1 = -(SYSCLK/BAUDRATE/16); / set Timer1 reload value for baudrate TR1 = 1; / start Timer1 CKCON |= 0x10; / Timer1 uses SYSCLK as time base PCON |= 0x80; / SMOD = 1 TI = 1; / Indicate TX ready/-/ LCD_Init/-void LCD_Init(void) /向LCD送命令/ unsigned int xdata x; delaynms(100); datad=0x00; SendSPIByte(datad); delaynms(10); Write_COM(0x30); delaynms(10); Write_COM(0x30); delaynms(10); Write_COM(0x30); delaynms(10) ; Write_COM(0x28); delaynms(100); virt_port=0; SendSPIByte(virt_port); lcden(virt_port); Write_COM(0x01); delaynms(100); Write_COM(0x06); delaynms(10) ; Write_COM(0x0C); delaynms(500) ; /-/ SendSPIByte/-void SendSPIByte(unsigned char ch) lcdcs=1; delaynus(100); SPIF = 0;SPI0DAT = ch;while (SPIF = 0); delaynus(100); lcdcs=0; delaynus(100); _nop_(); / 等待写结束 /-/ lcden/-void lcden(datad) datad|=0x08; SendSPIByte(datad); datad=0xf7; SendSPIByte(datad);/-/ delaynms/-void delaynms (unsigned int uu) unsigned int oo,ll; for (oo=0;oouu;oo+) for(ll=0;ll1140;ll+); /-/ writechar/-void writechar(unsigned char ua) uint j; uchar t,x; for(j=0;j500;j+); datad|=0x02; SendSPIByte(datad); datad|=ua0xf0; SendSPIByte(datad); datad|=0x08; SendSPIByte(datad); for(x=0;x3;x+); datad=0xf7; SendSPIByte(datad); for(x=0;x3;x+); datad=0x07; delaynus(100); SendSPIByte(virt_port); t|=ua0x0f; datad|=t4; SendSPIByte(datad); for(x=0;x3;x+); datad|=0x08; SendSPIByte(datad); for(x=0;x3;x+); datad=0xf7; SendSPIByte(datad); for(x=0;x3;x+); datad=0x00; t=0x00; SendSPIByte(datad);/-/ Write_COM/-void Write_COM(uchar ins) uchar t; uint j; for(j=0;j5000;j+); /用延时代替查询 virt_port|=ins0xf0; SendSPIByte(virt_port); /LCDE=1; virt_port|=0x08; SendSPIByte(virt_port); for(i=3;i0;i-); virt_port=0x08; SendSPIByte(virt_port); virt_port=0x07; SendSPIByte(virt_port); t=ins4; virt_port|=t0xf0; SendSPIByte(virt_port); virt_port|=0x08; SendSPIByte(virt_port); for(i=3;i0;i-); virt_port=0x08; SendSPIByte(virt_port); virt_port=0; SendSPIByte(virt_port);/-/ LCD_set_xy/-void LCD_set_xy( unsigned char x, unsigned char y ) unsigned char address; if (y = 0) address = 0x80 + x; else address = 0xc0 + x; Write_COM(address);/-/ LCD_write_string/-void LCD_write_string(unsigned char n) unsigned char data1; for(n;n0;n-) data1=*lcdpoint; writechar(data1); delaynms(100); lcdpoint+; delaynus(10); /-/ presskey/-void presskey(void) unsigned char xdata DDCdata16=0x50,0x4c,0x45,0x41,0x53,0x45,0x20,0x50,0x52,0x45,0x53,0x53,0x20,0x4b,0x45,0x59; lcdpoint=DDCdata;/-/ lcd_key1/-void lcd_key1(void) unsigned char xdata key1ok6=0x53,0x33,0x20,0x4f,0x4b,0x21; lcdpoint=key1ok;/-/ lcd_key2/-void lcd_key2(void) unsigned char xdata key2ok6=0x53,0x34,0x20,0x4f,0x4b,0x21; lcdpoint=key2ok;/-/ lcd_key3/-void lcd_key3

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论