汐っ阳luozhiyong131.blog.chinaunix.net
luozhiyong131
全部博文(961)
Java(33)
Android基础(58)
Linux设备驱动(55)
TP(0)
IC卡规范(13)
交易流程(3)
EMV2000(18)
C语言编程规范(10)
CC2530(0)
PIC单片机(12)
8051单片机(36)
QT(22)
内核驱动(14)
应用程序(7)
系统构建(5)
Linux内核驱动(57)
Linux系统构建(11)
数据库(19)
ARM程序设计(34)
Linux_C编程(51)
shell编程(8)
C++算法(8)
C++基础编程(62)
C语言编程(46)
QT(28)
基于ARM9的远程视(6)
应用程序(3)
内核(10)
其他(13)
ARM(2)
配置(1)
多线程(9)
Linux C(10)
Linux下C编程 实(12)
驱动开发(2)
QT 图形界面(5)
应用程序的移植(4)
TX2440 内核驱动(12)
内核、系统文件下(4)
Linux 系统操作(5)
内核移植、文件系(4)
Bootloader移植(13)
s3c2440 硬件资源(4)
嵌入式开发环境搭(7)
Bootload(1)
内核开发(26)
应用程序设计(5)
Linux系统管理与(13)
2016年(1)
2015年(61)
2014年(41)
2013年(51)
2012年(235)
2011年(391)
2010年(181)
64492407
Cindy_ls
ycy52025
hushup
dallygar
18325057
liziyun2
Mars1122
jzjwonde
dreampow
张三13aw
QWE866
nanakagu
danzhoum
sip_chen
zwh0309
月泉蓝石
zoumaden
分类: C/C++
2011-01-05 16:00:21
#include <reg51.h>#include <intrins.h> #define uchar unsigned char#define uint unsigned intuchar dis_buf; //显示缓存uchar temp;uchar key; //键顺序吗void delay0(uchar x); //x*0.14MSsbit LCD_RW = P2^5;sbit LCD_RS = P2^6; sbit LCD_EN = P2^7;uchar cdis1[16] = {" KEY NUMBER "};uchar cdis2[16] = {" KEY-CODE: H "};#define delayNOP(); {_nop_();_nop_();_nop_();_nop_();};void delay(uchar x){ uchar j; while((x--)!=0) { for(j=0;j<125;j++) {;} }}bit lcd_busy() { bit result; LCD_RS = 0; LCD_RW = 1; LCD_EN = 1; delayNOP(); result = (bit)(P0&0x80); LCD_EN = 0; return(result); }void lcd_wcmd(uchar cmd){ while(lcd_busy()); LCD_RS = 0; LCD_RW = 0; LCD_EN = 0; _nop_(); _nop_(); P0 = cmd; delayNOP(); LCD_EN = 1; delayNOP(); LCD_EN = 0; }void lcd_wdat(uchar dat){ while(lcd_busy()); LCD_RS = 1; LCD_RW = 0; LCD_EN = 0; P0 = dat; delayNOP(); LCD_EN = 1; delayNOP(); LCD_EN = 0;}void lcd_init(){ delay(15); lcd_wcmd(0x38); //16*2显示,5*7点阵,8位数据 delay(5); lcd_wcmd(0x38); delay(5); lcd_wcmd(0x38); delay(5); lcd_wcmd(0x0c); //显示开,关光标 delay(5); lcd_wcmd(0x06); //移动光标 delay(5); lcd_wcmd(0x01); //清除LCD的显示内容 delay(5);}void lcd_pos(uchar pos){ lcd_wcmd(pos | 0x80); //数据指针=80+地址变量} void keyscan(void) { P1=0x0F; //低四位输入 delay(1); temp=P1; //读P1口 temp=temp&0x0F; temp=~(temp|0xF0); if(temp==1) key=0; else if(temp==2) key=1; else if(temp==4) key=2; else if(temp==8) key=3; else key=16; P1=0xF0; //高四位输入 delay(1); temp=P1; //读P1口 temp=temp&0xF0; temp=~((temp>>4)|0xF0); if(temp==1) key=key+0; else if(temp==2) key=key+4; else if(temp==4) key=key+8; else if(temp==8) key=key+12; else key=16; dis_buf = key; //键值入显示缓存 dis_buf = dis_buf & 0x0f; if(dis_buf>9) //转换为ASCII码 dis_buf = dis_buf+0x37; else dis_buf = dis_buf+0x30; } void keydown(void) { P1=0xF0; if(P1!=0xF0) { keyscan(); } }main() { uchar m; P0=0xFF; //置P0口 P1=0xFF; //置P1口 delay(10); //延时 lcd_init(); //初始化LCD lcd_pos(0); //设置显示位置为第一行的第1个字符 m = 0; while(cdis1[m] != '\0') { //显示字符 lcd_wdat(cdis1[m]); m++; } lcd_pos(0x40); //设置显示位置为第二行第1个字符 m = 0; while(cdis2[m] != '\0') { lcd_wdat(cdis2[m]); //显示字符 m++; } dis_buf = 0x2d; //显示字符"-" while(1) { keydown(); lcd_pos(0x4c); lcd_wdat(dis_buf); //第一位数显示 } }
上一篇:DS18B20
下一篇:红处接收
登录 注册