久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2037|回復: 1
收起左側

求此程序的proteus仿真圖

[復制鏈接]
ID:84140 發表于 2015-6-30 17:20 | 顯示全部樓層 |閱讀模式
#include "reg52.h"
#include <intrins.h>
#define uchar unsigned char
#define uint unsigned int
#define IO_ADDR P2
#define delayNOP();{_nop_();_nop_();_nop_();_nop_();};
sbit RS=P1^0;
sbit RW=P1^1;
sbit EN=P1^2;
sbit RST=P1^3;
sbit PSB=P1^5;
sbitmode=P0^0;                                            //key1     模式
sbitinc=P0^1;                                                       //kye2     
sbitdec=P0^2;                                                      //key3  
sbitfmq=P3^4;                                                     //蜂鳴器接口
//=============================================
  code uchar data1[16]={"作息時間控制系統"};
  code uchar   data2[]={"某某某 2011026103"};
  code uchar   data3[]={"時間: :  :     "};
  code uchar   data4[]={"打鈴: :  :     "};
  uchar disp_buff[4][16];//定義一個二維數組,4行,16個字符
  uchar hour,min,sec,minisec;
  uchar mode_value=0 ,xf;                   //調節模式
  uchar ds[20][2] =
{
{8,0},{8,45},{8,55},{9,40},{10,0},{10,45},{10,55},{11,40},{14,0},{14,45},
{14,55},{15,40},{16,0},{16,45},{16,55},{17,40},{19,0},{19,45},{19,55},{20,40}
};
//======================================================
/*******************************************************************/
void delay(int ms)
{
   while(ms--)
       {
     uchar i;
         for(i=0;i<250;i++)  
          {
           _nop_();                  
              _nop_();
              _nop_();
              _nop_();
          }
       }
}     
//=========================
void delayus(uint i)
{
uchar y;
while(--i)
for(y=0;y<2;y++)
{;}
}
//======================================================
uchar read_data(void)//讀狀態。//返回值1---空。0-----忙。
{
uchar temp;
RS=0;
RW=1;
delayus(2);
EN=1;
delayNOP();
IO_ADDR=0XFF;
temp=IO_ADDR;//讀輸入口。
temp=temp&0x80;
EN=0;
if(temp==0x00)
  {
  return(0);
  }
else
  {
  return(1);}//注:如需軟件仿真,需要將此處改為1
}
//============================
void write_data(uchar type,uchar date)//寫命令或寫數據。
{
while(read_data());
//delayus(100);
if(type)//寫數據1
  {
  RS=1;
  }
else//0//寫命令
  {
  RS=0;
  }
delayus(1);//15US
RW=0;
delayus(1);//15US
EN=0;
delayus(1);
delayus(1);
delayus(1);
IO_ADDR=date;
delayNOP();
EN=1;
delayNOP();
EN=0;
delayus(10);
}
//***************************************************************
voidinit_system()//12864初始化部分。
{
PSB=1;
RST=1;
delayus(4);
RST=0;
delay(3);
RST=1;
delay(3);
write_data(0,0x30);//功能設定,8位并行接口
delay(5);
write_data(0,0x30);//功能設定,基本指令集。
delay(5);
write_data(0,0x30);//功能設定,8位并行接口
delay(5);
write_data(0,0x01);//清屏,
delay(5);
write_data(0,0x01);//清屏,
delay(5);
write_data(0,0x02);//將地址指針移到開頭位置。
write_data(0,0x0c);//整體顯示開。
write_data(0,0x01);//清屏,
write_data(0,0x01);//清屏,
}
//=========================================
//==============================================
void display_buff()//顯示2維數組內的內容。
{
uchar i;
uchar *point;
point=&disp_buff[0][0];
//write_data(0,0x01);//清屏,
//delayus(5);
//write_data(0,0x02);//地址歸0
//delayus(10);
//write_data(0,0x06);//地址歸0
///////////////一行一行的顯示////////////////
//行地址:0X80 0X90 0X88 0X98
write_data(0,0X80);//移到0X80位置。
delayus(1);
for(i=0;i<16;i++)
{
  write_data(1,*point);
point++;
delayus(1);
}   
//=======================================
//=========================================
write_data(0,0X90);
delayus(1);
for(i=0;i<16;i++)
{
write_data(1,disp_buff[1]);
delayus(1);
}
write_data(0,0X88);
for(i=0;i<16;i++)
{
write_data(1,disp_buff[2]);
delayus(1);
}
write_data(0,0X98);
for(i=0;i<16;i++)
{
write_data(1,disp_buff[3]);
delayus(1);
}
}
//=====================================
voidtime0() interrupt 1
{
  TH0=0X4C;
  TL0=0X00;
  if(minisec++>20)
   {
     minisec=0;
       if(++sec>59)
        {sec=0;
         if(++min>59)
         {min=0;
          if(++hour>24)
          {
            hour=0;
              min=0;
          sec=0;     
          }
         }
        }  
   }
}
voiddelaysj(unsigned char j)//延時程序
{
       unsignedchar i;
       while(j--)
       {
              for(i=0;i<50;i++);
       }
}
//蜂鳴器
voids_fmq()
{
       unsignedchar j=2;
                                      //蜂鳴器叫
       while(j--)
              {
                     fmq=0;
                     delaysj(200);
              }
}
/*************************鬧鈴判斷**********************************/
void nling()
{ uchar i ;
for(i=0;i<20;i++)
      {
              if(hour==ds[0]&&min==ds[1])          //判斷是否到鬧鈴時間
              {     if(sec<10)
                      s_fmq();                                                  //調用蜂鈴
              }
       }
}
//調節模塊
voidtiaojie()
{ uchar i;
       if(mode==0)
       {
              while(!mode);
              mode_value++;
       }
       //zifu(0xbc,0xb8,2,mode_value,&shu);
       switch(mode_value)
       {                                                                                                                                     //模式0:正常工作。顯示“天天向上”
              case0:{//uchar i;
  for(i=0;i<16;i++)
   {
  disp_buff[0]=data1;
  disp_buff[1]=data2;
   }} break ;
              case1:{                                                                                                            //    模式1:可以修改時間,其中inc是改分鐘,dec是改小時
                            if(inc==0){while(!inc);min++;if(min==60) min=0;}
                            if(dec==0){while(!dec);if(min==0) min=60; min--;}
                            //if(dec==0){while(!dec);hour++; if(hour==24) hour=0;}
                     //     uchar i;
  for(i=0;i<16;i++)
   {
  disp_buff[2]=data3;   
    }
  disp_buff[2][5]=(hour/10)+0x30;
   disp_buff[2][6]=(hour%10)+0x30;
  disp_buff[2][8]=(min/10)+0x30;
  disp_buff[2][9]=(min%10)+0x30;
  disp_buff[2][11]=(sec/10)+0x30;
  disp_buff[2][12]=(sec%10)+0x30;
  display_buff();
                            };break;
              case2:{if(inc==0){ while(!inc);hour++;if(hour==24) hour=0; }                                               //   模式2:選擇一個需要改變的鬧鈴
                            //if(inc==0){while(!inc);min+;if(min==60) min=0;}
                            if(dec==0){while(!dec);if(hour==0) hour=24;hour--; }
                     //     uchar i;
  for(i=0;i<16;i++)
   {
  disp_buff[2]=data3;   
    }
  disp_buff[2][5]=(hour/10)+0x30;
  disp_buff[2][6]=(hour%10)+0x30;
  disp_buff[2][8]=(min/10)+0x30;
  disp_buff[2][9]=(min%10)+0x30;
  disp_buff[2][11]=(sec/10)+0x30;
  disp_buff[2][12]=(sec%10)+0x30;
  display_buff();
                            //zifu(0xbe,0x40,2,xf/10,&shu);
                     //     zifu(0xbe,0x48,2,xf%10,&shu);
                     //     zifu(0xbe,0x68,2,2,&fuhao);  
                     //     zifu(0xbe,0x70,2,ds[xf][1]/10,&shu);
                     //     zifu(0xbe,0x78,2,ds[xf][1]%10,&shu);
                     ///    zifu(0xbe,0x50,2,0,&fuhao);
                     //     zifu(0xbe,0x58,2,ds[xf][0]/10,&shu);   //     顯示“調整后的鬧鈴時間”
                     //     zifu(0xbe,0x60,2,ds[xf][0]%10,&shu);
                            }  ;break;
              case3: {                                                                                                                     // 模式3:修改選定的鬧鈴的分鐘
                            if(inc==0){while(!inc);ds[xf][1]++;if(ds[xf][1]==60) ds[xf][1]=0;}
                            if(dec==0){while(!dec);if(ds[xf][1]==0) ds[xf][1]=60;ds[xf][1]--;}
                             //   uchari;
                                for(i=0;i<16;i++)
                               {
                               disp_buff[3]=data4;   
                                }
                               disp_buff[3][5]=ds[xf][0]/10+0x30;
                               disp_buff[3][6]=ds[xf][0]%10+0x30;
                               disp_buff[3][8]=ds[xf][1]/10+0x30;
                               disp_buff[3][9]=ds[xf][1]%10+0x30;
                               disp_buff[3][11]=0+0x30;
                               disp_buff[3][12]=0+0x30;
                               display_buff();//       顯示“調整后的鬧鈴時間”
                            }  ;break ;
              case4:{                                                                                                                     // 模式4:修改選定的鬧鈴的小時
                             if(inc==0){ while(!inc);ds[xf][0]++;if(ds[xf][0]==24)ds[xf][0]=0;}
                             if(dec==0){ while(!dec);ds[xf][0]--;if(ds[xf][0]==0) ds[xf][0]=23;}
                              //  uchari;
                                //for(i=0;i<16;i++)
                              // {
                             // disp_buff[3]=data4;   
                             //   }
                               disp_buff[3][5]=ds[xf][0]/10+0x30;
                               disp_buff[3][6]=ds[xf][0]%10+0x30;
                               disp_buff[3][8]=ds[xf][1]/10+0x30;
                               disp_buff[3][9]=ds[xf][1]%10+0x30;
                               disp_buff[3][11]=0+0x30;
                               disp_buff[3][12]=0+0x30;
                               display_buff();
                            //hanzi(0xbe,0x40,2,2,&zi);                       //    顯示“時”
                     //      zifu(0xbe,0x58,2,ds[xf][0]/10,&shu); //     顯示“調整后的鬧鈴時間”
                     //      zifu(0xbe,0x60,2,ds[xf][0]%10,&shu);
                     //     zifu(0xbe,0x68,2,2,&fuhao);     
              //            zifu(0xbe,0x70,2,ds[xf][1]/10,&shu);
              //            zifu(0xbe,0x78,2,ds[xf][1]%10,&shu);
                            }  ;break;
              case5:{ mode_value=0 ;};break;   //模式5:確認修改,返回正常工作狀態
              default:break;
       }
}
//從打鈴時間表中找出下一個要打鈴的時間
uchar Locate (void)
{//uchar  xf;//n;
  xf=0;               
  while(xf<20)
   {  if(hour<ds[xf][0]) break;
      else if((hour==ds[xf][0])&&(min<=ds[xf][1])) break;
      xf++;
          //n++;
    }
if(xf==20) xf=0;//xf=0;     
return(xf);        
}
void shizhong()
{ uchar i;
  for(i=0;i<16;i++)
   {
  disp_buff[0]=data1;
  disp_buff[1]=data2;
  disp_buff[2]=data3;
  disp_buff[3]=data4;
    }
  disp_buff[2][5]=(hour/10)+0x30;
  disp_buff[2][6]=(hour%10)+0x30;
  disp_buff[2][8]=(min/10)+0x30;
  disp_buff[2][9]=(min%10)+0x30;
  disp_buff[2][11]=(sec/10)+0x30;
  disp_buff[2][12]=(sec%10)+0x30;
   //鬧鈴
  disp_buff[3][5]=ds[xf][0]/10+0x30;
  disp_buff[3][6]=ds[xf][0]%10+0x30;
  disp_buff[3][8]=ds[xf][1]/10+0x30;
  disp_buff[3][9]=ds[xf][1]%10+0x30;
  disp_buff[3][11]=0+0x30;
  disp_buff[3][12]=0+0x30;
  display_buff();
}
/*******************************************************************/
/*                                                                */
/*  延時函數                                                      */
/*                                                               
//==========================================        */
//*******************************************************************
voidmain(void)
{
  P0=0XFF;
  P2=0XFF;
  EA=1;
  ET0=1;
  TH0=0X4C;
  TL0=0X00;
  TMOD=0X01;
  TR0=1;
  init_system();
  while(1)
  {
  tiaojie();
  shizhong();
  nling();
  Locate ();
  //s_fmq();
  }
  }
回復

使用道具 舉報

ID:84392 發表于 2015-6-30 19:04 | 顯示全部樓層
你有萬年歷程序沒,求幫助
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 精品国产免费人成在线观看 | 日本高清精品 | 欧美日韩专区 | 久草新在线 | 女人牲交视频一级毛片 | 国产乱码精品1区2区3区 | 日本午夜一区 | 久久久123| 超碰操 | 久久伊人一区 | 操操日 | 中文字幕一区二区三区四区 | 久久国内精品 | 国产精品国产三级国产aⅴ中文 | 国产成人精品一区二 | 一区二区精品 | 欧美一区二区三区 | 久久av资源网 | 97国产在线观看 | 亚洲精品综合一区二区 | 国产精品乱码一区二区三区 | 欧美一区二区三区视频在线观看 | 伊人色综合久久久天天蜜桃 | 色av一区二区 | 欧美一区视频 | 精品久久久av | 日韩视频在线观看一区二区 | av片免费 | 欧美日韩在线观看一区二区三区 | 四虎在线播放 | 国产在线一区二区三区 | 中文字幕国产一区 | 成人在线免费观看视频 | 国产精品美女在线观看 | 欧美一区二区三区在线播放 | 久久久精品一区二区三区四季av | 精品日韩欧美一区二区 | 国产精品一区二区久久 | 国产激情在线 | 欧美一级免费片 | 国产精品观看 |