找回密码
 立即注册

QQ登录

只需一步,快速开始

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

STC52rc单片机点亮LCD1602程序

[复制链接]
跳转到指定楼层
楼主
stc52rc单片机点亮LCD1602程序如附件。显示时钟。

单片机源程序如下:
  1. #include <reg52.h>
  2. #include <intrins.h>
  3. #define uchar unsigned char
  4. #define uint unsigned int
  5. uint dxf[8]; //定义一个数组,用于显示秒高低位、 分高低位、 时高低位及冒号
  6. uint num1,num2,num3,num4,num5,num6,count1;           //count1用于中断50MS时间到判断
  7. uint fk0,fk1,fk2,fk3,fk4,fk5,fk6,fk7,ab1,ab2,ab3,ab4,ab5,ab6;
  8. sbit LCDEn=P0^2;
  9. sbit RS11=P0^0;
  10. sbit rw=P0^1;
  11. unsigned char code table[]={"HELLO 2015  "};
  12. unsigned char code table1[]={"hello world:  "};
  13. unsigned char code tab12[]={'0','1','2','3','4','5','6','7','8','9'}; //用于液晶显示调用
  14. unsigned char code tab13[]={":"} ;
  15. unsigned char code tab11[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};//用于数码显示调用
  16. void delay2(num2)  //长延时
  17. {
  18.    uchar aa1;
  19.    for(;num2>0;num2--)
  20.     for(aa1=120;aa1>0;aa1--)
  21.         {;}   
  22. }
  23. void T01() interrupt 1  /*****定时器T0中断子程序*****/
  24. {
  25.     count1++ ;
  26.    if(count1==4)
  27.    {
  28.               num4++;                       
  29.            count1=0;         
  30.    }
  31.                            
  32.   TH0=(65535-50000)/256;  /*******50ms定时器,高八位******/
  33.   TL0= (65535-50000)%256;
  34. }
  35. void delay(unsigned int m )
  36. {
  37.    unsigned char n;        /****局部定义**/

  38.    for(;m>1;m--)
  39.     for(n=60;n>0;n--)
  40.         ;
  41. }
  42. void okplay(  )// 开显示
  43. {   
  44.         uchar aa2;
  45.    for(aa2=1;aa2<9;aa2++)
  46.    {
  47.                if(num4==60)
  48.           {
  49.                   num5++;
  50.                 if(num5==60)
  51.                  {
  52.                   num6++;
  53.                    if(num6==24)
  54.                      {
  55.                           num6=0;
  56.                          }
  57.                   num5=0;                 
  58.                  }
  59.                  num4=0;         
  60.           }                                
  61.             switch(aa2)
  62.          {
  63.          case 1:  dxf[0]=num6/10;          break;
  64.          case 2:  dxf[1]=num6%10;        break;
  65.          case 3:  dxf[2]=0[tab13] ;          break;

  66.          case 4:  dxf[3]=num5/10;                 break;
  67.          case 5:  dxf[4]=num5%10;        break;
  68.          case 6:  dxf[5]=0[tab13] ;            break;

  69.          case 7:  dxf[6]=num4/10;        break;
  70.          case 8:  dxf[7]=num4%10;    P1=dxf[7][tab11]; P3=0X20;     break;
  71.          }
  72.    }   
  73. }
  74. void lowcom(unsigned char a) /****写命令**/
  75. {
  76.           LCDEn=0;
  77.           RS11=0;
  78.           rw=0;
  79.           P2=a;
  80.           delay(2);
  81.           LCDEn=1;
  82.           delay(2);
  83.           LCDEn=0;
  84. }
  85. void lowwrite(uchar ab) /****写数据**/
  86. {
  87.           LCDEn=0;
  88.           RS11=1;
  89.           rw=0;           
  90.           P2=ab;
  91.           delay(2);
  92.           LCDEn=1;
  93.           delay(2);
  94.           LCDEn=0;
  95. }
  96. /********初始化程序********/
  97. void invion()
  98. {
  99.         lowcom(0x38); /****开显示**/
  100.         delay(2);
  101.         lowcom(0x0f); /****初始化**/
  102.         delay(2);
  103.         lowcom(0x06);  /***写一个指针数加1**/
  104.         delay(2);
  105.         lowcom(0x0C);/****开显示不显光标**/
  106.         delay(2);        
  107. }
  108. void main()
  109. {
  110.         unsigned char xx1,xx2;
  111.         TMOD=0X01;
  112.         TH0=(65535-50000)/256;  /*******5ms定时器,高八位******/
  113.         TL0= (65535-50000)%256;
  114.         EA=1; /******开总中断******/
  115.         ET0=1;/******允许T0中断******/
  116.         TR0=1; /*******T0中断开始******/                     
  117.         invion(); /****初始化**/
  118.             while(1)
  119.           {  
  120.                               okplay();
  121.                           lowcom(0x80);/****显示第一行从第1 位开始显示**/         
  122.                 for(xx1=0;xx1<8;xx1++)
  123.                    {
  124.                                    //原显示lowwrite( dxf[xx1][tab12]),因冒号无法显示改为switch语句
  125.                                          
  126.                              switch(xx1)
  127.                           {
  128.                           case 0:lowwrite( dxf[xx1][tab12]); break ;
  129.                           case 1: lowwrite(dxf[xx1][tab12]); break;
  130. ……………………

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

所有资料51hei提供下载:
LCD_1.zip (38.98 KB, 下载次数: 16)


评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

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

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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