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

 找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

搜索
查看: 2173|回復(fù): 0
打印 上一主題 下一主題
收起左側(cè)

C51單片機(jī)日歷時(shí)鐘設(shè)計(jì)

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
  • #include "public.h"
  • //共陽(yáng)極數(shù)碼管顯示編碼
  • u16 code table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
  • //數(shù)碼管顯示內(nèi)容
  • bit smg_show_flag = 1;
  • bit smg_show_flag1 = 1;
  • //數(shù)碼管顯示功能,1:數(shù)碼管顯示年月日,2:數(shù)碼管顯示時(shí)分秒,3:串口輸出日期
  • u8 smg_show_mode = 1;
  • u8 time_buf[50]={0};
  • //定義年月日變量
  • u16  year = 2021;
  • u16 month = 7;
  • u16 day = 3;
  • //定義時(shí)分秒變量
  • u16 hour=3,min=12,sec,ssec;
  • //延時(shí)函數(shù)
  • void delay(u8 i)
  • {
  •    u8 k;
  •         for(k=0;k<i;k++);
  • }
  • /*********************************************************************
  •         函數(shù)名字:TIM0_IT_Init
  •         函數(shù)功能:定時(shí)器0的中斷初始化函數(shù)
  • **********************************************************************/
  • void Timer0Init(void)
  • {
  •         //1.配置定時(shí)器0為工作方式1
  •         TMOD |= 0x01;
  •         //2.配置TH和TL確定定時(shí)時(shí)長(zhǎng),50ms
  •         //單片機(jī)時(shí)鐘頻率為12000000Hz,定時(shí)器時(shí)鐘頻率=單片機(jī)時(shí)鐘頻率/12=1000000Hz
  •         //50ms = 50/1000 = 1/20s,所以50ms定時(shí)器計(jì)數(shù)值為1000000/20 = 50000
  •         //由于定時(shí)器是自加計(jì)數(shù)
  •         TH0 = (65535-50000) / 256;
  •         TL0 = (65535-50000) % 256;
  •         //3.啟動(dòng)定時(shí)器0開(kāi)始計(jì)數(shù)
  •         TR0 = 1;
  •         //4.清零定時(shí)器0的溢出標(biāo)志位
  •         TF0 = 0;
  •         //5.打開(kāi)定時(shí)器0中斷
  •         ET0 = 1;
  •         //6.打開(kāi)全局中斷
  •         EA = 1;
  • }
  • //定時(shí)器1的初始化函數(shù)
  • void Timer1Init()
  • {
  •         TMOD|=0X10;
  •         TH1=0Xd8;
  •         TL1=0Xf0;
  •         ET1=1;
  •         EA=1;
  •         TR1=1;
  • }
  • /*********************************************************************
  •         函數(shù)名字:smg_display_date
  •         函數(shù)功能:數(shù)碼管顯示日期函數(shù)
  •         參數(shù):顯示的內(nèi)容標(biāo)志:1:年,0:月和日
  • **********************************************************************/
  • void smg_display_date(u8 showflag)
  • {
  •         u8 i;
  •         if(showflag == 1)
  •         {
  •                 for(i=0; i<4; i++)
  •                 {
  •                         switch(i)
  •                         {
  •                                 //進(jìn)行數(shù)碼管位選1,點(diǎn)亮第1位數(shù)碼管
  •                                 case 0:        WEI1 = 0,WEI2 = 1,WEI3 = 1,WEI4 = 1;SMG_PORT = table[year/1000%10];break;
  •                                 //進(jìn)行數(shù)碼管位選2,點(diǎn)亮第2位數(shù)碼管
  •                                 case 1:        WEI1 = 1;WEI2 = 0;WEI3 = 1,WEI4 = 1;SMG_PORT = table[year/100%10];break;
  •                                 //進(jìn)行數(shù)碼管位選3,點(diǎn)亮第3位數(shù)碼管
  •                                 case 2:        WEI1 = 1;WEI2 = 1;WEI3 = 0,WEI4 = 1;SMG_PORT = table[year/10%10];break;
  •                                 //進(jìn)行數(shù)碼管位選4,點(diǎn)亮第4位數(shù)碼管
  •                                 case 3:        WEI1 = 1;WEI2 = 1;WEI3 = 1,WEI4 = 0;SMG_PORT = table[year%10];break;
  •                         }
  •                         //點(diǎn)亮延時(shí)2ms
  •                 delay(2000);
  •                         //關(guān)顯示
  •                         SMG_PORT = 0xff;
  •                 }
  •         }
  •         else if(showflag == 0)
  •         {
  •                 for(i=0; i<4; i++)
  •                 {
  •                         switch(i)
  •                         {
  •                                 //進(jìn)行數(shù)碼管位選1,點(diǎn)亮第1位數(shù)碼管
  •                                 case 0:        WEI1 = 0,WEI2 = 1,WEI3 = 1,WEI4 = 1;SMG_PORT = table[month/10%10];break;
  •                                 //進(jìn)行數(shù)碼管位選2,點(diǎn)亮第2位數(shù)碼管
  •                                 case 1:        WEI1 = 1;WEI2 = 0;WEI3 = 1,WEI4 = 1;SMG_PORT = table[month%10];break;
  •                                 //進(jìn)行數(shù)碼管位選3,點(diǎn)亮第3位數(shù)碼管
  •                                 case 2:        WEI1 = 1;WEI2 = 1;WEI3 = 0,WEI4 = 1;SMG_PORT = table[day/10%10];break;
  •                                 //進(jìn)行數(shù)碼管位選4,點(diǎn)亮第4位數(shù)碼管
  •                                 case 3:        WEI1 = 1;WEI2 = 1;WEI3 = 1,WEI4 = 0;SMG_PORT = table[day%10];break;
  •                         }
  •                         //點(diǎn)亮延時(shí)2ms
  •                         delay(2000);
  •                         //關(guān)顯示
  •                         SMG_PORT = 0xff;
  •                 }
  •         }
  • }
  • void smg_display_time(u8 showflag1)
  • {
  •         u8 i;
  •         if(showflag1 == 1)
  •         {
  •                 for(i=0; i<4; i++)
  •                 {
  •                         switch(i)
  •                         {
  •                                 //進(jìn)行數(shù)碼管位選1,點(diǎn)亮第1位數(shù)碼管
  •                                 case 0:        WEI1 = 0,WEI2 = 1,WEI3 = 1,WEI4 = 1;SMG_PORT = table[min/10%10];break;
  •                                 //進(jìn)行數(shù)碼管位選2,點(diǎn)亮第2位數(shù)碼管
  •                                 case 1:        WEI1 = 1;WEI2 = 0;WEI3 = 1,WEI4 = 1;SMG_PORT = table[min%10];break;
  •                                 //進(jìn)行數(shù)碼管位選3,點(diǎn)亮第3位數(shù)碼管
  •                                 case 2:        WEI1 = 1;WEI2 = 1;WEI3 = 0,WEI4 = 1;SMG_PORT = table[sec/10%10];break;
  •                                 //進(jìn)行數(shù)碼管位選4,點(diǎn)亮第4位數(shù)碼管
  •                                 case 3:        WEI1 = 1;WEI2 = 1;WEI3 = 1,WEI4 = 0;SMG_PORT = table[sec%10];break;
  •                         }
  •                         //點(diǎn)亮延時(shí)2ms
  •                                 delay(2000);
  •                         //關(guān)顯示
  •                         SMG_PORT = 0xff;
  •                 }
  •         }
  •         else if(showflag1 == 0)
  •         {
  •                 for(i=0; i<4; i++)
  •                 {
  •                         switch(i)
  •                         {
  •                                 //進(jìn)行數(shù)碼管位選1,點(diǎn)亮第1位數(shù)碼管
  •                                 case 0:        WEI1 = 0,WEI2 = 1,WEI3 = 1,WEI4 = 1;SMG_PORT = table[hour/10%10];break;
  •                                 //進(jìn)行數(shù)碼管位選2,點(diǎn)亮第2位數(shù)碼管
  •                                 case 1:        WEI1 = 1;WEI2 = 0;WEI3 = 1,WEI4 = 1;SMG_PORT = table[hour%10];break;
  •                                 //進(jìn)行數(shù)碼管位選3,點(diǎn)亮第3位數(shù)碼管
  •                                 case 2:        WEI1 = 1;WEI2 = 1;WEI3 = 0,WEI4 = 1;SMG_PORT = table[min/10%10];break;
  •                                 //進(jìn)行數(shù)碼管位選4,點(diǎn)亮第4位數(shù)碼管
  •                                 case 3:        WEI1 = 1;WEI2 = 1;WEI3 = 1,WEI4 = 0;SMG_PORT = table[min%10];break;
  •                         }
  •                         //點(diǎn)亮延時(shí)2ms
  •                         delay(2000);
  •                         //關(guān)顯示
  •                         SMG_PORT = 0xff;
  •                 }
  •         }
  • }
  • /*********************************************************************
  •         函數(shù)名字:USART_Init
  •         函數(shù)功能:串口初始化函數(shù),沒(méi)有開(kāi)啟串口中斷
  • **********************************************************************/
  • void USART_Init(void)
  • {
  •            T2MOD =0;     //自動(dòng)重載
  •     T2CON = 0x30;     //T2用做發(fā)送接收時(shí)鐘
  •     TH2 = 0xFF;      //9600波特率,11.0592Mhz晶振
  •     TL2 = 0xDC;
  •     RCAP2H = 0xFF;
  •     RCAP2L = 0xDC;
  •     SCON = 0x50;     //串口方式1,1個(gè)起始位,1個(gè)停止位,8位數(shù)據(jù),可變波特率
  •     PCON = 0X00;    //波特率不加倍
  •     TR2 = 1;          //啟動(dòng)T2
  • //    ES = 1;         //開(kāi)串口中斷
  • //    EA = 1;
  • }
  • /*********************************************************************
  •         函數(shù)名字:Send_Byte
  •         函數(shù)功能:發(fā)送字符函數(shù)
  • **********************************************************************/
  • void Send_Byte(u8 da)
  • {
  •         //發(fā)送字符H
  •         SBUF = da;
  •         //等待發(fā)送完成
  •         while(TI != 1);
  •         //清空發(fā)送標(biāo)志位
  •         TI = 0;
  • }
  • /*********************************************************************
  •         函數(shù)名字:Send_Str
  •         函數(shù)功能:發(fā)送封裝發(fā)送字符串函數(shù)符函數(shù)
  • **********************************************************************/
  • void Send_Str(u8  *str)
  • {
  •         u8 i;
  •         for(i=0; str[ i]!='\0'; i++)
  •                 Send_Byte(str[ i]);
  • }
  • //按鍵函數(shù)
  • void key_san()
  • {
  •   if(KEY1==0)
  •                 {
  •                   Send_Str("        當(dāng)前運(yùn)行的功能為A\r\n");
  •                         delay(200);
  •                         if(KEY1==0)
  •                         {
  •                                 smg_display_date(smg_show_flag);
  •                         }
  •                 }
  •                         if(KEY2==0)
  •                 {
  •                         Send_Str("        當(dāng)前運(yùn)行的功能為B\r\n");
  •                                 delay(200);
  •                         if(KEY2==0)
  •                         {
  •                                 smg_display_time(smg_show_flag1);
  •                         }
  •     }
  •                 if(KEY3==0)
  •                 {
  •                         Send_Str("        當(dāng)前運(yùn)行的功能為C\r\n");
  •                         delay(200);
  •                         if(KEY3==0)
  •                         {
  •                         sprintf(time_buf, "當(dāng)前時(shí)間為%d年%d月%d日%d時(shí)%d分%d秒\r\n",year,month,day,hour,min,sec);
  •                    Send_Str(time_buf);
  •                         }
  •     }
  • }
  • /*********************************************************************
  •         函數(shù)名字:timer0_irq
  •         函數(shù)功能:定時(shí)器0的中斷服務(wù)函數(shù)
  • **********************************************************************/
  • void timer0_irq(void) interrupt 1
  • {
  •         static u8 i = 0;
  •         //循環(huán)給定時(shí)器0裝入初值
  •         TH0 = (65535-50000) / 256;
  •         TL0 = (65535-50000) % 256;
  •         //讓計(jì)數(shù)值自加
  •         i++;
  •         //40*50=2000ms,即2秒的延時(shí)
  •         if(i == 40)
  •         {
  •                 //清空計(jì)數(shù)值,讓程序進(jìn)行下一次1秒的延時(shí)
  •                 i = 0;
  •                 //每2秒鐘切換數(shù)碼管顯示的內(nèi)容
  •                 smg_show_flag=~smg_show_flag;
  •                 smg_show_flag1=~smg_show_flag1;
  •         }
  • }
  • //定時(shí)器1的中斷服務(wù)函數(shù)
  • void Timer0() interrupt 3
  • {
  •                         TH1=0Xd8;
  •                         TL1=0Xf0;
  •                         ssec++;
  •                         if(ssec>=100)
  •                         {
  •                         ssec=0;
  •                         sec++;
  •                         if(sec>=60)
  •                         {
  •                         sec=0;
  •                         min++;
  •                         if(min>=60)
  •                         {
  •                         min=0;
  •                         hour++;
  •                         if(hour>=24)
  •                         {
  •                         hour=0;
  •                   }
  •                         }
  •                 }
  •         }
  • }

224518vwavaaxs4xab4gib.png (99.68 KB, 下載次數(shù): 125)

仿真原理圖

仿真原理圖
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏1 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 亚洲精品视频免费观看 | 中文字幕日韩在线观看 | 婷婷开心激情综合五月天 | 最新中文字幕 | 成人免费观看网站 | 久久久亚洲精品视频 | 欧美又大粗又爽又黄大片视频 | 综合五月 | 亚洲嫩草| 欧美在线a | 中文字幕日韩欧美一区二区三区 | 在线免费观看毛片 | 成人国产精品免费观看视频 | caoporn免费 | 日韩视频在线观看中文字幕 | 黄色成人在线网站 | 成人国产一区二区三区精品麻豆 | 国产丝袜一区二区三区免费视频 | 国产99小视频 | 欧美日韩国产不卡 | 一区天堂| 成人免费一区二区三区视频网站 | 国产伦精品一区二区三毛 | 日本亚洲欧美 | 久久久久久电影 | 免费一级欧美在线观看视频 | 午夜免费观看体验区 | 在线观看国产视频 | www.国产一区 | 国内精品在线视频 | 日本精品一区二区三区视频 | 欧美日韩中 | 在线亚洲一区 | 国产免费一区二区 | 在线视频一区二区三区 | 黄色成人av | 精品1区2区3区4区 | 亚洲国产精品一区二区第一页 | 午夜丰满少妇一级毛片 | 精品久久久久久久久亚洲 | 亚洲免费观看视频网站 |