数码之家

 找回密码
 立即注册

QQ登录

只需一步,快速开始

微信登录

微信扫一扫,快速登录

搜索
查看: 3093|回复: 4

[C51] N76E616驱动4COM12SEG的LCD液晶屏程序(数码之家优先分享)

[复制链接]
发表于 2021-3-9 09:36:13 | 显示全部楼层 |阅读模式
  1. /*-----------------------------------------------------
  2.     ----D---        
  3.    |        |
  4.   G|        |C
  5.    |        |
  6.     ----F---
  7.    |        |
  8.   E|        |B
  9.    |        |
  10.     ----A---   、H
  11. //-----------------------------------------------------*/
  12. #include <N76E616.h>
  13. #include "Typedef.h"
  14. #include "Define.h"
  15. #include "Common.h"
  16. #include "Delay.h"
  17. #include "SFR_Macro.h"
  18. #define uchar unsigned char
  19. #define COM0    0x01
  20. #define COM1    0x02
  21. #define COM2    0x04
  22. #define COM3    0x08

  23. uchar num0,num1;
  24. bit BIT_TMP;
  25. /**************************************段码表**********************************************************
  26. * MCU Pin: COM0  COM1  COM2  COM3  SEG0 SEG1 SEG2 SEG3 SEG4 SEG5  SEG6 SEG7 SEG8 SEG9 SEG10 SEG11 SEG12
  27. * MCU Pin: P10   P11   P12   P13   P40  P41  P42  P43  P44  P45   P46  P14  P15  P16  P17   P20   P21
  28. * LCD Pin: 4     3     2     1     17   16   15   14   13   12    11   10    9    8    7     6     5
  29. * -----------------------------------------------------------------------------------------------------
  30. * COM0     COM0                    1E   1A   2E   2A   3E   3A    4E   4A   5E   5A   OFF    :    LOCK
  31. * COM1           COM1              1F   1B   2F   2B   3F   3B    4F   4B   5F   5B   ON    FRI   PAUSE
  32. * COM2                 COM2        1G   1C   2G   2C   3G   3C    4G   4C   5G   5C   EVENT THU   SCENT
  33. * COM3                       COM3  MON  1D   TUE  2D   SAT  3D    SUN  4D   5H   5D         WED   WORK
  34. *******************************************************************************************************/
  35. void Show_Pattern_In_LCD(uchar DISwei,uchar DISduan)
  36. {
  37.         uchar segABCD=0,segEFGH=0;
  38.         LCDSEG0 = SET_BIT0 | SET_BIT1 | SET_BIT2 | SET_BIT3 | SET_BIT4 | SET_BIT5 | SET_BIT6 | SET_BIT7;//使能SEG0EN-SEG7EN
  39.         LCDSEG1 = SET_BIT0 | SET_BIT1 | SET_BIT2 | SET_BIT3 | SET_BIT4 ;//使能SEG8EN-SEG12EN
  40.         switch(DISwei)//数码管位显示设置
  41.   {
  42.         case 1:
  43.             segABCD = 1;
  44.             segEFGH = 0;
  45.             break;
  46.         case 2:
  47.             segABCD = 3;
  48.             segEFGH = 2;
  49.             break;
  50.         case 3:
  51.             segABCD = 5;
  52.             segEFGH = 4;
  53.             break;
  54.                                 case 4:
  55.             segABCD = 7;
  56.             segEFGH = 6;
  57.             break;
  58.                                 case 5:
  59.             segABCD = 9;
  60.             segEFGH = 8;
  61.             break;
  62.                                 case 6:
  63.             segABCD = 11;
  64.             segEFGH = 10;
  65.             break;
  66.                                 case 7:
  67.             segABCD = 12;
  68.             segEFGH = 12;
  69.             break;
  70.         default:
  71.             break;
  72.   }
  73.         LCDPTR = segABCD;   //先设置将被点亮的ABCD地址赋值给LCD数据指针
  74.   switch(DISduan)     //设置将被点亮的ABCD数据像素COM0-COM3
  75.   {
  76.         case 0:
  77.             LCDDAT  = COM0 | COM1 | COM2 | COM3;
  78.             break;
  79.         case 1:
  80.             LCDDAT  = COM1 | COM2;
  81.             break;
  82.         case 2:
  83.             LCDDAT  = COM0 | COM2 | COM3;
  84.             break;
  85.         case 3:
  86.             LCDDAT  = COM0 | COM1 | COM2 | COM3;
  87.             break;
  88.         case 4:
  89.             LCDDAT  = COM1 | COM2;
  90.             break;
  91.         case 5:
  92.             LCDDAT  = COM0 | COM1 | COM3;
  93.             break;
  94.         case 6:
  95.             LCDDAT  = COM0 | COM1 | COM3;
  96.             break;
  97.         case 7:
  98.             LCDDAT  = COM1 | COM2 | COM3;
  99.             break;
  100.         case 8:
  101.             LCDDAT  = COM0 | COM1 | COM2 | COM3;
  102.             break;
  103.         case 9:
  104.             LCDDAT  = COM0 | COM1 | COM2 | COM3;
  105.             break;
  106.         default:
  107.             break;
  108.   }
  109.   LCDPTR = segEFGH;  //先设置将被点亮的EFGH地址赋值给LCD数据指针
  110.   switch(DISduan)    //设置将被点亮的EFGH数据像素COM0-COM3
  111.   {
  112.         case 0:
  113.             LCDDAT  = COM0 | COM2;
  114.             break;
  115.         case 1:
  116.             LCDDAT  = 0;
  117.             break;
  118.         case 2:
  119.             LCDDAT  = COM0 | COM1;
  120.             break;
  121.         case 3:
  122.             LCDDAT  = COM1;
  123.             break;
  124.         case 4:
  125.             LCDDAT  = COM1 | COM2;
  126.             break;
  127.         case 5:
  128.             LCDDAT  = COM1 | COM2;
  129.             break;
  130.         case 6:
  131.             LCDDAT  = COM0 | COM1 | COM2;
  132.             break;
  133.         case 7:
  134.             LCDDAT  = 0;
  135.             break;
  136.         case 8:
  137.             LCDDAT  = COM0 | COM1 | COM2;
  138.             break;
  139.         case 9:
  140.             LCDDAT  = COM1 | COM2;
  141.             break;
  142.         default:
  143.             break;
  144.   }
  145. }
  146. //-----------------------------------------------------------------------------------
  147. void LCD_Initial(void) //LCD及IO初始化
  148. {
  149.   P1_Input_Mode(PIN_0);//P10 Input-Only
  150.         P1_Input_Mode(PIN_1);//P11 Input-Only
  151.         P1_Input_Mode(PIN_2);//P12 Input-Only
  152.         P1_Input_Mode(PIN_3);//P13 Input-Only
  153.         P1_Input_Mode(PIN_4);//P14 Input-Only
  154.         P1_Input_Mode(PIN_5);//P15 Input-Only
  155.         P1_Input_Mode(PIN_6);//P16 Input-Only
  156.         P1_Input_Mode(PIN_7);//P17 Input-Only
  157.         P2_Input_Mode(PIN_0);//P20 Input-Only
  158.         P2_Input_Mode(PIN_1);//P21 Input-Only
  159.         P4_Input_Mode(PIN_0);//P40 Input-Only
  160.         P4_Input_Mode(PIN_1);//P41 Input-Only
  161.         P4_Input_Mode(PIN_2);//P42 Input-Only
  162.         P4_Input_Mode(PIN_3);//P43 Input-Only
  163.         P4_Input_Mode(PIN_4);//P44 Input-Only
  164.         P4_Input_Mode(PIN_5);//P45 Input-Only
  165.         P4_Input_Mode(PIN_6);//P46 Input-Only
  166.         LCDCON  = 0x02;      //VLCD=1VDD,1/4占空比,1/3偏压,150kΩ偏压电阻梯的总阻值越小驱动能力越强。
  167.   LCDCLK  = 0x13;      //选择LXT作为液晶时钟源/或0x22
  168.   LCDCON |= SET_BIT7;  //LCDEN=1,打开LCD驱动
  169.        
  170.         LCDSEG0 = 0x00;      //清屏
  171.   LCDSEG1 = 0x00;
  172.   LCDSEG2 = 0x00;
  173.   LCDSEG3 = 0x00;
  174.         TMOD=0x00;                  
  175.         EA=1;                       
  176.         ET0=1;                     
  177.         TR0=1;
  178. }
  179. void main (void)
  180. {
  181.   Set_All_GPIO_Quasi_Mode0;//全局准双向
  182.   LCD_Initial();
  183.         System_Clock_Select(E_LXTEN); //外部 32.768KHZ, LXT时钟
  184.         //System_Clock_Select(E_LIRCEN);//内部 10KHZ
  185.   while(1)
  186.   {
  187.     Show_Pattern_In_LCD(1,5);
  188.           Show_Pattern_In_LCD(2,6);
  189.                 Show_Pattern_In_LCD(3,5);
  190.                 Show_Pattern_In_LCD(4,num0);
  191.                 Show_Pattern_In_LCD(5,num0);
  192.                 //Show_Pattern_In_LCD(6,3);
  193.                 //Show_Pattern_In_LCD(7,6);
  194.   }
  195. }
  196. void timer0() interrupt 1
  197. {
  198.         TH0 = (8192-5000)/32;
  199.   TL0 = (8192-5000)%32;   
  200.         num0++;
  201.         if(num0>9)
  202.         {
  203.                 num0=0;
  204.                 num1++;
  205.                 if(num1>=9)
  206.                 {
  207.                         num1=0;
  208.                 }
  209.         }
  210. }
复制代码
经过网上大神分享和新唐官方BSP,与自己手上实际的LCD做修改,亲测稳定可用;感兴趣的留下邮箱,分享源文件,欢迎交流!!


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册 微信登录

x

打赏

参与人数 1家元 +60 收起 理由
家睦 + 60

查看全部打赏

 楼主| 发表于 2021-3-9 09:38:00 | 显示全部楼层
一楼留给自己:cool:
回复 支持 反对

使用道具 举报

发表于 2021-3-9 18:20:31 来自手机浏览器 | 显示全部楼层
直驱还是有驱动芯片?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-3-9 18:42:10 | 显示全部楼层
触景情伤 发表于 2021-3-9 18:20
直驱还是有驱动芯片?

直接连接屏幕引脚,N76E616单片机自带LCD驱动
回复 支持 反对

使用道具 举报

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

本版积分规则

APP|手机版|小黑屋|关于我们|联系我们|法律条款|技术知识分享平台

闽公网安备35020502000485号

闽ICP备2021002735号-2

GMT+8, 2025-7-25 13:58 , Processed in 0.187200 second(s), 12 queries , Redis On.

Powered by Discuz!

© 2006-2025 MyDigit.Net

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