[MCU新闻] N76E616带LCD驱动

[复制链接]
737|10
 楼主 | 2017-6-26 11:04 | 显示全部楼层

新唐N76E616高速1T 8051单片机系列,自带LCD显示屏驱动电路,提供高达 -40~105℃ 的工作温度范围,以满足严苛的工业电子应用环境。宽电压工作范围 2.4V 至 5.5V、11.059 MHz内建RC晶振、并内建Data Flash、欠压检测、高抗干扰能力(ESD HBM 8KV, MM 400V/EFT 4KV)、支持在线系统编程(ISP) 、支持在线应用程序更新(IAP)和在线电路编程(ICP),提供LQFP48封装。

应用领域 :

工业控制、家电、仪器仪表、温度控制、电源管理等领域。

关键特性:

  • 内核(core)
    • 1 T 8051 微 处理器
    • 工件频率 可达 16MHz
    • 工作电压 : 2.4V to 5.5V
    • 工作温度 : -40 ℃ ~105 ℃
  • 内存(memory)
    • 18 KB 应用 程序
    • 内嵌 512B SRAM
    • 可配置 的 Data Flash
    • 支持 在线系统编程 ISP(In-System Programming)
    • 支持 在线电路编 ICP(In-Circuit Programming)
    • 支持在线应用程序更新 IAP(In-Application Programming)
  • 模数转换器(ADC)
    • 提供 8 通道
    • 10 位分辨率
    • 可达 150 k SPS ( 每秒采样率 )
  • LCD 驅動能力
    • 3x32, 4x32和6x30 COM/SEG LCD
  • 通讯接口(connectivity)
    • 一组 I²C ( 可达 400 kHz)
    • 二组 UART
  • 时钟控制(clock control)
    • 外部晶振 2 to 16 MHz
    • 全温全压 ± 5 % 11.059 MHz 内 RC 晶振
    • 支持 32.768 kHz 外部晶振

| 2017-6-26 18:39 | 显示全部楼层
小家电都是要性价比高的,新唐的完全可以。
| 2017-6-26 18:42 | 显示全部楼层
  1. /*---------------------------------------------------------------------------------------------------------*/
  2. /*                                                                                                         */
  3. /* Copyright(c) 2015 Nuvoton Technology Corp. All rights reserved.                                         */
  4. /*                                                                                                         */
  5. /*---------------------------------------------------------------------------------------------------------*/

  6. //***********************************************************************************************************
  7. //  Nuvoton Technoledge Corp.
  8. //  Website: http://www.nuvoton.com
  9. //  E-Mail : MicroC-8bit@nuvoton.com
  10. //  Date   : Sep/1/2015
  11. //***********************************************************************************************************

  12. //***********************************************************************************************************
  13. //  File Function: N76E616 ADC demo code
  14. //***********************************************************************************************************

  15. #include <stdio.h>
  16. #include "N76E616.h"
  17. #include "Version.h"
  18. #include "Typedef.h"
  19. #include "Define.h"
  20. #include "SFR_Macro.h"
  21. #include "Common.h"
  22. #include "Delay.h"

  23. /*
  24. //-------- <<< Use Configuration Wizard in Context Menu >>> ------------------
  25. //
  26. //<e0> System Clock Source Configuration
  27. // <o1> System Clock Source Selection
  28. //      <0=> 2~16MHz    XTAL
  29. //      <1=> 32.768KHz  XTAL
  30. //      <2=> 11.0592MHz Internal
  31. //      <3=> 10KHz      Internal
  32. //      <4=> OSC-In     External
  33. //</e>
  34. //
  35. //<e2> Clock Divider Configuration
  36. //     <o3.0..7>  System Clock Source Devider <1-255:1>
  37. //                     <i> Fsys = (System Clock Source) / (2 * Devider)
  38. //</e>
  39. //
  40. //<h> ADC Option
  41. // <o4.0..3> ADC Pin Selection
  42. //      <0=> AIN0 (P00) <1=> AIN1 (P01) <2=> AIN2 (P02) <3=> AIN3 (P03)
  43. //      <4=> AIN4 (P04) <5=> AIN5 (P05) <6=> AIN6 (P06) <7=> AIN7 (P07)
  44. //      <8=> AIN8 (P26) <9=> AIN9 (P20) <10=> Band-Gap
  45. //
  46. // <o5.0..2> ADC Divider Selection
  47. //      <0=> Fsys/1  <1=> Fsys/2   <2=> Fsys/4   <3=> Fsys/8
  48. //      <4=> Fsys/16 <5=> Fsys/32  <6=> Fsys/64  <7=> Fsys/128
  49. //
  50. //</h>
  51. //
  52. //-------- <<< end of configuration section >>> ------------------------------
  53. */

  54. #define SYS_CLK_EN      0
  55. #define SYS_SEL         2
  56. #define SYS_DIV_EN      0                   //0: Fsys=Fosc, 1: Fsys = Fosc/(2*CKDIV)
  57. #define SYS_DIV         1

  58. #define ADC_PIN         0
  59. #define ADC_DIV         2

  60. bit BIT_TMP;
  61. /******************************************************************************
  62. * FUNCTION_PURPOSE: ADC interrupt Service Routine
  63. ******************************************************************************/
  64. void ADC_ISR (void) interrupt 11
  65. {
  66.     clr_ADCF;                               //clear ADC interrupt flag
  67. }
  68. /******************************************************************************
  69. * FUNCTION_PURPOSE: ADC Pin Select
  70. ******************************************************************************/
  71. void ADC_Pin_Select (void)
  72. {
  73.     #if   ADC_PIN == 0                      //P0.0
  74.           ADCCON0 = 0x00;                   //select ADC pin
  75.           set_P0M1_0;                       //set ADC pin is input only mode
  76.           clr_P0M2_0;
  77.           set_P00DIDS;                      //disable digital connection
  78.     #elif ADC_PIN == 1                      //P0.1
  79.           ADCCON0 = 0x01;                   //select ADC pin
  80.           set_P0M1_1;                       //set ADC pin is input only mode
  81.           clr_P0M2_1;
  82.           set_P01DIDS;                      //disable digital connection
  83.     #elif ADC_PIN == 2                      //P0.2
  84.           ADCCON0 = 0x02;                   //select ADC pin
  85.           set_P0M1_2;                       //set ADC pin is input only mode
  86.           clr_P0M2_2;
  87.           set_P02DIDS;                      //disable digital connection
  88.     #elif ADC_PIN == 3                      //P0.3
  89.           ADCCON0 = 0x03;                   //select ADC pin
  90.           set_P0M1_3;                       //set ADC pin is input only mode
  91.           clr_P0M2_3;
  92.           set_P03DIDS;                      //disable digital connection
  93.     #elif ADC_PIN == 4                      //P0.4
  94.           ADCCON0 = 0x04;                   //select ADC pin
  95.           set_P0M1_4;                       //set ADC pin is input only mode
  96.           clr_P0M2_4;
  97.           set_P04DIDS;                      //disable digital connection
  98.     #elif ADC_PIN == 5                      //P0.5
  99.           ADCCON0 = 0x05;                   //select ADC pin
  100.           set_P0M1_5;                       //set ADC pin is input only mode
  101.           clr_P0M2_5;
  102.           set_P05DIDS;                      //disable digital connection
  103.     #elif ADC_PIN == 6                      //P0.6
  104.           ADCCON0 = 0x06;                   //select ADC pin
  105.           set_P0M1_6;                       //set ADC pin is input only mode
  106.           clr_P0M2_6;
  107.           set_P06DIDS;                      //disable digital connection
  108.     #elif ADC_PIN == 7                      //P0.7
  109.           ADCCON0 = 0x07;                   //select ADC pin
  110.           set_P0M1_7;                       //set ADC pin is input only mode
  111.           clr_P0M2_7;
  112.           set_P07DIDS;                      //disable digital connection
  113.     #elif ADC_PIN == 8                      //P2.6
  114.           ADCCON0 = 0x08;                   //select ADC pin
  115.           set_P2M1_6;                       //set ADC pin is input only mode
  116.           clr_P2M2_6;
  117.           set_P26DIDS;                      //disable digital connection
  118.     #elif ADC_PIN == 9                      //P2.0
  119.           ADCCON0 = 0x09;                   //select ADC pin
  120.           set_P2M1_0;                       //set ADC pin is input only mode
  121.           clr_P2M2_0;
  122.           set_P20DIDS;                      //disable digital connection
  123.     #else
  124.           ADCCON0 |= 0x0F;                  //band-gap 1.25V
  125.     #endif
  126. }
  127. /******************************************************************************
  128. * FUNCTION_PURPOSE: ADC Clock Divider Select
  129. ******************************************************************************/
  130. void ADC_DIV_Select (void)
  131. {
  132.     #if   ADC_DIV == 0
  133.           clr_ADCDIV2;
  134.           clr_ADCDIV1;
  135.           clr_ADCDIV0;
  136.     #elif ADC_DIV == 1
  137.           clr_ADCDIV2;
  138.           clr_ADCDIV1;
  139.           set_ADCDIV0;
  140.     #elif ADC_DIV == 2      //Default
  141.           clr_ADCDIV2;
  142.           set_ADCDIV1;
  143.           clr_ADCDIV0;
  144.     #elif ADC_DIV == 3
  145.           clr_ADCDIV2;
  146.           set_ADCDIV1;
  147.           set_ADCDIV0;
  148.     #elif ADC_DIV == 4
  149.           clr_ADCDIV2;
  150.           clr_ADCDIV1;
  151.           set_ADCDIV0;
  152.     #elif ADC_DIV == 5
  153.           set_ADCDIV2;
  154.           clr_ADCDIV1;
  155.           clr_ADCDIV0;
  156.     #elif ADC_DIV == 6
  157.           set_ADCDIV2;
  158.           clr_ADCDIV1;
  159.           set_ADCDIV0;
  160.     #elif ADC_DIV == 7
  161.           set_ADCDIV2;
  162.           set_ADCDIV1;
  163.           clr_ADCDIV0;
  164.     #elif ADC_DIV == 8
  165.           set_ADCDIV2;
  166.           set_ADCDIV1;
  167.           set_ADCDIV0;
  168.     #endif
  169. }
  170. /******************************************************************************
  171. * FUNCTION_PURPOSE: ADC Initial
  172. ******************************************************************************/
  173. void ADC_Initial (void)
  174. {
  175.     set_ADCEN;
  176.     ADC_Pin_Select();                           //Select ADC Pin
  177.     ADC_DIV_Select();                           //Set ADC Clock Divider
  178. }

  179. /******************************************************************************
  180. The main C function.  Program execution starts
  181. here after stack initialization.
  182. ******************************************************************************/
  183. void main (void)
  184. {
  185.     UINT8 i;
  186.    
  187.     /* Note
  188.        MCU power on system clock is HIRC (11.0592MHz), so Fsys = 11.0592MHz
  189.     */
  190.    
  191.     Set_All_GPIO_Quasi_Mode();

  192.     #if DEBUG_PORT == 0
  193.         InitialUART0_Timer1_Type1(9600);            /* 9600 Baud Rate*/
  194.     #elif DEBUG_PORT == 1
  195.         InitialUART1_Timer3(9600);                  /* 9600 Baud Rate*/
  196.     #endif

  197.     Show_FW_Version_Number_To_PC();

  198.     printf ("\n*===================================================================");
  199.     printf ("\n*  Name: N76E616 ADC Demo Code.");
  200.     printf ("\n*===================================================================\n");
  201.    
  202.     /* Change system closk source */
  203.     #if SYS_CLK_EN == 1
  204.         #if   SYS_SEL == 0
  205.             System_Clock_Select(E_HXTEN);   //Fosc = 2~16MHz XTAL
  206.         #elif SYS_SEL == 1
  207.             System_Clock_Select(E_LXTEN);   //Fosc = 32.768KHz XTAL
  208.         #elif SYS_SEL == 2
  209.             System_Clock_Select(E_HIRCEN);  //Fosc = 11.0592MHz Internal RC
  210.         #elif SYS_SEL == 3
  211.             System_Clock_Select(E_LIRCEN);  //Fosc = 10KHz Internal RC
  212.         #elif SYS_SEL == 4
  213.             System_Clock_Select(E_OSCEN);   //Fosc = OSC-In External OSC
  214.         #endif
  215.     #endif
  216.    
  217.     #if SYS_DIV_EN == 1
  218.         CKDIV = SYS_DIV;                        //Fsys = Fosc / (2* CLKDIV) = Fcpu
  219.     #endif
  220.    
  221.     for(i=0;i<3;i++)
  222.     {
  223.         P02 = 0;
  224.         Timer0_Delay1ms(200);
  225.         P02 = 1;
  226.         Timer0_Delay1ms(200);
  227.     }

  228.     ADC_Initial();
  229.    
  230.     while(1)
  231.     {
  232.         clr_ADCF;
  233.         set_ADCS;                               //Trigger ADC start conversion
  234.         #if 0                                   //Polling
  235.             while(ADCF == 0);
  236.             ADCF = 0;
  237.         #else                                   //Interrupt
  238.             EADC = 1;
  239.             EA = 1;
  240.             set_IDLE;                           //Enter idle mode
  241.         #endif
  242.         printf ("\n*  ADC conver value = %d",(UINT16)ADCRH);
  243.         Timer0_Delay1ms(100);
  244.     }
  245. }

复制代码
| 2017-6-26 18:43 | 显示全部楼层
例程序也是丰富多彩,ADC几乎每个通道都有了。
| 2017-6-28 14:12 | 显示全部楼层
讲的好,鼓掌  
| 2017-6-29 10:07 | 显示全部楼层
将的太好了,这个LCD用于小电器给力啊。
| 2018-11-6 17:22 | 显示全部楼层
LCD的驱动有点难。
| 2018-11-8 16:24 | 显示全部楼层
没看懂啊,官方应该给个库函数的。
| 2018-11-12 19:53 | 显示全部楼层
之前以为LCD驱动跟LED是一样的呢,后来才发现不是那样
扫描二维码,随时随地手机跟帖
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复

您需要登录后才可以回帖
登录 | 注册
高级模式
我要创建版块 申请成为版主

论坛热帖

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