历史上的今天
今天是:2025年03月03日(星期一)
2020年03月03日 | 实现单片机计算器与LCD1602字幕滚动
2020-03-03 来源: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
史海拾趣
|
在wince下调用软键盘,代码如下 void CRecorderDlg::OnBnClickedButton6() { // TODO: Add your control notification handler code here SipShowIM(SIPF_ON); //Shows&nb ...… 查看全部问答> |
|
我想把一个带 透明通道的bitmap作为前景贴到一个不带透明通道的背景bitmap上,试了几种方法 都不理想,包括 TransparentBlt(...),alphablend(...),还使用过maskdc 的方法,都不理想。 前两种方法把我的小的前景,拉伸到跟背景一样大;而且Transpa ...… 查看全部问答> |
|
前几天取汉字模从网上下个软件,不太好,就因为取然的格式带H地,我要C语言数组地,以前用过清华蓬远的取模软件,我认为是最好地,今天翻出特发上来,大家共享,我也MARK,省得以后再找不到,呵呵… 查看全部问答> |
|
今天连续看了两篇关于加密方面的帖子,感觉自己应该友情奉献一回了~~~ 设想一种加密办法,大家看看可行吗? 关于STM32F器件电子签名以及加密问题-请指点 今日方知STM32的UID为96位即12个字节,以前知道STM32内嵌CRC32. 网上在线CRC演算工 ...… 查看全部问答> |




