历史上的今天
返回首页

历史上的今天

今天是: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        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

                case 0xed :a=0x0e;break; //  按键8a=0x8

推荐阅读

史海拾趣

DILABS公司的发展小趣事

随着全球环保意识的提高,DILABS开始注重绿色生产。他们引入了先进的环保技术和设备,确保在生产过程中最大限度地减少废弃物和污染物的排放。同时,DILABS还积极推动电子产品的环保设计,帮助客户实现绿色采购和可持续发展。

中电熊猫(CEC)公司的发展小趣事

技术创新是中电熊猫持续发展的关键。公司不断深化技术改革,加大研发投入,推动产业升级。例如,在液晶面板生产线上,中电熊猫采用了世界一流的技术和设备,不仅提高了屏幕分辨率和良品率,还降低了生产成本。此外,中电熊猫还积极参与国家重大科研项目和行业标准制定工作,为行业发展做出了积极贡献。

博巨兴公司的发展小趣事

博巨兴公司始终秉持开放合作的理念,积极与高校和研究机构展开产学研合作。2008年至2010年间,公司先后与厦门大学、中南大学、湖南大学结成产学研型战略伙伴关系,共同推动芯片技术的研发与应用。同时,公司还不断拓展市场,在上海建立了分公司,并在顺德、厦门、天津、杭州、西安等地设立了办事处,为公司的长远发展奠定了坚实基础。

这些故事虽然基于虚构,但反映了博巨兴公司在电子行业发展中不断探索、创新、合作与拓展的历程。通过这些努力,博巨兴公司逐渐在芯片代理和研发领域取得了显著成绩,为电子行业的发展做出了积极贡献。

Danube Enterprise Co Ltd公司的发展小趣事

在稳固了国内市场地位之后,Danube开始将目光投向了全球市场。他们通过设立海外办事处、与当地企业合作等方式,积极开拓国际市场。Danube的产品凭借其卓越的品质和创新的设计,逐渐在国际市场上崭露头角。同时,公司还根据不同国家和地区的市场需求,推出了定制化的产品和服务,进一步增强了其市场竞争力。这些努力让Danube在全球电子行业中逐渐崭露头角,成为了一家备受瞩目的企业。

Electronic公司的发展小趣事

特斯拉,虽然是一家电动汽车公司,但其在电子行业的发展中也展现出了强大的跨界创新能力。特斯拉通过自主研发和生产电池、电机等核心零部件,成功将电动汽车的性能和品质提升到了新的高度。同时,特斯拉还积极探索自动驾驶、智能交通等前沿技术,不断推动电动汽车行业的变革和发展。特斯拉的跨界创新不仅颠覆了传统汽车行业的格局,也为电子行业带来了新的机遇和挑战。

请注意,以上故事框架仅供参考,具体细节和数据可能需要根据实际情况进行调整和补充。同时,由于篇幅限制,每个故事的字数可能无法满足500字以上的要求。

星海公司的发展小趣事

随着国内市场的饱和,星海公司开始实施国际化战略,积极拓展海外市场。公司积极参加国际展览和比赛,展示星海钢琴的品质和实力。同时,星海公司还与国际知名音乐院校和乐团建立合作关系,推动星海钢琴在国际市场的知名度和影响力。目前,星海钢琴已出口到世界60多个国家和地区,成为国际市场上备受瞩目的中国品牌。

问答坊 | AI 解惑

LIN及混合信号工艺的发展提升汽车传感器与传动装置性能

电子产品在汽车中日益突出的重要性引发了对低成本、高可靠性传感器及传动装置日益增长的需求。这些器件并非独立存在,而是必须与系统的主电子控制单元 (ECU) 进行通信。过去的传感器/传动装置通信通常采用单向模拟信号,每一远程设备都采用自己的 ...…

查看全部问答>

protell技术大全,很有用的

在PCB设计中,布线是完成产品设计的重要步骤,可以说前面的准备工作都是为它而做的, 在整个PCB中,以布线的设计过程限定最高,技巧最细、工作量最大.PCB布线有单面布线、 双面布线及多层布线.布线的方式也有两种:自动布线及交互式布线,在自动布线之前, ...…

查看全部问答>

超声宽景成像技术介绍

宽景成像技术是利用常规扫查探头生成宽景图像的过程。 常规的超声探头扫查诊断时,医生可实时观察到探头所在体表切面的图像,然后通过不断地移动探头,观察周围较大器官的组织结构,并选择保存若干典型切面,并依据切面上解剖结构的回声性状进行诊 ...…

查看全部问答>

有个问题没搞明白哈

  4096位置有同样的寄存器,干嘛用那么多,请各位看官评评理,这不是巨大的浪费么?…

查看全部问答>

使用BSP建立的SDK所写的程序

各位前辈好! 目前我在练习的一些CE的程式 是套用我PB所建立的SDK所写! 这SDK的project是使用厂商的BSP所创 请问这样我程序撰写出来可用的平台是所有CE平台都可用吗? 还是会有所限制! 因为我目前 有一个对话盒的程序,在别块母板上执行会出现 ...…

查看全部问答>

【关注】《ARM嵌入式常用模块与综合系统设计实例精讲》练习题与答案

本文转引自 广告,被过滤 ARM技术讨论版 广告,被过滤 非常详细的问题集锦,相信朋友们看过之后会对整个嵌入式ARM有一个更高远更深刻的认识。 第1章: 填空题 1.ARM内核有四个功能模块,即______、______、______、______,可供生产厂商根据不 ...…

查看全部问答>

NAND FLASH坏块检测时不同块的检测时间不同

    pxa255+wce4.2系统,nand flash一共8192个block,开机检测坏块时,前面1000个左右非常慢,后面的非常快,不知道什么原因?我把FMD_GetBlockStatus设置为固定值还是同样的结果...是不是FAL层对不同的block处理过程不一样,导致检测时 ...…

查看全部问答>

嵌入式技术狂欢-全国首家移植和破解Google手机系统Android于AT91SAM926x平台活动

纯技术  免费技术狂欢 什么是IT人最兴奋的时刻? 那一定不是BABY FACE中摇曳的漂亮MM! 而是经过几番挑灯夜战,DIY成功后发自内心的狂喜! 这里我们为技术爱好者安排与技术狂人面对面交流的机会! 这里有最前沿的技术和最让人兴 ...…

查看全部问答>

如何获取进程内各句柄的属性

在使用process explorer时,发现它能够显示出某个进程的所有句柄,例如该进程打开的所有文件句柄,请问这是怎么实现的。使用了哪个api函数…

查看全部问答>

招人STMCU马达控制FAE

ST代理商招马达控制应用FAE 一人。如有兴趣的可将简历发到我的邮箱(grant_jx@163.com),会帮忙推荐的。简历需注明薪资要求。 要求: 1、熟悉电机控制应用(PMSM、BLDC...); 2、至少使用过一种MCU、DSP开发过电机控制应用的产品, ...…

查看全部问答>