历史上的今天
今天是:2024年09月10日(星期二)
2020年09月10日 | 能够实现单片机计算器与LCD1602字幕滚动的源程序
2020-09-10 来源:51hei
当你按计算器部分时,自动切换到计算器,按字幕滚动方式时,自动切换到字幕滚动


单片机源程序如下:
/*
接盘按键说明:
--------------------------------------------------
| 7 | 8 | 9 | / |
- - - - - - - - - - - - -
| 4 | 5 | 6 | * |
- - - - - - - - - - - - -
| 1 | 2 | 3 | - |
- - - - - - - - - - - - -
| C | 0 | = | + |
--------------------------------------------------*/
//操作简介
// 按第一个数,再按'+-*/',再按'='显示出结果,然后按C清屏
// 加最大9999+9999=19998
// 减最大9999-0 =9999
// 乘最大9999*9999=99980001
// 除 1/9=0.1111 保留小数点后4位
#include #define uint unsigned int #define uchar unsigned char //--------LCD1602------------------- //P00-07==== D0-7 sbit rs=P2^6; //指令or数据 sbit wela=P2^5; //读or写 sbit lcden=P2^7; //使能信号 //--------LCD1602------------------- //--------KEY----------------------- //P1口 //--------KEY----------------------- uchar code table[]= " "; long int data_a,data_b; //第一个数和第二个数 long int data_c; //计算结果 uchar a1[16]="I love huihui"; //显示内容 sbit stop=P3^2 ; sbit sp=P3^4; sbit czs=P3^3; uchar dispaly[10]; //显示缓冲 /***************延迟函数*************/ void delay(uchar z) { uchar y; for(z;z>0;z--) for(y=0;y<110;y++); } //************************************************************************/ // 描述: 延时t us函数 //************************************************************************/ void LCD_Delay_us(unsigned int t) { while(t--); //t=0,退出 } //************************************************************************/ // 描述: 延时t ms函数 //************************************************************************/ void LCD_Delay_ms(unsigned int t) { unsigned int i,j; for(i=0;i ; } //************************************************************************/ // 描述: 1602液晶写指令 //************************************************************************/ void write_com(uchar com) //1602液晶写指令 { rs=0; //写指令 lcden=0; //使能1602 P0=com; //写入指令com LCD_Delay_ms(1); //延时1ms lcden=1; //使能1602 LCD_Delay_ms(2); //延时2ms lcden=0; //使能1602 } //************************************************************************/ // 描述:1602液晶写数据 //************************************************************************/ void write_date(uchar date) //1602液晶写数据 { rs=1; //写数据 lcden=0; //使能1602 P0=date; //写入数据date LCD_Delay_ms(1); //延时1ms lcden=1; //使能1602 LCD_Delay_ms(2); //延时2ms lcden=0; //使能1602 } //************************************************************************/ // 描述:指定x,y写入字符函数 //************************************************************************/ void W_lcd(unsigned char x,unsigned char y,unsigned char Data) { if (y == 0){write_com(0x80 + x);} //第一行 else{write_com(0xc0 + x);} //第二行 write_date( Data); //写入数据 } //指定x,y写入字符串函数 void LCD_Write_String(unsigned char x,unsigned char y,unsigned char *s) { if (y == 0){write_com(0x80 + x);} //第一行 else{write_com(0xC0 + x);} //第二行 while (*s) // {write_date( *s); s++;} //写入数据 } //************************************************************************/ // 描述:初始化液晶,及画面初始化 //************************************************************************/ void init_lcd(void) //初始化液晶,及画面初始化 { wela=0; //写液晶 lcden=0; //使能1602 write_com(0x38); //8 位总线,双行显示,5X7 的点阵字符 LCD_Delay_us(100); //延时100us write_com(0x0c); //开显示,无光标,光标不闪烁 write_com(0x06); //光标右移动 write_com(0x01); //清屏 write_com(0x80); //DDRAM 地址归0 } //************************************************************************/ // 描述: 反转法键盘扫描 //************************************************************************/ short keycheckdown() /* 反转法键盘扫描 */ { short temp1,temp2,temp,a=0xff; P1=0xf0; /* 输入行值(或列值) */ LCD_Delay_ms(20); /* 延时 */ temp1=P1; /* 读列值(或行值) */ P1=0xff; LCD_Delay_ms(20); /* 延时 */ P1=0x0f; /* 输入列值(或行值) */ LCD_Delay_ms(20); /* 延时 */ temp2=P1; /* 读行值(或列值) */ P1=0xff; temp=(temp1&0xf0)|(temp2&0xf); /* 将两次读入数据组合 */ switch(temp) /* 通过读入数据组合判断按键位置 */ { case 0x77 :a=1;break;// 按键+a=0x0a case 0x7b :a=2; break;// 按键= a=0x0e case 0x7d :a=3; break;// 按键0a=0 case 0x7e :a=0x0a; break;// 按键CEa=0x0f case 0xe7 :a=0x0f;break;// 按键/a=0x0d case 0xeb :a=0;break; // 按键9a=0x9 case 0xed :a=0x0e;break; // 按键8a=0x8
史海拾趣
|
电子产品在汽车中日益突出的重要性引发了对低成本、高可靠性传感器及传动装置日益增长的需求。这些器件并非独立存在,而是必须与系统的主电子控制单元 (ECU) 进行通信。过去的传感器/传动装置通信通常采用单向模拟信号,每一远程设备都采用自己的 ...… 查看全部问答> |
|
在PCB设计中,布线是完成产品设计的重要步骤,可以说前面的准备工作都是为它而做的, 在整个PCB中,以布线的设计过程限定最高,技巧最细、工作量最大.PCB布线有单面布线、 双面布线及多层布线.布线的方式也有两种:自动布线及交互式布线,在自动布线之前, ...… 查看全部问答> |
|
宽景成像技术是利用常规扫查探头生成宽景图像的过程。 常规的超声探头扫查诊断时,医生可实时观察到探头所在体表切面的图像,然后通过不断地移动探头,观察周围较大器官的组织结构,并选择保存若干典型切面,并依据切面上解剖结构的回声性状进行诊 ...… 查看全部问答> |
|
各位前辈好! 目前我在练习的一些CE的程式 是套用我PB所建立的SDK所写! 这SDK的project是使用厂商的BSP所创 请问这样我程序撰写出来可用的平台是所有CE平台都可用吗? 还是会有所限制! 因为我目前 有一个对话盒的程序,在别块母板上执行会出现 ...… 查看全部问答> |
|
【关注】《ARM嵌入式常用模块与综合系统设计实例精讲》练习题与答案 本文转引自 广告,被过滤 ARM技术讨论版 广告,被过滤 非常详细的问题集锦,相信朋友们看过之后会对整个嵌入式ARM有一个更高远更深刻的认识。 第1章: 填空题 1.ARM内核有四个功能模块,即______、______、______、______,可供生产厂商根据不 ...… 查看全部问答> |
|
pxa255+wce4.2系统,nand flash一共8192个block,开机检测坏块时,前面1000个左右非常慢,后面的非常快,不知道什么原因?我把FMD_GetBlockStatus设置为固定值还是同样的结果...是不是FAL层对不同的block处理过程不一样,导致检测时 ...… 查看全部问答> |
|
嵌入式技术狂欢-全国首家移植和破解Google手机系统Android于AT91SAM926x平台活动 纯技术 免费技术狂欢 什么是IT人最兴奋的时刻? 那一定不是BABY FACE中摇曳的漂亮MM! 而是经过几番挑灯夜战,DIY成功后发自内心的狂喜! 这里我们为技术爱好者安排与技术狂人面对面交流的机会! 这里有最前沿的技术和最让人兴 ...… 查看全部问答> |
|
ST代理商招马达控制应用FAE 一人。如有兴趣的可将简历发到我的邮箱(grant_jx@163.com),会帮忙推荐的。简历需注明薪资要求。 要求: 1、熟悉电机控制应用(PMSM、BLDC...); 2、至少使用过一种MCU、DSP开发过电机控制应用的产品, ...… 查看全部问答> |




