找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3818|回复: 3
收起左侧

单片机直接驱动40-IO驱动段码LCD_6个8

[复制链接]
ID:212386 发表于 2018-9-5 15:12 | 显示全部楼层 |阅读模式
IO直接驱动LCD
0.jpg
单片机源程序如下:
  1. #include         <intrins.h>
  2. #include        "config.h"
  3. #include        "timer.h"
  4. #include        "LCD_IO16.h"


  5. /*************        功能说明        **************

  6. 用STC115系列测试IO直接驱动段码LCD(6个8字LCD, 1/4 Dutys, 1/3 bias)。

  7. 上电后显示一个时间(时分秒).

  8. P3.2对地接一个开关,用来进入睡眠或唤醒.


  9. ******************************************/

  10. /*************        本地常量声明        **************/





  11. /*************        本地变量声明        **************/
  12. u8        cnt_500ms;
  13. u8        second,minute,hour;
  14. bit        B_Second;        //秒信号

  15. /*************        本地函数声明        **************/



  16. /*************  外部函数和变量声明 *****************/
  17. extern        bit        B_2ms;



  18. /************************ 定时器配置 ****************************/
  19. void        Timer_config(void)
  20. {
  21.         TIM_InitTypeDef                TIM_InitStructure;                                        //结构定义
  22.         TIM_InitStructure.TIM_Mode      = TIM_16BitAutoReload;        //指定工作模式,   TIM_16BitAutoReload,TIM_16Bit,TIM_8BitAutoReload,TIM_16BitAutoReloadNoMask
  23.         TIM_InitStructure.TIM_Polity    = PolityLow;                        //指定中断优先级, PolityHigh,PolityLow
  24.         TIM_InitStructure.TIM_Interrupt = ENABLE;                                //中断是否允许,   ENABLE或DISABLE
  25.         TIM_InitStructure.TIM_ClkSource = TIM_CLOCK_1T;                        //指定时钟源,     TIM_CLOCK_1T,TIM_CLOCK_12T,TIM_CLOCK_Ext
  26.         TIM_InitStructure.TIM_ClkOut    = DISABLE;                                //是否输出高速脉冲, ENABLE或DISABLE
  27.         TIM_InitStructure.TIM_Value     = 65536 - (MAIN_Fosc / 500);        //初值, 节拍为500HZ
  28.         TIM_InitStructure.TIM_Run       = ENABLE;                                //是否初始化后启动定时器, ENABLE或DISABLE
  29.         Timer_Inilize(Timer0,&TIM_InitStructure);                                //初始化Timer0          Timer0,Timer1,Timer2
  30. }

  31. /******************** 显示时间 **************************/
  32. void        LoadRTC(void)
  33. {
  34.         LCD_load(1,hour/10);
  35.         LCD_load(2,hour%10);
  36.         LCD_load(3,minute/10);
  37.         LCD_load(4,minute%10);
  38.         LCD_load(5,second/10);
  39.         LCD_load(6,second%10);
  40. }

  41. //========================================================================
  42. // 函数: void  delay_ms(unsigned char ms)
  43. // 描述: 延时函数。
  44. // 参数: ms,要延时的ms数, 这里只支持1~255ms. 自动适应主时钟.
  45. // 返回: none.
  46. // 版本: VER1.0
  47. // 日期: 2013-4-1
  48. // 备注:
  49. //========================================================================
  50. void  delay_ms(u8 ms)
  51. {
  52.      unsigned int i;
  53.          do{
  54.               i = MAIN_Fosc / 13000;
  55.                   while(--i)        ;   //14T per loop
  56.      }while(--ms);
  57. }

  58. /******************** 主函数**************************/
  59. void main(void)
  60. {

  61.         Init_LCD_Buffer();
  62.         Timer_config();
  63.         EA = 1;

  64.         LCD_SET_2M;        //显示时分间隔:
  65.         LCD_SET_4M;        //显示分秒间隔:
  66.         LoadRTC();        //显示时间
  67.                                
  68.         while (1)
  69.         {
  70.                 PCON |= 0x01;        //为了省电, 进入空闲模式(电流大约2.5~3.0mA @5V),由Timer0 2ms唤醒退出
  71.                 _nop_();
  72.                 _nop_();
  73.                 _nop_();

  74.                 if(B_2ms)        //2ms节拍到
  75.                 {
  76.                         B_2ms = 0;

  77.                         if(++cnt_500ms >= 250)        //500ms到
  78.                         {
  79.                                 cnt_500ms = 0;
  80.                         //        LCD_FLASH_2M;        //闪烁时分间隔:
  81.                         //        LCD_FLASH_4M;        //闪烁分秒间隔:
  82.                        
  83.                                 B_Second = ~B_Second;
  84.                                 if(B_Second)
  85.                                 {
  86.                                         if(++second >= 60)        //1分钟到
  87.                                         {
  88.                                                 second = 0;
  89.                                                 if(++minute >= 60)        //1小时到
  90.                                                 {
  91.                                                         minute = 0;
  92.                                                         if(++hour >= 24)        hour = 0;        //24小时到
  93.                                                 }
  94.                                         }
  95.                                         LoadRTC();        //显示时间
  96.                                 }
  97.                         }
  98.                
  99.                         if(!P32)        //键按下,准备睡眠
  100.                         {
  101.                                 LCD_CLR_2M;        //显示时分间隔:
  102.                                 LCD_CLR_4M;        //显示分秒间隔:
  103.                                 LCD_load(1,DIS_BLACK);
  104.                                 LCD_load(2,DIS_BLACK);
  105.                                 LCD_load(3,0);
  106.                                 LCD_load(4,0x0F);
  107.                                 LCD_load(5,0x0F);
  108.                                 LCD_load(6,DIS_BLACK);
  109.                                
  110.                                 while(!P32)        delay_ms(10);        //等待释放按键
  111.                                 delay_ms(50);
  112.                                 while(!P32)        delay_ms(10);        //再次等待释放按键
  113.                                
  114.                                 TR0 = 0;        //关闭定时器
  115.                                 IE0 = 0;        //外中断0标志位
  116.                                 EX0 = 1;        //INT0 Enable
  117.                                 IT0 = 1;        //INT0 下降沿中断               

  118.                                 P1n_push_pull(0xff);        //com和seg全部输出0
  119.                                 P2n_push_pull(0xff);        //com和seg全部输出0
  120.                                 P1 = 0;
  121.                                 P2 = 0;

  122.                                 PCON |= 0x02;        //Sleep
  123.                                 _nop_();
  124.                                 _nop_();
  125.                                 _nop_();
  126. ……………………

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

所有资料51hei提供下载:
40-IO-LCD-8x6-2014-6-19.rar (1.72 MB, 下载次数: 54)
回复

使用道具 举报

ID:212386 发表于 2018-9-5 15:12 | 显示全部楼层
请问怎么做呀,我查了许多资料,不太懂,求大神解决
回复

使用道具 举报

ID:269418 发表于 2021-1-30 21:34 | 显示全部楼层
应该很不错非常需要
回复

使用道具 举报

ID:970519 发表于 2022-8-25 14:41 | 显示全部楼层
LCD段码 I.O直驱
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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