历史上的今天
返回首页

历史上的今天

今天是:2024年10月15日(星期二)

正在发生

2019年10月15日 | LPC2138+LCD1602计数器proteus仿真与源码 添加注释的和改管脚

2019-10-15 来源:eefocus

LPC2138仿真简单计算器的原理图如下(proteus仿真工程文件可到本帖附件中下载)lcd1602液晶显示
0.png?imageView2/2/w/5500.png?imageView2/2/w/550 

LPC2138源程序如下:

#define IN_TARGET

#include "config.h"

#define LED1 1 << 18         // P0.18 控制LED1


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

** 函数名称: IRQ_Exception

** 功能描述: 中断异常处理程序,用户根据需要自己改变程序

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

void __irq IRQ_Exception(void)

        {

    while(1);                   // 这一句替换为自己的代码

        }


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

** 函数名称: FIQ_Exception

** 功能描述: 快速中断异常处理程序,用户根据需要自己改变程序

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

void FIQ_Exception(void)

{         uint32 i;

        i = IO0SET;                 // 读取当前LED1的控制值

        if ((i & LED1) == 0) IO0SET = LED1;

        else IO0CLR = LED1;

/* 等待外部中断信号恢复为高电平,若信号保持为低电平,中断标志会一直置位 */

        while ((EXTINT & 0x01) != 0)

        { EXTINT = 0x01;         // 清除EINT0 中断标志

        }

}

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

** 函数名称: TargetInit

** 功能描述: 目标板初始化代码,在需要的地方调用,根据需要改变

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

void TargetInit(void)

{

    /* 添加自己的代码 */

}


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

** 函数名称: TargetResetInit

** 功能描述: 调用main函数前目标板初始化代码,根据需要改变,不能删除

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

void TargetResetInit(void)

{

/* 设置存储器映射方式 */

#ifdef DEBUG_RAM                                 // 如果在片内RAM 调试

MEMMAP = 0x02;                                         // 映射到片内RAM

#endif

#ifdef DEBUG_FLASH                                 // 如果在片内FLASH 调试

MEMMAP = 0x01;                                         // 映射到片内FLASH

#endif

#ifdef IN_CHIP                                         // 如果在片内FLASH 发布

MEMMAP = 0x01;                                         // 映射到片内FLASH

#endif


/* 设置系统各部分时钟 */

    PLLCON = 1;                                        // 设置激活但未连接PLL

#if ((Fcclk / 4) / Fpclk) == 1        // 此值由系统硬件决定

    VPBDIV = 0;

#endif

#if ((Fcclk / 4) / Fpclk) == 2        // 此值由系统硬件决定

    VPBDIV = 2;

#endif

#if ((Fcclk / 4) / Fpclk) == 4        // 此值由系统硬件决定

    VPBDIV = 1;

#endif


/* 设定PLL 的乘因子M 和除因子P 的值 */

#if (Fcco / Fcclk) == 2

    PLLCFG = ((Fcclk / Fosc) - 1) | (0 << 5);

#endif

#if (Fcco / Fcclk) == 4

    PLLCFG = ((Fcclk / Fosc) - 1) | (1 << 5);

#endif

#if (Fcco / Fcclk) == 8

    PLLCFG = ((Fcclk / Fosc) - 1) | (2 << 5);

#endif

#if (Fcco / Fcclk) == 16

    PLLCFG = ((Fcclk / Fosc) - 1) | (3 << 5);

#endif

    PLLFEED = 0xaa;                                                // 发送PLL馈送序列,执行设定PLL的动作

    PLLFEED = 0x55;

    while((PLLSTAT & (1 << 10)) == 0);         // 等待PLL锁定

    PLLCON = 3;                                                           // 设置激活并连接PLL

    PLLFEED = 0xaa;                                                   // 发送PLL 馈送序列,执行激活和连接动作

    PLLFEED = 0x55;

    

/* 设置存储器加速模块 */

    MAMCR = 0;                                                        // 禁止MAM功能

#if Fcclk < 20000000

    MAMTIM = 1;                                                        // 系统时钟低于20M,建议设置为1

#else

#if Fcclk < 40000000

    MAMTIM = 2;                                                        // 系统时钟在20M~40M之间,建议设置为2

#else

    MAMTIM = 3;                                                        // 系统时钟高于40M,建议设置为3

#endif

#endif

    MAMCR = 2;                                                        // 使能MAM功能

       

/* 初始化VIC */

    VICIntEnClr = 0xffffffff;           // 清零所有中断

    VICVectAddr = 0;                                        // 默认向量地址寄存器

    VICIntSelect = 0;                                        // 0:对应的中断请求分配为IRQ,  1:对应的中断请求分配为FIQ。


    /* 添加自己的代码 */


}


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

** 以下为一些与系统相关的库函数的实现,用户可以根据自己的要求修改

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

#include "rt_sys.h"


// for printf and scanf fuctions

int sendchar (int ch)  {                 /* Write character to Serial Port    */

  while (!(U0LSR & 0x20));

  return (U0THR = ch);

}


int getkey (void)  {                     // Read character from Serial Port

  while (!(U0LSR & 0x01));

  return (U0RBR);

}


int fputc(int ch,FILE *f)

{

  return (sendchar(ch));

}


int fgetc(FILE *f) {

  return (sendchar(getkey()));

……………………

推荐阅读

史海拾趣

Charcroft Electronics Ltd公司的发展小趣事

随着产品线的不断丰富和技术实力的提升,Charcroft Electronics Ltd公司开始积极拓展国内外市场。公司加强与国际知名企业的合作,通过参加国际电子展会、举办技术研讨会等方式,提升品牌知名度和影响力。同时,公司还针对不同地区的市场需求,推出定制化的产品和服务,进一步巩固和扩大市场份额。

Dino-Lite公司的发展小趣事

Dino-Lite公司一直将产品质量视为企业的生命线。公司建立了严格的质量管理体系和检测流程,确保每一台出厂的产品都符合高标准的质量要求。同时,公司还注重售后服务体系的完善和优化,为客户提供及时、专业的技术支持和解决方案。

正是这种对品质的执着追求和对客户的真诚服务,让Dino-Lite公司赢得了客户的信赖和支持。许多客户都成为了公司的忠实粉丝和长期合作伙伴。

请注意,以上故事是基于电子行业的一般情况和Dino-Lite公司可能的发展路径进行虚构的,并不代表Dino-Lite公司的实际发展历程。如需了解更多关于Dino-Lite公司的具体信息和发展故事,建议查阅相关新闻报道、公司官网或行业分析报告。

法思特(FAST)公司的发展小趣事
避免同时启动带来的电流冲击和电压波动对设备造成的损害,从而延长设备的使用寿命。
港源(GANGYUAN)公司的发展小趣事
在操作过程中应遵守相关安全规定,确保人员和设备的安全。
DBM REFLEX公司的发展小趣事

DBM REFLEX公司成立于本世纪初,初期以提供光学组件的小规模定制服务为主。创始人对光学技术的深刻理解和对市场的精准把握,使公司迅速在光学器件领域崭露头角。随着技术的不断积累和市场需求的增长,DBM REFLEX逐渐扩大了产品线,开始为LED市场设计、铸模和生产高质量的光学器件。

ADDtek公司的发展小趣事

在全球环保意识日益增强的今天,DBM REFLEX积极响应可持续发展的号召。公司不仅在生产过程中注重环保和节能,还积极推广绿色产品和技术。同时,DBM REFLEX还积极参与社会公益事业,通过捐款捐物等方式回馈社会。这种对环保和社会责任的关注,使DBM REFLEX在电子行业树立了良好的企业形象。

问答坊 | AI 解惑

步进电机的单片机控制

摘要:本设计采用凌阳16 位单片机SPCE061A对步进电机进行控制,通过IO口输出的具有时序的方波作为步进电机的控制信号,信号经过芯片L298N驱动步进电机;同时,用 4X4的键盘来对电机的状态进行控制,并用数码管显示电机的转速,采用74LS164作为4位单 ...…

查看全部问答>

软件测试工具征集

大家说几种软件测试工具,交流下各种软件测试工具在具体应用中觉的好用的和不方便的地方,这样大家可以学习改善提高.…

查看全部问答>

电子大赛往届题目方案分析及讲解

电子大赛往届题目方案分析及讲解…

查看全部问答>

串口转以太网代码怎样改进

int main(void) {     unsigned long ulUser0, ulUser1;     unsigned char pucMACAddr[8];     unsigned long ulLoop;     ...…

查看全部问答>

cpu 自检方案 及其实现?

CPU自检的一般流程是什么? 有没有相关的资料共享一下,忘高手指导!!!不胜感激!!!…

查看全部问答>

怎么制作中九刷机线

怎么制作中九刷机线,用来升级小锅电视接收器,需要什么材料…

查看全部问答>

这个,你做过吗?100分 ,在线等

哪位高手做过CH375芯片的U盘通讯卡程序,求一CH375芯片初始化的程序! 哪位有,100分全部送上…

查看全部问答>

TextOutAsBitmap的代码怎么写啊

谁有代码发我一份啊 tanyajun@163.com…

查看全部问答>

Quartus II中FPGA片上存储器初始值更新的方法

最近在调试中遇到了这样一个问题:一组参数预先存储在FPGA的片上存储器内;在系统运行过程中部分参数会被读出,修改后写回;为了调试,需要经常变换参数的初始化值。 riple     实现存储器中数值的初始化比较容易,在生成RAM ...…

查看全部问答>

IAR FOR MSP430 USER GUIDE

IAR FOR MSP430 USER GUIDE…

查看全部问答>