欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

專注電子技術學習與研究
當前位置:單片機教程網 >> MCU設計實例 >> 瀏覽文章

1602液晶測試程序-模擬時鐘跑秒

作者:佚名   來源:本站原創   點擊數:  更新時間:2009年11月13日   【字體:

/************************************************
焊接上插針,然后插入學習板,切記不可插錯位
跳線設置:默認跳線位
晶振:12M
硬件結構框架:
 1,1602字符液晶(可顯示2行數字或者英文)
顯示效果:
 1,MCU模擬時鐘顯示跑秒并在液晶屏上顯示
相關知識點:
 1,字符型液晶的操作顯示
注意事項:
 1,此程序版權歸51hei.com所有,可隨意修改,不得用于任何商業目的.
 2,注意方向,不可插反或者插錯,當液晶在初次連接上開發板后可能會出現顯示不全的現象,MCU復位即可
************************************************/

#include"AT89x52.h"
#include"51hei.h"
#include"math.h"

#define uchar unsigned char
#define uint unsigned int

sbit rs=P3^5;
sbit rw=P2^7;
sbit cs=P3^4;
sbit DUAN=P2^6;     //74HC573的LE端  U1  LED的段選端
sbit WEI=P2^7;      //74HC573的LE端  U2  LED的位選端

uchar lcd_data_1[]={"   2009-04-24"};
uchar lcd_data_2[]={"   :  :  "};
uchar shi,fen,miao;

void wei_1()
{
 WEI=1;
 P0=0;
 WEI=0;
}

void duan_1()
{
 DUAN=1;
 P0=0;
 DUAN=0;
}

void nop(){}  //延時一會

//=函數原型:delay
//=功    能:1ms延時
//=參    數:z
//=返 回 值:
//=函數性質:私有函數
void delay(uchar z)
{
 uchar t1,y;
 for(t1=z;t1>0;t1--)
  for(y=110;y>0;y--);
}

//=函數原型:lcd_busy
//=功    能:忙標志
//=參    數:
//=返 回 值:lcd_start&0x01值
//=函數性質:私有函數
uchar lcd_busy()
{
 register uchar lcd_start;
 rs=0;
 rw=1;
 cs=1;
 nop();
 lcd_start=P0;
 cs=0;
 return(lcd_start&0x80);
}

//=函數原型:write_cmd
//=功    能:寫命令
//=參    數:cmd
//=返 回 值:
//=函數性質:私有函數
void write_cmd(uchar cmd)
{
 uchar CMD;
 CMD=cmd;
 while(lcd_busy());
 rs=0;
 rw=0;
 cs=1;
 nop();
 P0=CMD;
 cs=0;
}

//=函數原型:write_data
//=功    能:寫數據
//=參    數:data1
//=返 回 值:
//=函數性質:私有函數
void write_data(uchar data1)
{
 uchar DATA;
 DATA=data1;
 while(lcd_busy());
 rs=1;
 rw=0;
 cs=1;
 nop();
 P0=DATA;
 cs=0;
}

//=函數原型:lcdinit
//=功    能:LCD初始化
//=參    數:
//=返 回 值:
//=函數性質:
void lcdinit()
{
 delay(30);       //延時30ms
 write_cmd(0x38); //設定8位操作格式,2行顯示,5*7點陣
 delay(5);
 write_cmd(0x38); //設定8位操作格式,2行顯示,5*7點陣
 delay(5);
 write_cmd(0x38); //設定8位操作格式,2行顯示,5*7點陣
 delay(5);
 write_cmd(0x0c); //整體顯示,關光標,不閃爍
 write_cmd(0x06); //輸入方式設定(增量不移位)
 write_cmd(0x01); //清屏且光標回原位
 write_cmd(0x0d); //開顯示開光標
}

//=函數原型:init
//=功    能:MCU初始化
//=參    數:
//=返 回 值:
//=函數性質?
void init()                              //初始化,開定時器0
{
  TMOD=0x01;
   TCON=0x10;  
    TH0=(65536-50000)/256;    
   TL0=(65536-50000)%256;
   IE=0x82;
}

//=函數原型:time
//=功    能:時間調節
//=參    數:
//=返 回 值:
//=函數性質:
void time()
{
 uchar i,a,b,c,d,e,f;
 a=miao%10;
 b=miao/10;
 c=fen%10;
 d=fen/10;
 e=shi%10;
 f=shi/10;
 write_cmd(0x80);       //地址指針的設置
 for(i=0;i<13;i++)
 {
  write_data(lcd_data_1[i]);
 }
 write_cmd(0xc0+0x04); //地址指針的設置
 for(i=0;i<8;i++)
 {
  write_data(lcd_data_2[i]);
 }
 write_cmd(0xc0+0x0c); //秒個位地址指針的設置
 write_data(0x30+a);
 write_cmd(0xc0+0x0b); //秒十位地址指針的設置
 write_data(0x30+b);
 write_cmd(0xc0+0x09); //分個位地址指針的設置
 write_data(0x30+c);
 write_cmd(0xc0+0x08); //分十位地址指針的設置
 write_data(0x30+d);
 write_cmd(0xc0+0x06); //時個位地址指針的設置
 write_data(0x30+e);
 write_cmd(0xc0+0x05); //時十位地址指針的設置
 write_data(0x30+f);
    
}

void main(void)
{
 wei_1();
 duan_1();
 guandz();//防止點陣干擾
 guanled();//防止led數碼管干擾
 init();
 lcdinit(); 
 while(1)
 {
  time();
 }

}


void timer0() interrupt 1                  //定時器0
{
 uchar i;
 if(i++>10)
 {
  i=0;
  if(miao++>58)
  {
   miao=0;
   if(fen++>58)
   {
    fen=0;
    if(shi++>23)
    {
     shi=0;
    } 
   }
  }
 }
 TH0=(65536-50000)/256;
 TL0=(65536-50000)%256;
}

關閉窗口

相關文章