• <li id="00i08"><input id="00i08"></input></li>
  • <sup id="00i08"><tbody id="00i08"></tbody></sup>
    <abbr id="00i08"></abbr>
  • 新聞中心

    EEPW首頁 > 嵌入式系統 > 設計應用 > 基于51單片機定時器的的電子時鐘

    基于51單片機定時器的的電子時鐘

    作者: 時間:2012-09-14 來源:網絡 收藏

    1、可以顯示星期和時間的電子1602液晶
    2、但沒有調整時間的子程序,誰會調整時間的子程序,可以完善。
    3. 液晶的端口大家可按你自己的電路隨便修改就在程序的上部
    4. 此程序在51hei單片機開發板上測試成功全部的代碼及頭文件
    下載地址:http://www.51hei.com/ziliao/51hei-5/+1602液晶.rar

    #include reg52.h>#include "51hei.h"#define uchar unsigned charsbit RW=P2^7;sbit RS=P3^5;sbit E=P3^4;sbit duan=P2^6;bit at=0;//sbit busy_bit=P1^7;uchar code shen[]={"I love you!!"};uchar code word[]={0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,
    0x39,0x3a,0x20,0x2d,0x00,0x01,0x02,0x03,0x03,0x04,0x05,0x06,0x07};uchar code ri[]={0x1f,0x19,0x19,0x1f,0x19,0x19,0x1f,0x00}; //自定義符號 :周日 uchar code yi[]={0x00,0x00,0x00,0x1f,0x00,0x00,0x00,0x00};/*自定義符號:周一 */ uchar code er[]={0x00,0x00,0x0e,0x00,0x1f,0x00,0x00,0x00};/*自定義符號: 周二2*/ uchar code san[]={0x00,0x1f,0x00,0x0e,0x00,0x1f,0x00,0x00};/*自定義符號: 周三2*/ uchar code si[]={0x00,0x1f,0x1a,0x1a,0x11,0x11,0x00,0x00}; //自定義符號 :周四   uchar code wu[]={0x00,0x1f,0x08,0x1f,0x09,0x1f,0x00,0x00}; //自定義符號 :周五 uchar code liu[]={0x08,0x04,0x1f,0x0a,0x11,0x10,0x00,0x00}; //自定義符號 :周五 uchar dispbuf[10],ri1,h,m,s,counter;void delay(){uchar i;for(i=0;i255;i++);}/*******寫命令**********/void lcd_wmc(uchar i){P0=i;RS=0;RW=0;E=0;delay();E=1;}/*******寫數據***********/void lcd_wmd(uchar i){P0=i;RS=1;RW=0;E=0;delay();E=1;}/*******初始化液晶*******/void lcd_init(){uchar i;lcd_wmc(0x01);lcd_wmc(0x38);  //功能設置指令-5    顯示模式設置:16×2顯示,5×7點陣,
    8位數據接口lcd_wmc(0x0c); // 顯示開關控制指令 0x0c--顯示功能開無光標,即光標不閃爍。
    00x0f--顯示功能開,有光標并閃爍lcd_wmc(0x06);   //顯示模式設置:光標右移,字符不移   輸入模式設置指令 -3 lcd_wmc(0x82);  // 0xc9 =0x80 | 0x49    設置DDRAM地址指令--8   
    PPt第8    ox82=0x80|0x02 for(i=0;i12;i++)lcd_wmd(shen[i]);    //顯示 I  love you !! 字符串                    lcd_wmc(0xc0);}/*******更新緩沖區子程序*******/void newbuf(){dispbuf[0]=s%10;dispbuf[1]=s/10;dispbuf[3]=m%10;dispbuf[4]=m/10;dispbuf[6]=h%10;dispbuf[7]=h/10;dispbuf[9]=ri+13;}/*******顯示子程序**********/void disp(uchar dispadd){uchar tmp;    //定義 一個uchar 變量 lcd_wmc(dispadd);     // 調用 寫指令 函數 把DDRAM 地址 指令寫進tmp=dispbuf[9];    //星期             //以下同理 tmp=word[tmp];lcd_wmd(tmp);tmp=dispbuf[8];tmp=word[tmp];     lcd_wmd(tmp);tmp=dispbuf[7];    //第2行 把值賦給 tmp tmp=word[tmp];    //把要顯示的 數 給tmp lcd_wmd(tmp);      //寫數據 函數 把要顯示的數字 顯示在顯示屏上 tmp=dispbuf[6];                 //以下同理 tmp=word[tmp];lcd_wmd(tmp);tmp=dispbuf[5];tmp=word[tmp];     lcd_wmd(tmp);tmp=dispbuf[4];tmp=word[tmp];lcd_wmd(tmp);          //分鐘 tmp=dispbuf[3];tmp=word[tmp];     lcd_wmd(tmp);tmp=dispbuf[2];              //顯示 是兩個點 在閃爍 tmp=word[tmp];lcd_wmd(tmp);tmp=dispbuf[1];tmp=word[tmp];       //秒 lcd_wmd(tmp);tmp=dispbuf[0];tmp=word[tmp];lcd_wmd(tmp); }/*********************初始化子程序**********************/void init(){TMOD=0x01;TH0=0x4c;TL0=0x00;EA=1;ET0=1;TR0=1;counter=0;h=23;m=59;s=0;ri1=6;dispbuf[2]=10;dispbuf[5]=10;dispbuf[8]=12;}/***************************主程序************************/void main(void){ guanled();guandz();init();lcd_init();while(1){if(!at){//閃爍if(counter10)        {dispbuf[2]=10;dispbuf[5]=10;}else{            dispbuf[2]=11;dispbuf[5]=11;}//更新顯示緩沖區及調用顯示程序if(counter==0){newbuf();disp(0xc4);}else if(counter==10)disp(0xc4);  }}}/*************************定時器0的中斷**********************/void Time0() interrupt 1 using 2    //再次強調中斷子程序執行時間越短越好{TH0=(65536-46075)/256;TL0=(65536-46075)%256;counter++;if(counter==20){s++;counter=0;if(s==60){ m++;s=0;if(m==60){h++;m=0;if(h==24)h=0;ri1++;if(ri1==7){ ri1=0;}}}}}

    51單片機相關文章:51單片機教程




    評論


    相關推薦

    技術專區

    關閉
    主站蜘蛛池模板: 临夏县| 甘泉县| 婺源县| 遵义县| 兴化市| 陆河县| 齐齐哈尔市| 玛纳斯县| 横山县| 双城市| 胶州市| 大余县| 鄂州市| 平利县| 怀柔区| 寻乌县| 嫩江县| 云林县| 长汀县| 灵丘县| 新丰县| 马边| 泰兴市| 思茅市| 新河县| 沁水县| 贺州市| 萨迦县| 边坝县| 静宁县| 石嘴山市| 建瓯市| 海宁市| 峨边| 临高县| 新宁县| 合作市| 逊克县| 泰兴市| 定兴县| 和顺县|