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

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

單片機通過串口通信調整時間的程序

作者:寒竹子   來源:本站原創   點擊數:  更新時間:2014年03月21日   【字體:

本程序所用的原理圖下載: 點這里 ,單片機芯片使用的stc89c51;找到時鐘部分的原理圖修改為你自己的電路上的io即可.這是一整個單片機開發板的電路圖其他的忽略.


/**************************通過串口通信調整時間******************************/
/**
*功能:單片機開始上電時點陣顯示倒計時3,2,1,0,然后點陣LED關閉顯示
*    定時器和串口開始工作,定時器開始一秒計時,并在數碼管上顯示時,分,秒
*    此計時器可以通過串口發送數據調整時間,可調整時與分,當調整分鐘時秒清零
*    附加功能:當單片機收到數據時有蜂鳴器響一聲作為提示
*     彩色流水燈以20毫秒的速度向左流動
*作者:徐冉
*日期:2013-06-15-09:15 - 12:10
*備注:程序已經順利通過調試
*/
/***********51hei開發板************/
/********AT89C52-RC MCU***********/
#include <reg52.h>
typedef unsigned int uint;
typedef unsigned char uchar;
sbit wela = P2^7;
sbit dula = P2^6;
sbit FM = P2^3;
sbit din = P2^0;
sbit cs = P2^1;
sbit clk = P2^2;
 /************點陣LED顯示取模編碼表***********************/
uchar code dis[][8] = {
      {0x00,0x3E,0x02,0x02,0x3E,0x02,0x02,0x3E},//'3'
      {0x00,0x3E,0x02,0x02,0x3E,0x20,0x20,0x3E},//'2'
          {0x00,0x18,0x38,0x08,0x08,0x08,0x08,0x3E},//'1'
      {0x00,0x3C,0x24,0x24,0x24,0x24,0x24,0x3C},//'0'
      {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}//關閉顯示           
       };
 /*****************數碼管顯示編碼表***************************/
uchar code table[] = {
                0x3F,  //"0"
                0x06,  //"1"
                0x5B,  //"2"
                0x4F,  //"3"
                0x66,  //"4"
                0x6D,  //"5"
                0x7D,  //"6"
                0x07,  //"7"
                0x7F,  //"8"
                0x6F  //"9"
    };

uchar shi = 0, fen = 0, miao = 0, counter = 0, flag = 0, j = 0;
/*************點陣LED-MAX7219***********/
/***************寫字節************************/
void write_byte(uchar date)
{
 uchar i = 0;
 cs = 0;
 for(i = 0; i < 8; i++)
 {
  clk = 0;
  din = date & 0x80;
  date <<= 1;
  clk = 1;
 }
}
/*****************寫MAX7219**********************/
void write_max7219(uchar add, uchar date)
{
 cs = 0;
 write_byte(add);
 write_byte(date);
 cs = 1;
}
/*****************MAX7219初始化**********************/
void max7219_init()
{
 write_max7219(0x0c, 0x01);
 write_max7219(0x09, 0x00);
 write_max7219(0x0a, 0x08);
 write_max7219(0x0b, 0x07);
 write_max7219(0x0f, 0x00);
}
/*********延時*********/
void delayms(uint xms)
{
 uint x, y;
 for(x = xms; x > 0; x--)
   for(y = 110; y > 0; y--);
}
/************串口和定時器T0初始化********************/
void init()
{
 TMOD = 0x21;//T1工作方式2,T0工作方式1
 TH0 = 0xB8;
 TL0 = 0x00;
 TH1 = 0xFA;
 TL1 = 0xFA;
 TR1 = 1;
 SM0 = 0;
 SM1 = 1;
 REN = 1;
 EA = 1;
 ES = 1;
 ET0 = 1;
}
/*************數碼管顯示時間************************/'
void display(uchar shi, uchar fen, uchar miao)
{
 uchar shi_s, shi_g;
 uchar fen_s, fen_g;
 uchar miao_s, miao_g;
 
 shi_s = shi / 10 % 10;
 shi_g = shi % 10;
 fen_s = fen / 10 % 10;
 fen_g = fen % 10;
 miao_s = miao / 10 % 10;
 miao_g = miao % 10;
 
 dula = 1;
 P0 = table[shi_s];
 dula = 0;
 P0 = 0xff;
 wela = 1;
 P0 = 0xfe;
 wela = 0;
 P0 = 0x00;
 delayms(1);
 
 dula = 1;
 P0 = table[shi_g];
 dula = 0;
 P0 = 0xff;
 wela = 1;
 P0 = 0xfd;
 wela = 0;
 P0 = 0x00;
 delayms(1);
 
 dula = 1;
 P0 = table[fen_s];
 dula = 0;
 P0 = 0xff;
 wela = 1;
 P0 = 0xfb;
 wela = 0;
 P0 = 0x00;
 delayms(1);
 
 dula = 1;
 P0 = table[fen_g];
 dula = 0;
 P0 = 0xff;
 wela = 1;
 P0 = 0xf7;
 wela = 0;
 P0 = 0x00;
 delayms(1);
 
 dula = 1;
 P0 = table[miao_s];
 dula = 0;
 P0 = 0xff;
 wela = 1;
 P0 = 0xef;
 wela = 0;
 P0 = 0x00;
 delayms(1);
 
 dula = 1;
 P0 = table[miao_g];
 dula = 0;
 P0 = 0xff;
 wela = 1;
 P0 = 0xdf;
 wela = 0;
 P0 = 0x00;
 delayms(1);
}
/*****************點陣顯示程序****************/
void display_max7219()
{
 uchar m, n;
 for(m = 0; m < 5; m++)
 {
  for(n = 0; n < 8; n++)
  {
   write_max7219(n+1, dis[m][n]);
   delayms(1);
  }
  delayms(1000);
 }
  TR0 = 1;
}
/****************主程序********************/
void main(void)
{
 init();
 max7219_init();
    display_max7219();
 
 while(1)
 {
  display(shi, fen, miao);
  if(flag == 1)
  {
   flag = 0;
   ES = 0;
   SBUF = shi;
   while(!TI);
   TI = 0;
   SBUF = fen;
   while(!TI);
   TI = 0;
   SBUF = miao;
   while(!TI);
   TI = 0;
   ES = 1;
  }
 }
}
/***************定時器T0中斷程序**********************/
void timer0_int() interrupt 1
{
 TH0 = 0xB8;
 TL0 = 0x00;
 counter++;
 P1 = ~(1 << j++);
 if(j >= 8)
 {
  j = 0;
 }
 if(counter == 50)
 {
  counter = 0;
  miao++;
  if(miao >= 60)
  {
   miao = 0;
   fen++;
   if(fen >= 60)
   {
    fen = 0;
    shi++;
    if(shi >= 24)
    {
     shi = 0;
    }
   }
  }
 }
}
/*************串口中斷服務程序***********************/
void uart_int() interrupt 4
{
 RI = 0;
 if(SBUF >= 23 && SBUF <= 59)
 {
  fen = SBUF;
  miao = 0;
  FM = 0;
  delayms(30);
  FM = 1;
 }
 if(SBUF >= 0 && SBUF <= 23)
 {
  shi = SBUF;
  fen = SBUF;
  FM = 0;
  delayms(30);
  FM = 1;
 }
 flag = 1;
}
 

 

關閉窗口

相關文章

主站蜘蛛池模板: 亚洲精品久久久久久久久久久久久 | 黄色香蕉视频在线观看 | 久久精品亚洲一区 | 日韩成人一区 | 亚洲日韩中文字幕一区 | 成人久久一区 | 日韩激情免费 | 午夜精品一区二区三区在线视频 | 国产高清免费视频 | 中文字幕一区二区三区日韩精品 | 日韩欧美在线不卡 | 欧美日韩三级在线观看 | 成人av免费| 亚洲一区二区电影网 | 九色国产 | 亚洲国产午夜 | 成在线人视频免费视频 | 日韩一区二区三区在线 | 国产在线一区二 | 五月天天丁香婷婷在线中 | 国产丝袜一区二区三区免费视频 | 国产高清一区 | 精品视频一区二区三区 | 视频在线一区 | 蜜月va乱码一区二区三区 | 日本成人二区 | 黄a在线播放 | 国产美女在线看 | 日本天天操 | 久久精品亚洲精品国产欧美 | 老头搡老女人毛片视频在线看 | 自拍偷拍中文字幕 | 午夜精品久久久久久久 | 日本精品一区二区三区在线观看视频 | av午夜电影 | 亚洲精品乱码久久久久v最新版 | 久久久久国产精品午夜一区 | 久草精品视频 | 日韩精品成人在线 | 久久综合国产 | 美女精品一区 |