找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 6231|回复: 3
打印 上一主题 下一主题
收起左侧

LPC2138+LCD1602计数器proteus仿真与源码 添加注释的和改管脚

[复制链接]
跳转到指定楼层
楼主
LPC2138仿真简单计算器的原理图如下(proteus仿真工程文件可到本帖附件中下载)lcd1602液晶显示


LPC2138源程序如下:
  1. #define IN_TARGET
  2. #include "config.h"
  3. #define LED1 1 << 18         // P0.18 控制LED1

  4. /*********************************************************************************************************
  5. ** 函数名称: IRQ_Exception
  6. ** 功能描述: 中断异常处理程序,用户根据需要自己改变程序
  7. ********************************************************************************************************/
  8. void __irq IRQ_Exception(void)
  9.         {
  10.     while(1);                   // 这一句替换为自己的代码
  11.         }

  12. /*********************************************************************************************************
  13. ** 函数名称: FIQ_Exception
  14. ** 功能描述: 快速中断异常处理程序,用户根据需要自己改变程序
  15. ********************************************************************************************************/
  16. void FIQ_Exception(void)
  17. {         uint32 i;
  18.         i = IO0SET;                 // 读取当前LED1的控制值
  19.         if ((i & LED1) == 0) IO0SET = LED1;
  20.         else IO0CLR = LED1;
  21. /* 等待外部中断信号恢复为高电平,若信号保持为低电平,中断标志会一直置位 */
  22.         while ((EXTINT & 0x01) != 0)
  23.         { EXTINT = 0x01;         // 清除EINT0 中断标志
  24.         }
  25. }
  26. /*********************************************************************************************************
  27. ** 函数名称: TargetInit
  28. ** 功能描述: 目标板初始化代码,在需要的地方调用,根据需要改变
  29. ********************************************************************************************************/
  30. void TargetInit(void)
  31. {
  32.     /* 添加自己的代码 */
  33. }

  34. /*********************************************************************************************************
  35. ** 函数名称: TargetResetInit
  36. ** 功能描述: 调用main函数前目标板初始化代码,根据需要改变,不能删除
  37. ********************************************************************************************************/
  38. void TargetResetInit(void)
  39. {
  40. /* 设置存储器映射方式 */
  41. #ifdef DEBUG_RAM                                 // 如果在片内RAM 调试
  42. MEMMAP = 0x02;                                         // 映射到片内RAM
  43. #endif
  44. #ifdef DEBUG_FLASH                                 // 如果在片内FLASH 调试
  45. MEMMAP = 0x01;                                         // 映射到片内FLASH
  46. #endif
  47. #ifdef IN_CHIP                                         // 如果在片内FLASH 发布
  48. MEMMAP = 0x01;                                         // 映射到片内FLASH
  49. #endif

  50. /* 设置系统各部分时钟 */
  51.     PLLCON = 1;                                        // 设置激活但未连接PLL
  52. #if ((Fcclk / 4) / Fpclk) == 1        // 此值由系统硬件决定
  53.     VPBDIV = 0;
  54. #endif
  55. #if ((Fcclk / 4) / Fpclk) == 2        // 此值由系统硬件决定
  56.     VPBDIV = 2;
  57. #endif
  58. #if ((Fcclk / 4) / Fpclk) == 4        // 此值由系统硬件决定
  59.     VPBDIV = 1;
  60. #endif

  61. /* 设定PLL 的乘因子M 和除因子P 的值 */
  62. #if (Fcco / Fcclk) == 2
  63.     PLLCFG = ((Fcclk / Fosc) - 1) | (0 << 5);
  64. #endif
  65. #if (Fcco / Fcclk) == 4
  66.     PLLCFG = ((Fcclk / Fosc) - 1) | (1 << 5);
  67. #endif
  68. #if (Fcco / Fcclk) == 8
  69.     PLLCFG = ((Fcclk / Fosc) - 1) | (2 << 5);
  70. #endif
  71. #if (Fcco / Fcclk) == 16
  72.     PLLCFG = ((Fcclk / Fosc) - 1) | (3 << 5);
  73. #endif
  74.     PLLFEED = 0xaa;                                                // 发送PLL馈送序列,执行设定PLL的动作
  75.     PLLFEED = 0x55;
  76.     while((PLLSTAT & (1 << 10)) == 0);         // 等待PLL锁定
  77.     PLLCON = 3;                                                           // 设置激活并连接PLL
  78.     PLLFEED = 0xaa;                                                   // 发送PLL 馈送序列,执行激活和连接动作
  79.     PLLFEED = 0x55;
  80.    
  81. /* 设置存储器加速模块 */
  82.     MAMCR = 0;                                                        // 禁止MAM功能
  83. #if Fcclk < 20000000
  84.     MAMTIM = 1;                                                        // 系统时钟低于20M,建议设置为1
  85. #else
  86. #if Fcclk < 40000000
  87.     MAMTIM = 2;                                                        // 系统时钟在20M~40M之间,建议设置为2
  88. #else
  89.     MAMTIM = 3;                                                        // 系统时钟高于40M,建议设置为3
  90. #endif
  91. #endif
  92.     MAMCR = 2;                                                        // 使能MAM功能
  93.       
  94. /* 初始化VIC */
  95.     VICIntEnClr = 0xffffffff;           // 清零所有中断
  96.     VICVectAddr = 0;                                        // 默认向量地址寄存器
  97.     VICIntSelect = 0;                                        // 0:对应的中断请求分配为IRQ,  1:对应的中断请求分配为FIQ。

  98.     /* 添加自己的代码 */

  99. }

  100. /*******************************************************************************************
  101. ** 以下为一些与系统相关的库函数的实现,用户可以根据自己的要求修改
  102. *******************************************************************************************/
  103. #include "rt_sys.h"

  104. // for printf and scanf fuctions
  105. int sendchar (int ch)  {                 /* Write character to Serial Port    */
  106.   while (!(U0LSR & 0x20));
  107.   return (U0THR = ch);
  108. }

  109. int getkey (void)  {                     // Read character from Serial Port
  110.   while (!(U0LSR & 0x01));
  111.   return (U0RBR);
  112. }

  113. int fputc(int ch,FILE *f)
  114. {
  115.   return (sendchar(ch));
  116. }

  117. int fgetc(FILE *f) {
  118.   return (sendchar(getkey()));
  119. ……………………

  120. …………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码


(本文是转载内容,发现仿真工程打不开,求大家帮忙找下原因):
添加注释的和改管脚.rar (193.09 KB, 下载次数: 96)


分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏6 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:672798 发表于 2020-6-23 11:09 来自手机 | 只看该作者
仿真电路用不了,也不知道什么原因
回复

使用道具 举报

板凳
ID:789272 发表于 2020-6-25 11:30 来自手机 | 只看该作者
513514991 发表于 2020-6-23 11:09
仿真电路用不了,也不知道什么原因

压缩包为什么不能下载
回复

使用道具 举报

地板
ID:629982 发表于 2020-11-19 19:28 | 只看该作者
电路无法仿真
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表