亚洲春色中文字幕久久久-三上亚,一吻二脱三床四吻胸,国产真实伦对白视频全集,在线毛片观看,精品成品入口黄网,国产毛aⅴ片久久久,亚洲AV色香蕉一区二区三区老师,萧皇后A级艳片,色情日本视频更新,99久久亚洲精品日本无码
標題:
基于51單片機的電子鐘仿真程序(7個功能,具體功能見帖內介紹)
[打印本頁]
作者:
wyqf
時間:
2021-12-13 14:14
標題:
基于51單片機的電子鐘仿真程序(7個功能,具體功能見帖內介紹)
大一時候做的單片機設計,在b站錄了視頻進行相應的介紹(BV1mJ411L7Ek)很多朋友一直想要但是以前的代碼水平并不咋地(怕放出來丟人)也就一直沒有開源,之后有時間會用狀態機+時間片輪的思想進行重構給朋友們進行對比學習,這次就先給各位放出來了
基本的時間與溫度顯示功能/時間校準/鬧鐘功能/秒表(開始、暫停、繼續,記錄一個秒表時間,秒表進行清零,長按顯示記錄的秒表時間)/倒計時(開始、暫停、繼續,重新倒計時,倒計時清零)/12/24時顯示選擇
因為各種中斷的原因,這個電子鐘本身去記錄時間的功能已經被破壞掉了,后續應該可以在增加變量,去記錄所經歷的中斷數,對于基礎時鐘的時間進行補償,使其達到更加精準的效果。(不過那樣又是得花費很多時間去計算所占用的時間啊什么的,實在是肝不動了)
仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)
51hei.png
(43.76 KB, 下載次數: 167)
下載附件
2021-12-13 21:46 上傳
單片機源程序如下:
#include<reg52.h>
#include<absacc.h>
#include<stdio.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
#define out P0
sbit RS=P2^0;
sbit RW=P2^1;
sbit E=P2^2;
sbit ctime=P3^2;//外部中斷0,時間校準
sbit s_alarm=P3^3;//外部中斷1,鬧鐘設定
sbit LED=P1^2;//低電平點亮
sbit P2_4=P1^1;//24時12時標記位,實在沒辦法了,data區已經用完了
//五個按鍵低電平有效,上下左右 確認 1234 0
void lcd_initial(void);
void lcd_initial2(void);
void check_busy(void);
void write_command(uchar com);
void write_data(uchar dat);
void string(uchar ad,uchar*s);
void delay(uint);
int read_keys(void);
void c_string(uchar ad,uchar *s);
void s_string(uchar ad,uchar s);
void write_time(void);
void inter_init(void);
void base_time(void);
void C_time(void);
void alarm(void);
void stopwatch(void);
void countdown(void);
void c_down(void);
void t24_12(void);
struct xwei
{
uchar x_address;//顯示屏的地址
uchar* zhi;//指向傳遞值的指針
}wei[2][7];
struct zwei
{
uchar x_address;//顯示屏的地址
uchar zhi;//存儲值
};
uchar code mdays[12]={31,29,31,30,31,30,31,31,30,31,30,31};
uchar code weeks[7][5]={"Mon","Tues","Wed","Thur","Fri","Sat","Sun"};
uchar code tab1[]={"20 - - "};
uchar code tab2[]={" : : "};
uchar second[3]={53,55};//記錄s//所有數值均以ASCII值表示
uchar minute[3]={53,57};//記錄min
uchar hour[3]={50,51};//記錄h
uchar day[3]={51,49};//記錄日
uchar month[3]={49,50};//記錄月
uchar year[3]={49,56};//記錄年
uchar week=7;//記錄星期幾
uchar x=0,y=0;//光標位置
uchar a_p_m=0;//am,pm標記量
uchar pFlag=0;
uchar btFlag=1;//基本事件標記
uchar bpFlag=0;//基本校準標記
uchar bfFlag=0;//基本選擇標記
uchar swFlag=0;//秒表標記
uchar cdFlag=0;//倒計時標記
uchar acFlag=0;//鬧鐘標記
uint timer=0;//中斷記錄變量
uint sd=0;//秒表,倒計時記錄變量
uchar sdFlag=0;//毫秒級計時標記位
int B_state_tag=-1;//按鍵狀態標記位
//鬧鐘變量
struct zwei alarm_clock[4];
struct zwei TIME_clock[4];
void timer0() interrupt 1 using 1//基本時鐘
{
timer++;
if(timer==10000)
{
timer=0;
btFlag=1;
}
}
void timer1() interrupt 3 using 1//秒表,倒計時時鐘
{
sd++;
if(sd==800)//每100ms加加//由實際測試得出非計算值
{
sd=0;
sdFlag=1;
}
}
void int0() interrupt 0 using 0//時間校準
{
bpFlag=1;
}
void int1() interrupt 2//功能選擇
{
bfFlag=1;//帶選擇
EA=0;
//TR0=0;
pFlag=1;
lcd_initial2();
delay(1);
write_command(0x01);
delay(1);
x=0;
while(bfFlag)
{
while(read_keys()==-1);//等待按鍵按下
B_state_tag=read_keys();
x=B_state_tag-1;//上下按鍵選擇日期或者時間
while(bfFlag)//按鍵與顯示屏操作
{
while(read_keys()==-1);
B_state_tag=read_keys();//讀取按鍵值
while(read_keys()!=-1);
switch(B_state_tag)
{
case 1://上
{
string(0x80,"alarm clock");
acFlag=1;
}break;
case 2://下
{
string(0x80,"stopwatch");
swFlag=1;
}break;
case 3://左
{
string(0x80,"countdown");
cdFlag=1;
}break;
case 4://右
{
if(P2_4==0)
P2_4=1;
if(P2_4==1)
string(0xce," ");
string(0x80,"24or12");
}break;
case 0://確認
{
bfFlag=0;
}break;
default:break;
}
while(read_keys()!=-1);
}
}
lcd_initial();
inter_init();
bfFlag=0;
}
//系統時鐘為12MHZ
void main()
{
P2_4=0;
lcd_initial();
inter_init();
P1=0xff;//讀取按鍵,先寫入
string(0x80,tab1);
string(0xc0,tab2);
while(1)
{
if(swFlag==1)//秒表
{
for(x=1;x<=1;)//只執行一次清屏操作
{
TR1=1;
TH1=0x9C;//100us 中斷一次
TL1=0x9C;
write_command(0x01);
string(0x83,":");
x=2;
}
stopwatch();
}
else
{
write_time();
}
if(cdFlag==1)//倒計時
{
for(x=1;x<=1;)//只執行一次清屏操作
{
write_command(0x01);
string(0x83,":");
countdown();
TH1=0x9C;//100us 中斷一次
TL1=0x9C;
x=2;
}
countdown();
c_down();
}
else
{
write_time();
}
if(btFlag==1)
{
base_time();
}
if(bpFlag==1)
{
C_time();
}
if(acFlag==1)
{
LED=1;
……………………
…………限于本文篇幅 余下代碼請從51黑下載附件…………
復制代碼
仿真代碼51hei附件下載:
多功能電子鐘.7z
(75.87 KB, 下載次數: 262)
2021-12-13 21:48 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
作者:
小白123444
時間:
2021-12-13 23:51
沒仔細看呢,但看到這么多定義內容先頂一個以表敬意
作者:
HWL0541
時間:
2021-12-14 10:18
支持一下樓主,希望多發好帖
作者:
14003
時間:
2021-12-14 13:54
需要用Proteus8.8仿真
作者:
chlcsf
時間:
2021-12-14 17:21
挺好的,支持一下樓主
作者:
2hd
時間:
2022-6-15 18:52
請問一下,這個調時間應該怎么調,只會調日期,不能調時間啊
作者:
zhengqing1212
時間:
2022-9-3 14:54
真的很有效地解決了我的問題,看到樓主的這篇,我忽然茅塞頓開
作者:
632513350
時間:
2022-12-24 11:11
樓主太強了
作者:
撒謊vAB·
時間:
2024-6-11 09:57
做的真好,太強了
作者:
zx173
時間:
2024-12-4 10:00
挺好的,支持一下樓主
作者:
STC莊偉
時間:
2024-12-4 13:38
其實串口打印也挺好用的,很多工程師都在用,加上不停電下載
#include "ai8051u.h" //調用頭文件
#include "stc32_stc8_usb.h" //調用頭文件
#define FOSC 24000000UL
char *USER_DEVICEDESC = NULL;
char *USER_PRODUCTDESC = NULL;
char *USER_STCISPCMD = "@STCISP#";
void main(void) //主函數
{
WTST=0;
CKCON=0;
P_SW2 |= 0x80; //B7位寫1,使能訪問XFR
P0M1 = 0x00; P0M0 = 0x00;
P1M1 = 0x00; P1M0 = 0x00;
P2M1 = 0x00; P2M0 = 0x00;
P3M1 = 0x00; P3M0 = 0x00;
P4M1 = 0x00; P4M0 = 0x00;
P5M1 = 0x00; P5M0 = 0x00;
P6M1 = 0x00; P6M0 = 0x00;
P7M1 = 0x00; P7M0 = 0x00;
P3M0 &=~0x03;
P3M1 = 0x03;
IRC48MCR =0x80;
while (!(IRC48MCR & 0x01));
USBCLK=0x00;
USBCON=0x90;
usb_init(); //USB CDC 接口配置
EUSB = 1; //使能USB中斷
EA = 1; //
while (DeviceState != DEVSTATE_CONFIGURED); //等待USB完成配置
while(1)
{
if (bUsbOutReady) //如果接收到了數據
{
USB_SendData(UsbOutBuffer,OutNumber); //發送數據緩沖區,長度(接收數據原樣返回, 用于測試)
usb_OUT_done();
}
}
}
復制代碼
作者:
玉湖
時間:
2024-12-18 17:11
太強了
歡迎光臨 (http://www.denmoz.com/bbs/)
Powered by Discuz! X3.1