找回密码
 立即注册

QQ登录

只需一步,快速开始

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

1602显示程序

[复制链接]
跳转到指定楼层
楼主
ID:202709 发表于 2017-5-19 22:35 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
#include"stc12c5a60s2.h"
#define uchar unsigned char
#define uint unsigned int
sbit rs=P2^5;
sbit rw=P2^6;
sbit E=P2^7;
bit  shuaxin=1;
sbit key1=P1^0;
sbit key2=P1^1;
sbit key3=P1^2;
sbit key4=P1^3;
uchar name[]="Name: Xuwenlei ";
uchar tim[]={0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3a,0x53,0x4a}; //0~9和: S J
uchar i;
uchar  shan;
uchar js50ms,second,minut,hour;
uchar  s1,s2,m1,m2,h1,h2;
void delay(uchar x)           //延时函数
{        uint y;
                        for(;x>0;x--)
         {                                                                         
                for(y=100;y>0;y--)
                                {};
         }
}
void LCD_wrdata(uchar dat)         //写数据到LCD
{
        delay(6);
        rs=1;  //写数据时RS拉高
        rw=0;
        E=1;
        P0=dat;
        delay(6);
        E=0;
        delay(6);
}
void LCD_wrcom(uchar cdat)//写指令到LCD  
{       
        delay(6);
        rs=0;//写指令时RS拉低
        rw=0;
        E=1;
        P0=cdat;//
        delay(6);//不加此延时将导致不能写入指令,但能写入显示数据
        E=0;
        delay(6);
}
void LCD_Clear()        //清屏函数
{
  LCD_wrcom(0x01);
  delay(6);
}
void initiate()                          //1602初始化函数
{
    LCD_wrcom(0x38);                 //          显示模式设置:16*2显示,5*7点阵,8位数据接口
        LCD_wrcom(0x06);                 //          显示模式设置:显示开,有光标,光标闪烁
        LCD_wrcom(0x0c);                 //          显示模式设置:光标右移,字符不移
       
}
void T0_init()                 //T0初始化
{
    TMOD=0x01;     //T0方式1
        TH0=0x4c;
        TL0=0x00;       //50ms初值       
        TR0=1;
        ET0=1;
       
        EX0=1;
        IT0=1;
        EA=1;
}
void LCD_wirte_setring(uchar x,uchar y,uchar *s)  //写字符串函数
{
if(y==0){LCD_wrcom( 0x80+x);}
else{LCD_wrcom( 0xc0+x);}
while(*s)
{
   LCD_wrdata(*s);
   s++;
}
}
void LCD_wirte_data(uchar x,uchar y,uchar dat)          //写字符函数
{
  if(y==0){LCD_wrcom( 0x80+x);}
  else{LCD_wrcom( 0xc0+x);}
  LCD_wrdata(dat);
}
void LCD_Time()                                  //时间显示函数
{        s1=second%10;                   //  时间赋值                秒分时
    s2=second/10;
        m1=minut%10;
        m2=minut/10;
        h1=hour%10;
        h2=hour/10;
    LCD_wirte_data(6,1,tim[h2]);
    LCD_wirte_data(7,1,tim[h1]);
        LCD_wirte_data(8,1,tim[10]);
        LCD_wirte_data(9,1,tim[m2]);
        LCD_wirte_data(10,1,tim[m1]);
        LCD_wirte_data(11,1,tim[10]);
        LCD_wirte_data(12,1,tim[s2]);
        LCD_wirte_data(13,1,s1+'0');
                                
}
void key_can() interrupt 0
{
  key1=1;key2=1; key3=1;key4=1;
   if(key1==0){          shan++;  TR0=0;
                        if(shan==4)shan=0        ;
                                                                                                         
                                                                                        switch(shan){
                                                                                        case 0:        shan=0;TR0=1;
                                                                                                            LCD_wrcom(0x0c);
                                                                                                   LCD_wirte_setring(1,0,"Name:Xuwenlei ") ;
                                                                                             
                                                                                                             break;
                                            case 1:
                                                                                                LCD_wirte_setring(1,0,"Name:hour    ") ;
                                                                                                LCD_wrcom(0x0f);
                                                                                                        delay(10);
                                                   
                                                                                                                             break;
                                            case 2:
                                                                                                LCD_wirte_setring(1,0,"Name:mint    ") ;                 
                                                                                                LCD_wrcom(0x0f);
                                                                                                        delay(10);
  
                                                                                                                              break;                                                                                       
                                            case 3:
                                                                                                LCD_wirte_setring(1,0,"Name:second    ") ;          
                                                                                                LCD_wrcom(0x0f);
                                                                                                        delay(10);
                                                                                                                          break;
                                                                                                                        }                                          
                      }                                                                                                                 
// if(key2==0&&shan==1)
if(key2==0){
                                 if(shan==1) { hour++; shuaxin=1;   //h加1
                                                                      if(hour==24){hour=0;} }
                                                   else if(shan==2){minut++; shuaxin=1;
                                                                                 if(minut==60){minut=0;}         }
                               else if(shan==3){second++;shuaxin=1;
                                                                                   if(second==60){second=0; }                                                                                                                                             
                                                  }       
                                                
                                                    
                            
             }
if(key3==0){
                       if(shan==1) {     //h减1
                                                                    if(hour==0){hour=24;}
                                                                         hour--;shuaxin=1;
                                                                        }
                                                          else if(shan==2){
                                                                                       if(minut==0){minut=60;}minut--;shuaxin=1;
                                                                                  }       
                                 else if(shan==3){
                                                                                              if(second==0){second=60;} second--;shuaxin=1;                                                                                                                                             
                                                  }       
                                                
                                                    
                  }
}
void T0_intop() interrupt 1
{
  TH0=0x4c;
        TL0=0x00;       //50ms初值重装
        js50ms++;
       
  if(js50ms==20)        //1s
  {
     js50ms=0;
         shuaxin=1;
                 second++;
                if(second==60)   //60s
                {
                        second=0;
      minut++;
                        if(minut==60)  //60m
                        {
        minut=0;
                                hour++;
                                if(hour==24) //60h
                                {
           hour=0;
        }
      }
    }
  }       
}
void main()
{       
    initiate();                 //          1602初始化函数
        T0_init();                  //T0 初始化
        LCD_Clear();          //清屏
    LCD_wirte_setring(1,0,"Name:Xuwenlei") ;
        LCD_wirte_setring(1,1,"Time:") ;
       
       
        while(1)
        {
//        { LCD_Time(); }
        if(shuaxin)
        {
        shuaxin=0;
        LCD_Time();
        }
        }          
}

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

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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