1
完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
扫一扫,分享给好友
#include #include #include #include #include #define uchar unsigned char #define uint unsigned int #define N 15 //十五个随机数 #define M 15 //加减符号 #define LCD_DB P0 ***it LCD_RS=P2^6; //P2^0是p2.0的意思;LCD_RS与P2.0等效起来,对LCD_RS 读写,就是对P2.0读写 好处在于LCD_RS含义直接明了,写程序多了就会知道有必要de ***it LCD_RW=P2^5; //P2^1是p2.1的意思 ***it LCD_E=P2^7; //P2^2是p2.2的意思 ***it k1=P3^2; //外部中断0 /* t = 0; i = 0; f = 0; k = 0; */ unsigned char t=0,k=0,i=0,j=0,f=0; //t是计时变量,k是按键标志,i,j是数组下标,f是随机数重复标志, unsigned char shuzu[M],fuhao[N]; //uchar *shuzu[M],fuhao[N]; int a,b,d,e; /**************************参数输入控制********************/ int m=2; //canshu位数 (1代表3位数 2代表4位数 3代表5位数) int n=2; //加或加减混合1代表加,2代表加减混合 int z=1; //显示快慢(1代表10秒显示完15个数,234567 8代表3秒显示完,其余按规律递减) //int *x=0; //数组和的答案,需要显示 /******函数声明****************/ void LCD_init(void); //LCD1602初始化函数 void LCD_write_command(uchar command); //写指令函数 void LCD_write_data(uchar dat); //写数据函数 void LCD_disp_char(uchar x,uchar y,uchar dat); //在某个屏幕位置上显示一个字符,X(0-15),y(1-2) void LCD_disp_str(uchar x,uchar y,uchar *str); //LCD1602显示字符串函数 void delay_n10us(uint n); //延时函数10ms //void suijishu(); void initzhongduan(); //定时器0及外部中断0初始化函数 void chanshengshuzu(); //产生数组函数 void lcddisplay(); // 将数组显示到LCD1602上的函数* /*-------------------------------------- ;模块名称:LCD_init(); ;功 能:初始化LCD1602 ;占用资源:-- ;参数说明:-- ;创建日期:2008.08.15 ;版 本:FV1.0(函数版本Function Version) ;修改日期:-- ;修改说明:-- ;-------------------------------------*/ void LCD_init(void) { delay_n10us(10); LCD_write_command(0x38);//设置8位格式,2行,5x7 delay_n10us(10); LCD_write_command(0x0c);//整体显示,关光标,不闪烁 delay_n10us(10); LCD_write_command(0x06);//设定输入方式,增量不移位 delay_n10us(10); LCD_write_command(0x01);//清除屏幕显示 delay_n10us(100); //延时清屏,延时函数,延时约n个10us } /*-------------------------------------- ;模块名称:LCD_write_command(); ;功 能:LCD1602写指令函数 ;占用资源: P2.0--RS(LCD_RS),P2.1--RW(LCD_RW),P2.2--E(LCD_E). ;参数说明:dat为写命令参数 ;创建日期:2008.08.15 ;版 本:FV1.0(函数版本Function Version) ;修改日期:-- ;修改说明:-- ;-------------------------------------*/ void LCD_write_command(uchar dat) { delay_n10us(10); LCD_RS=0; //指令 LCD_RW=0; //写入 LCD_E=1; //允许 LCD_DB=dat; delay_n10us(10); //实践证明,我的LCD1602上,用for循环1次就能完成普通写指令。 LCD_E=0; delay_n10us(10); //实践证明,我的LCD1602上,用for循环1次就能完成普通写指令。 } /*-------------------------------------- ;模块名称:LCD_write_data(); ;功 能:LCD1602写数据函数 ;占用资源: P2.0--RS(LCD_RS),P2.1--RW(LCD_RW),P2.2--E(LCD_E). ;参数说明:dat为写数据参数 ;创建日期:2008.08.15 ;版 本:FV1.0(函数版本Function Version) ;修改日期:-- ;修改说明:-- ;-------------------------------------*/ void LCD_write_data(uchar dat) { delay_n10us(10); LCD_RS=1; //数据 LCD_RW=0; //写入 LCD_E=1; //允许 LCD_DB=dat; delay_n10us(10); LCD_E=0; delay_n10us(10); } /*-------------------------------------- ;模块名称:LCD_disp_char(); ;功 能:LCD1602显示一个字符函数,在某个屏幕位置上显示一个字符,X(0-15),y(1-2)。 ;占用资源:-- ;参数说明:X为1602的列值(取值范围是0-15),y为1602的行值(取值范围是1-2),dat为所要显示字符对应的地址参数。 ;创建日期:2008.08.15 ;版 本:FV1.0(函数版本Function Version) ;修改日期:-- ;修改说明:-- ;-------------------------------------*/ void LCD_disp_char(uchar x,uchar y,uchar dat) { uchar address; if(y==1) address=0x80+x; else address=0xc0+x; LCD_write_command(address); LCD_write_data(dat); } /*-------------------------------------- ;模块名称:LCD_disp_str(); ;功 能:LCD1602显示字符串函数,在某个屏幕起始位置{X(0-15),y(1-2)}上显示一个字符串。 ;占用资源:-- ;参数说明:X为1602的列值(取值范围是0-15),y为1602的行值(取值范围是1-2),str为所要显示字符串对应的指针参数。 ;创建日期:2008.08.16 ;版 本:FV1.0(函数版本Function Version) ;修改日期:-- ;修改说明:-- ;-------------------------------------*/ void LCD_disp_str(uchar x,uchar y,uchar *str) { uchar address; if(y==1) address=0x80+x; else address=0xc0+x; LCD_write_command(address); while(*str!=' |