欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136
標題:
單片機時鐘顯示程序 要怎么提取出平面指針的代碼?
[打印本頁]
作者:
SReson
時間:
2020-12-23 15:41
標題:
單片機時鐘顯示程序 要怎么提取出平面指針的代碼?
最近在玩旋轉led屏幕,想單獨屏面顯示指針時鐘,側面數字時鐘或者日期也行,但是就是提取不了商家的代碼用后面老是有錯
/*************************************************************
時鐘顯示程序
單片機 IAP15W4K61S4 或者其他51 晶振頻率 18.432M
字模軟件用 PC2002
逐列取模方式
電機旋轉方向 順時針
/***********************************************************
說明:本程序支持配套遙控器調整時間
播放按鍵 切換調整 時、分、秒、月、日
加 按鍵:增加
減 按鍵:減少
menu按鍵: 時鐘復位
遙控器按鍵1 :平面顯示文字+側面顯示時鐘 可調時
遙控器按鍵2 :平面指針時鐘+側面顯示文字
*************************************************************/
#include "NEW_8051.H"
#include "intrins.h"
#include "task.h"
#define FOSC 18432000L //系統頻率
#define BAUD 115200 //串口波特率
bit Scan_bit=0;
uint Offset=0;
bit BIT_timeout=0;
uchar ucMode=1; //模式
bit Time0_flag=0; //定時器T0中斷標志位
uchar DISP_LINE=0;
uint Pt=50,S0,T,D; //計數用的變量
uchar ucAdder=0;
uchar code TAB_12369[]=
{
0xFF,0x03,0xFF,0xB3,0x6B,0x6B,0x9B,0xFF,
0x8F,0x77,0x7F,0x8F,0x7F,0x77,0x8F,0xFF,//3
0xFF,0xFF,0x9F,0x6D,0x6D,0x6B,0x87,0xFF,//6
0x9F,0xEF,0xF7,0x87,0x77,0x77,0x8F,0xFF,///9
};
/*********中斷子程序**********/
void int0() interrupt 0 //使用外部中斷0
{
BIT_timeout=1; //起點標志位
if(ucMode!=1)
{
D+=(DISP_LINE-180)*2; //修正值
Pt=205+D;
//得到定時器T0的初設值
TH0=-Pt/256;
TL0=-Pt%256; //設置定時器T0的初設值
DISP_LINE=0; //計數器清零,將重新計數
switch (ucMode)
{
case 0x02:
du1302();//獲取時間
Sec=Sec/16*10+Sec%16 ;
Cent=Cent/16*10+Cent%16 ;
Hour=Hour/16*10+Hour%16 ;
if(Hour>11)
{
Hour=Hour-12;
}
Sec=Sec*3;//秒針定位="秒"*3
Hour=(Hour*15)+(Cent/4);//時針定位="時"*15+"分"/4
Cent=Cent*3;//分針定位="分"*3
Offset++;
if(Offset>672)//側面有多少文字 這個值就對應改成 多少字*16
Offset=0;
break;
case 0x03:
du1302();//獲取時間
Sec=Sec/16*10+Sec%16 ;
Cent=Cent/16*10+Cent%16 ;
Hour=Hour/16*10+Hour%16 ;
if(Hour>12)
{
Hour=Hour-12;
}
break;
default:
break;
}
}
}
/******************************************/
void Send_uart(unsigned char d) /*從串口發送數據*/
{
ES=0;
SBUF=d;
while(TI==0); //等待發送完畢
TI=0;
ES=1;
}
/*************************************/
//圖片切換以及模擬表盤顯示函數
void display_pic()
{
//uchar date1,date2,date3,date4;
if(DISP_LINE<180)
{
if(Time0_flag)
{
Time0_flag=0;
Close();
if(ucMode==2)
{
//DISP_LINE=DISP_LINE-1;
//標整點,以及顯示數字12,3,6,9
if ( (DISP_LINE >= 175) || (DISP_LINE <= 3)) //12點
{
ucAdder=DISP_LINE+4 ;
if ( ucAdder>=180) ucAdder=ucAdder-180 ;
}
else if ( (DISP_LINE >= 41) && (DISP_LINE <= 48)) //3點
{
ucAdder=DISP_LINE-41+8*1 ;
}
else if ( (DISP_LINE >= 86) && (DISP_LINE <= 93)) //6點
{
ucAdder=DISP_LINE-86+8*2 ;
}
else if ( (DISP_LINE >= 131) && (DISP_LINE <= 138)) //9點
{
ucAdder=DISP_LINE-131+8*3 ;
}
else
{
ucAdder=250;
/*************形成表盤*******************/
switch (DISP_LINE)
{
case 180*1/12 : //1點
case 180*2/12 : //2點
case 180*4/12 : //4點
case 180*5/12 : //5點
case 180*7/12 : //6點
case 180*8/12 : //7點
case 180*10/12 : //10點
case 180*11/12 : //11點
//LED=0;
PortA(0X0F);
break;
}
}
if ( ucAdder < 32 )
{
PortA(TAB_12369[ucAdder]) ; //查表顯示12,3,6,9
}
/****************************************/
//顯示指針"時"
// i = Hour ;
// j = Hour ;
// if ( ++i > 179 ) i=0 ; //i+1,結果>179,則清零
// if ( --j > 179 ) i=179 ; //j-1,結果為負,則重新賦值179
if(( (Hour-2)<=DISP_LINE)&&((Hour+2)>=DISP_LINE) )
{
if(((Hour-1)==DISP_LINE)||((Hour+1)==DISP_LINE))
{
PortD(0XFF);
PortC(0XBF);
}
else if(((Hour-2)==DISP_LINE)||((Hour+2)==DISP_LINE))
{
PortD(0XFF);
PortC(0XDF);
}
}
if(Hour==DISP_LINE)//||(DISP_LINE==i)||(DISP_LINE==j
{
PortD(0X80) ;
PortC(0X00);
}
//顯示指針"分"
if(( (Cent-2)<=DISP_LINE)&&((Cent+2)>=DISP_LINE) )
{
if(((Cent-1)==DISP_LINE)||((Cent+1)==DISP_LINE))
{
PortC(0XFF);
PortB(0XFB);
PortD(0XFF);
}
else if(((Cent-2)==DISP_LINE)||((Cent+2)==DISP_LINE))
{
PortC(0XFF);
PortB(0XFD);
PortD(0XFF);
}
}
if(Cent==DISP_LINE)
{
//PortB=(0X00);
PortC(0X00);
PortB(0XF0);
PortD(0X80);
}
//顯示指針"秒"
if(( (Sec-2)<=DISP_LINE)&&((Sec+2)>=DISP_LINE) )
{
if(((Sec-1)==DISP_LINE)||((Sec+1)==DISP_LINE))
{
PortB(0XBF);
PortC(0XFF);
PortD(0XFF);
}
else if(((Sec-2)==DISP_LINE)||((Sec+2)==DISP_LINE))
{
PortB(0XDF);
PortC(0XFF);
PortD(0XFF);
}
}
if(Sec==DISP_LINE)
{
PortB(0X00);
PortC(0X00);
PortD(0X80);
}
//DISP_LINE=DISP_LINE+1;
Show_R(Lzimo[(DISP_LINE+Offset)*2],Lzimo[(DISP_LINE+Offset)*2+1]);//送16*16文字顯示
}
}
}
}
/*********************************************/
void Init(void)
{
P0M0=0X00;//初始化IO口 為準雙向口
P0M1=0X00;
P1M0=0X00;
P1M1=0X00;
P2M0=0X00;
P2M1=0X00;
P3M0=0X00;
P3M1=0X00;
P4M0=0X00;
P4M1=0X00;
P5M0=0X00;
P5M1=0X00;
P6M0=0X00;
P6M1=0X00;
P7M0=0X00;
P7M1=0X00;
Show_R(0x55,0x55);//測試
Show_L(0x55,0x55,0x55,0x55);//測試
AUXR &= 0x7F; //定時器時鐘12T模式 //200us
TMOD &= 0xF0; //設置定時器模式
TMOD |= 0x01; //設置定時器模式
TL0 = 0xCD; //設置定時初值
TH0 = 0xFE; //設置定時初值
TF0 = 0; //清除TF0標志
TR0 = 1; //定時器0開始計時
ET0=1;
AUXR &= 0xBF; //定時器時鐘12T模式
TMOD &= 0x0F; //設置定時器模式
TMOD |= 0x20; //設置定時器模式
TL1 = 0x12; //設置定時初值 155US
TH1 = 0x12; //設置定時重載值
TF1 = 0; //清除TF1標志
ET1=1;
TR1 = 0; //定時器1開始計時
SCON = 0x50;
T2L = (65536 - (FOSC/4/BAUD)); //設置波特率重裝值
T2H = (65536 - (FOSC/4/BAUD))>>8;
AUXR = 0x14; //T2為1T模式, 并啟動定時器2
AUXR |= 0x01; //選擇定時器2為串口1的波特率發生器
// ES = 1; //使能串口1中斷
IT0 = 1; //外部中斷為邊沿觸發
//設置INT0的中斷類型 (1:僅下降沿 0:上升沿和下降沿)
EX0 = 1; //使能INT0中斷
IT1=1;
EX1=1;//外部中斷1 下降沿 中斷
EA = 1;
}
/************************************/
void Timer0Interrupt(void) interrupt 1
{
Time0_flag=1; //定時中斷標志位置1;
TH0=-Pt/256;TL0=-Pt%256; //設置定時器T0的初設值
DISP_LINE++; //計數
}
/*****主函數*****/
void main(void)
{
Init();
Auto_Set1302(starts_time);//自動初始化時鐘
Send_uart(0x55);
//主程序
while(1)
{
if((ucMode==2)||(ucMode==3))
{
display_pic();
}
//BIT_timeout=1;
if(BIT_timeout==1) //起點判斷
{
BIT_timeout=0; //清零
Scan_bit=1;// 起點檢測到后 LED不再流水測試
if( new_code ) //有紅外按鍵
{
new_code=0;
switch( key_code ) //根據不同的按鍵值執行不同的動作
{
case 0x0C:
ucMode=0x01;//數字鐘模式+側面文字
TR0 = 0;
break;
case 0x18:
ucMode=0x02;//指針式時鐘模式
TR0 = 1;
break;
case 0x5E:
// ucMode=0x03;//指針時鐘模式
TR0=1;
break;
case 0x40: //調時加
Set(id,1);
break;
case 0x19: //調時減
Set(id,0);
break;
case 0x15://調時切換
id++;
if(id>5)
{
id=0;
}
break;
case 0x47://時鐘初始化
Set1302(starts_time); //初始化
W1302(0x8e,0x00); //控制命令,WP=0,寫操作
W1302(0x90,0xa5); //打淶二級? 一個二級管串聯一個2K玷
//write_1302Data(DISP_TIME_adder,160);
break;
default: break;
}
key_code=0;
}
if(ucMode==1)
{
du1302();//讀取時鐘芯片 的時鐘數據
Show_line_time();//顯示時間
}
}
}
}
復制代碼
實驗4、 指針式時鐘顯示程序.zip
2020-12-23 15:41 上傳
點擊文件名下載附件
124.2 KB, 下載次數: 2
歡迎光臨 (http://m.raoushi.com/bbs/)
Powered by Discuz! X3.1