历史上的今天
返回首页

历史上的今天

今天是: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        for(j=0;j<113;j++)                     //执行113次循环

        ;

}

//************************************************************************/

// 描述: 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

推荐阅读

史海拾趣

Fascomp公司的发展小趣事

为了进一步提升技术实力和市场竞争力,Fascomp积极寻求与国际知名企业的技术合作。通过与多家跨国公司的联合研发项目,Fascomp成功吸收和借鉴了国际先进的技术和管理经验。此外,公司还积极拓展海外市场,产品远销欧美、亚洲等多个国家和地区,进一步提升了公司的国际化水平。

CHONGQING PINGYANG ELECTRONICS CO.,LTD.公司的发展小趣事

重庆平洋电子有限公司,自其1998年3月创立之初,便扎根于重庆这片热土,开始了其在电子行业的探索之旅。当时,电子行业正处于快速发展的阶段,市场竞争激烈。然而,公司凭借对市场的敏锐洞察和对技术的执着追求,成功研发出多款电子元器件,逐渐在市场中站稳脚跟。

EPIGAP公司的发展小趣事

随着全球对环保问题的日益关注,EPIGAP公司也开始注重绿色环保和可持续发展。公司积极采用环保材料和生产工艺,减少生产过程中的污染物排放。同时,EPIGAP还加大了对可再生能源的研发力度,推动公司向绿色、低碳、循环发展的方向迈进。这一战略不仅符合全球环保趋势,也为公司赢得了良好的社会声誉。

Active-Semi公司的发展小趣事

为了进一步扩大市场份额,EPIGAP公司开始实施国际化战略。公司先后在多个国家和地区设立了办事处和研发中心,以便更好地了解当地市场需求和技术发展趋势。通过与国际客户的深入合作,EPIGAP公司的产品逐渐打入国际市场,赢得了广泛的认可和赞誉。

风华(FH)公司的发展小趣事

在光伏胶膜领域取得显著成就的同时,福斯特半导体也在不断探索新技术和新应用。公司在0BB(无边框背接触)技术方面取得了重大突破,并率先实现了商业化供货。0BB技术能够显著提升光伏组件的发电效率和可靠性,是光伏行业的重要创新之一。福斯特半导体在这一领域的成功不仅展示了公司的技术实力和市场敏锐度,也为公司赢得了更多高端客户的青睐和市场份额。

Condor公司的发展小趣事

福斯特半导体(这里假定为福斯特应用材料股份有限公司的半导体业务部门,因直接名为“福斯特半导体”的公司可能专注于不同领域)的母公司——杭州福斯特应用材料股份有限公司,最初并非涉足半导体行业。2003年,公司创始人林建华在纺织业取得成功后,决定跨界进军光伏胶膜行业。当时,国内光伏组件厂商所需的光伏胶膜主要依赖进口,市场被几家国际巨头垄断。林建华凭借在材料领域的深厚积累和技术优势,成功研制出EVA胶膜产品,并迅速占领市场。至2008年,福斯特已成为全球前三的EVA胶膜供应商,为光伏产业的发展奠定了坚实基础。这一跨界创新不仅推动了光伏胶膜行业的国产化进程,也为福斯特半导体后续在电子行业的拓展提供了宝贵的经验和资源。

问答坊 | AI 解惑

无形的屏幕

哇,我的电脑屏幕隐形了,成透明的了,这...这...怎么可能?淡定淡定,这不是灵异事件,奥秘来自于墙纸...厌倦了常规的墙纸当屏幕背景,那就看一下这一组怪异墙纸,它们会让你的屏幕变无形。但是事实是,屏幕还在,只不过是视觉欺骗了我们的感觉。 ...…

查看全部问答>

有人知道用920T的盒做个ARM9的板子,大约要多少钱吗?

有人知道用920T的盒做个ARM9的板子,大约要多少钱吗?芯片在哪买?…

查看全部问答>

能否根据windows驱动程序(release bin)编写linux驱动

有没有可能通过反编译等方式生成一个linux驱动 有没有捷径可以走…

查看全部问答>

请教一个简单的C51程序,

#include main() {         TMOD=0X10;         TH1=0XFE;         TL1=0X0C;         TR1=1;         ET1=1;       ...…

查看全部问答>

wince下调用软键盘的问题

在wince下调用软键盘,代码如下 void CRecorderDlg::OnBnClickedButton6() {         // TODO: Add your control notification handler code here         SipShowIM(SIPF_ON);  //Shows&nb ...…

查看全部问答>

在wince 下怎么能读取 一个像素 alpha 通道的值

我想把一个带 透明通道的bitmap作为前景贴到一个不带透明通道的背景bitmap上,试了几种方法 都不理想,包括 TransparentBlt(...),alphablend(...),还使用过maskdc 的方法,都不理想。 前两种方法把我的小的前景,拉伸到跟背景一样大;而且Transpa ...…

查看全部问答>

发个清华蓬远地取模软件

前几天取汉字模从网上下个软件,不太好,就因为取然的格式带H地,我要C语言数组地,以前用过清华蓬远的取模软件,我认为是最好地,今天翻出特发上来,大家共享,我也MARK,省得以后再找不到,呵呵…

查看全部问答>

一个晶振引发的问题

本来是51好板,就是CPU座松了,让同事搞一下变紧,拿回来突然不好用,仿真器上也不好用,本来屏幕可显开机画面,但怎么也搞不定,由于急有找了另一台机器总算把程序实验完,第二天对着这个坏板研究起来,首先是换51的40脚DIP座,小心得很,因为板上 ...…

查看全部问答>

菜农友情为STM32设计一种通用加密方法之原理

今天连续看了两篇关于加密方面的帖子,感觉自己应该友情奉献一回了~~~ 设想一种加密办法,大家看看可行吗? 关于STM32F器件电子签名以及加密问题-请指点 今日方知STM32的UID为96位即12个字节,以前知道STM32内嵌CRC32. 网上在线CRC演算工 ...…

查看全部问答>

急求一个实际应用中的反向比例运算放大电路

简要说明一下放大电路的原理和作用…

查看全部问答>