導航:首頁 > 裝置知識 > 單片機角度檢測裝置課程設計

單片機角度檢測裝置課程設計

發布時間:2022-10-21 08:05:55

1. 高分求單片機課程設計報告

手邊有一些你需要的關於單片機的論文設計資料 需要的話加QQ 晚上7點以後隱身在線,直接加就行,說明要的資料名字就好。嘿嘿 樓主 要是覺的好的話 可別忘了給分哦。

2. 單片機課程設計

剛給一個兄弟做的

KEYVAL EQU30H

KEYTM EQU31H

KEYSCAN EQU32H

DAT EQU33H

SCANLED EQU39H

CLK EQU77H

SEC EQU78H

MIN EQU79H

HOUR EQU7AH

PAUSE BIT00H

DOT BIT01H

ORG0000H

LJMPMAIN

ORG000BH

LJMPT0ISR ;50ms定時

ORG001BH

LJMPT1ISR ;掃描顯示

ORG0030H

MAIN:

MOVSP,#5FH

MOVTMOD,#11H

MOVTH0,#03CH

MOVTL0,#0B0H

MOVTH1,#0ECH

MOVTL1,#078H

MOVKEYVAL,#0

MOVSCANLED,#0

MOV33H,#10H

MOV34H,#10H

MOV35H,#10H

MOV36H,#10H

MOV37H,#10H

MOV38H,#10H

MOVSEC,#0

MOVMIN,#0

MOVHOUR,#0

MOVCLK,#0

CLRPAUSE

SETBEA

SETBET1

SETBTR1

LOOP:

LCALLKEYSEL

MOVA,KEYVAL

CJNEA,#0FFH,LOOP1

SJMPLOOP

LOOP1:

CJNEA,#10,LOOP2 ;「ON」啟動

SETBTR0

SETBET0

SETBPAUSE

SJMPLOOP

LOOP2:

CJNEA,#11,LOOP3 ;「=」清零

MOVSEC,#0

MOVMIN,#0

MOVHOUR,#0

LCALLDISCHG

SJMPLOOP

LOOP3:

CJNEA,#15,LOOP4 ;「+」暫停

CLRTR0

CLRET0

CLRPAUSE

SJMPLOOP

LOOP4:

CJNEA,#14,LOOP5 ;「-」清顯示暫停

MOV33H,#10H

MOV34H,#10H

MOV35H,#10H

MOV36H,#10H

MOV37H,#10H

MOV38H,#10H

CLRTR0

CLRET0

CLRPAUSE

SJMPLOOP

LOOP5:

CJNEA,#10,LOOP6 ;數字鍵

LOOP6:

JCLOOP7

LJMPLOOP

LOOP7:

JNBPAUSE,LOOP8 ;暫停狀態可以輸入數字鍵

LJMPLOOP

LOOP8:

MOV33H,34H

MOV34H,35H

MOV35H,36H

MOV36H,37H

MOV37H,38H

MOV38H,KEYVAL

MOVA,34H

SWAPA

ORLA,33H

LCALLBCDH

MOVHOUR,A

MOVA,36H

SWAPA

ORLA,35H

LCALLBCDH

MOVMIN,A

MOVA,38H

SWAPA

ORLA,37H

LCALLBCDH

MOVSEC,A

LJMPLOOP

;------------------

;BCD轉換為十六進制

BCDH:

MOVB,#10H

DIVAB

MOVR7,B

MOVB,#10

MULAB

ADDA,R7

RET

;------------------

;十六進制轉換為BCD

HBCD:

MOVB,#10

DIVAB

SWAPA

ORLA,B

RET

;------------------

KEYSEL:

MOV KEYVAL,#0

MOV KEYSCAN,#0EFH

LCALL GETKEY

MOV A,KEYTM

JZ KEYS1

MOV KEYVAL,A

SJMP KEYRTN

KEYS1:

MOV KEYSCAN,#0DFH

LCALL GETKEY

MOV A,KEYTM

JZ KEYS2

CLR C

ADD A,#4

MOV KEYVAL,A

SJMP KEYRTN

KEYS2:

MOV KEYSCAN,#0BFH

LCALL GETKEY

MOV A,KEYTM

JZ KEYS3

CLR C

ADD A,#8

MOV KEYVAL,A

SJMP KEYRTN

KEYS3:

MOV KEYSCAN,#7FH

LCALL GETKEY

MOV A,KEYTM

JZ KEYRTN

CLR C

ADD A,#12

MOV KEYVAL,A

KEYRTN:

LCALLCHGKEY

RET

;--------------------

GETKEY:

MOVKEYTM,#0

MOV A,KEYSCAN

MOV P3,A

NOP

MOV A,P3

ANL A,#0FH

XRL A,#0FH

JZ NOKEY

MOVR2,#10

LCALLDELAY

MOV A,P3

ANL A,#0FH

XRL A,#0FH

JZ NOKEY

MOV A,P3

ANL A,#0FH

MOV R7,A

SF:

MOV A,P3

ANL A,#0FH

XRL A,#0FH

JNZ SF

MOV A,R7

CJNE A,#0EH,NK1

MOV KEYTM,#1

SJMP NOKEY

NK1:

CJNE A,#0DH,NK2

MOV KEYTM,#2

SJMP NOKEY

NK2:

CJNE A,#0BH,NK3

MOV KEYTM,#3

SJMP NOKEY

NK3:

CJNE A,#07H,NOKEY

MOV KEYTM,#4

NOKEY: RET

;--------------------

DELAY:

MOVR3,#50

DELAY1:

MOVR4,#100

DJNZR4,$

DJNZR3,DELAY1

DJNZR2,DELAY

RET

;--------------------

T0ISR:

PUSHACC

CLRTR0

MOVTH0,#3CH

MOVTL0,#0B0H

SETBTR0

INCCLK

MOVA,CLK

CJNEA,#20,T0ISRE

MOVCLK,#0

INCSEC

MOVA,SEC

CJNEA,#60,T0ISRE

MOVSEC,#0

INCMIN

MOVA,MIN

CJNEA,#60,T0ISRE

MOVMIN,#0

INCHOUR

MOVA,HOUR

CJNEA,#24,T0ISRE

MOVSEC,#0

MOVMIN,#0

MOVHOUR,#0

T0ISRE:

LCALLDISCHG

POPACC

RETI

;--------------------

DISCHG:

MOVA,HOUR

LCALLHBCD

PUSHACC

ANLA,#0FH

MOV34H,A

POPACC

ANLA,#0F0H

SWAPA

MOV33H,A

MOVA,MIN

LCALLHBCD

PUSHACC

ANLA,#0FH

MOV36H,A

POPACC

ANLA,#0F0H

SWAPA

MOV35H,A

MOVA,SEC

LCALLHBCD

PUSHACC

ANLA,#0FH

MOV38H,A

POPACC

ANLA,#0F0H

SWAPA

MOV37H,A

RET

;--------------------

T1ISR:

PUSHACC

CLRTR1

MOVTH1,#0ECH

MOVTL1,#78H

SETBTR1

MOVDPTR,#LEDTAB

T100:

MOVR0,#DAT

MOVA,SCANLED

ADDA,R0

MOVR0,A

MOVA,SCANLED

JNZT101

MOVP2,#01H

CLRDOT

SJMPT1DIS

T101:

DECA

JNZT102

MOVP2,#02H

SETBDOT

SJMPT1DIS

T102:

DECA

JNZT103

MOVP2,#04H

CLRDOT

SJMPT1DIS

T103:

DECA

JNZT104

MOVP2,#08H

SETBDOT

SJMPT1DIS

T104:

DECA

JNZT105

MOVP2,#10H

CLRDOT

SJMPT1DIS

T105:

MOVP2,#20H

CLRDOT

T1DIS:

MOVA,@R0

MOVCA,@A+DPTR

JNBDOT,T1DIS1

ORLA,#01H

T1DIS1:

CPLA

MOVP0,A

INCSCANLED

MOVA,SCANLED

CJNEA,#6,T1END

MOVSCANLED,#0

T1END:

POPACC

RETI

;--------------------

CHGKEY:

MOVA,KEYVAL

JZKV16

DECA

JNZKV01

MOVKEYVAL,#7

RET

KV01:

DECA

JNZKV02

MOVKEYVAL,#4

RET

KV02:

DECA

JNZKV03

MOVKEYVAL,#1

RET

KV03:

DECA

JNZKV04

MOVKEYVAL,#10

RET

KV04:

DECA

JNZKV05

MOVKEYVAL,#8

RET

KV05:

DECA

JNZKV06

MOVKEYVAL,#5

RET

KV06:

DECA

JNZKV07

MOVKEYVAL,#2

RET

KV07:

DECA

JNZKV08

MOVKEYVAL,#0

RET

KV08:

DECA

JNZKV09

MOVKEYVAL,#9

RET

KV09:

DECA

JNZKV10

MOVKEYVAL,#6

RET

KV10:

DECA

JNZKV11

MOVKEYVAL,#3

RET

KV11:

DECA

JNZKV12

MOVKEYVAL,#11

RET

KV12:

DECA

JNZKV13

MOVKEYVAL,#12

RET

KV13:

DECA

JNZKV14

MOVKEYVAL,#13

RET

KV14:

DECA

JNZKV15

MOVKEYVAL,#14

RET

KV15:

DECA

JNZKV16

MOVKEYVAL,#15

RET

KV16:

MOVKEYVAL,#0FFH

RET

;--------------------

LEDTAB: DB0FCH ;"0" 00H

DB60H ;"1" 01H

DB0DAH ;"2" 02H

DB0F2H ;"3" 03H

DB66H ;"4" 04H

DB0B6H ;"5" 05H

DB0BEH ;"6" 06H

DB0E0H ;"7" 07H

DB0FEH ;"8" 08H

DB0F6H ;"9" 09H

DB0EEH ;"A" 0AH

DB3EH ;"B" 0BH

DB9CH ;"C" 0CH

DB7AH ;"D" 0DH

DB9EH ;"E" 0EH

DB8EH ;"F" 0FH

DB00H ;"" 10H

;--------------------

3. 單片機課程設計,急求!!!

#defineLCD1602_FLAG
#defineLCD1602_PORTP0
#include<reg51.h>
#include<stddef.h>
#defineucharunsignedchar

sbitlcd1602_rs=P2^0;
sbitlcd1602_e=P2^2;
sbitlcd1602_rw=P2^1;
sbitlcd1602_busy=P0^7;

ucharstr[]="ThisisKeyTest";
ucharkeyval,keystr[16];

voiddelay(uchara)
{
uchari;
while(a--)for(i=0;i<120;i++);
}

/*
************************************
*函數名稱:lcd1602_CheckBusy()
*函數功能:狀態查詢
************************************
*/

voidlcd1602_CheckBusy()
{
do
{
lcd1602_busy=1;
lcd1602_rs=0;
lcd1602_rw=1;
lcd1602_e=0;
lcd1602_e=1;
}
while(lcd1602_busy);
}

/*
***************************************
*函數名稱:lcd1602_WriteCmd()
*函數功能:寫命令
*入口參數:命令字
*出口參數:無
***************************************
*/

voidlcd1602_WriteCmd(constucharcmd)
{
lcd1602_CheckBusy();
lcd1602_rs=0;
lcd1602_rw=0;
lcd1602_e=1;
LCD1602_PORT=cmd;
lcd1602_e=0;
}

/*
*******************************************
*函數名稱:lcd1602_WriteData()
*函數功能:寫數據
*入口參數:c--待寫數據
*出口參數:無
*********************************************
*/

voidlcd1602_WriteData(constucharc)
{
lcd1602_CheckBusy();
lcd1602_rs=1;
lcd1602_rw=0;
lcd1602_e=1;
LCD1602_PORT=c;
lcd1602_e=0;
}

/*
***********************************************
*函數名稱:lcd1602_Init()
*函數功能:初始化LCD
*入口參數:無
*出口參數:無
***********************************************
*/

voidlcd1602_Init()
{
lcd1602_WriteCmd(0x38); //顯示模式為8位2行5*7點陣
lcd1602_WriteCmd(0x0c);//displayenable,flagenable,flashenable,
lcd1602_WriteCmd(0x06);//flagmovetoright,screendon'tmove
lcd1602_WriteCmd(0x01);//clearscreen
}

/*
************************************************
*函數名稱:lcd1602_Display()
*函數功能:字元顯示
*入口參數:ptr--字元或字元串指針
*出口參數:無
*說明:用戶可通過以下方式來調用:
*1)lcd1602_Display("Hello,world!");
*2)INT8U存儲類型txt[]="要顯示的字元串";
*或者INT8U存儲類型txt[]={'t','x','t',..,''};
*INT8U*ptr;
*ptr=&txt;
*lcd1602_Display(ptr);
*或lcd1602_Display(txt);
*或lcd1602_Display(&txt);
************************************************
*/

voidlcd1602_Display(constuchar*ptr,ucharline)
{
uchardatai=0;
uchar*dataq;

q=ptr;
switch(line)
{
case0:
lcd1602_WriteCmd(0x80);
while(q!=NULL&&(*q!='')&&i<16)
{
lcd1602_WriteData(*q);
q++;
i++;
}
break;
case1:
lcd1602_WriteCmd(0xc0);
while(q!=NULL&&(*q!='')&&i<16)
{
lcd1602_WriteData(*q);
q++;
i++;
}
break;
}
}

ucharkbscan(void)
{
unsignedcharsccode,recode;
P3=0x0f;//發0掃描,列線輸入
if((P3&0x0f)!=0x0f)//有鍵按下
{
delay(20);//延時去抖動
if((P3&0x0f)!=0x0f)
{
sccode=0xef;//逐行掃描初值
while((sccode&0x01)!=0)
{
P3=sccode;
if((P3&0x0f)!=0x0f)
{
recode=(P3&0x0f)|0xf0;
while((P3&0x0f)!=0x0f);//等待鍵抬起
return((~sccode)+(~recode));
}
else
sccode=(sccode<<1)|0x01;
}
}
}
return0;//無鍵按下,返回0
}
uchargetkey(void)
{
ucharkey;
key=kbscan();
if(key==0){keyval=0xff;return(0);}
switch(key)
{
case0x11:keyval=7;break;
case0x12:keyval=4;break;
case0x14:keyval=1;break;
case0x18:keyval=10;break;
case0x21:keyval=8;break;
case0x22:keyval=5;break;
case0x24:keyval=2;break;
case0x28:keyval=0;break;
case0x41:keyval=9;break;
case0x42:keyval=6;break;
case0x44:keyval=3;break;
case0x48:keyval=11;break;
case0x81:keyval=12;break;
case0x82:keyval=13;break;
case0x84:keyval=14;break;
case0x88:keyval=15;break;
default:keyval=0xff;break;
}
if(keyval!=0xff)return(1);
elsereturn(0);
}


main()
{
ucharnum;
lcd1602_Init();
lcd1602_Display(str,0);
while(1)
{
if(getkey())
{
if(keyval<10)keystr[num]=keyval+0x30;
elsekeystr[num]=keyval-10+'A';
lcd1602_Display(keystr,1);
num++;
num%=16;
}

}
}

4. 跪求...基於51單片機自動跟蹤陽光太陽能熱水器控制系統的設計

你還真是挺執著的,呵呵。如果簡單一點,可以通過時鍾來控制,不過這個有誤差,也需要頻繁調試。最好的是光線跟蹤和集熱管移動分開來實現。用體積較小的光敏電阻(放置在金屬管裡面,類似槍管),加萬向移動的馬達支架來尋找最佳的角度;角度確定後再啟動集熱管移動的馬達到此位置。移動頻率可以設置為一小時移動一次,如果只是在水平方向上移動的話還是有點意義的,否則跟蹤本身消耗的的能量太大,就得不償失了。

5. 單片機課程設計(數字時鍾) 麻煩大家不要發鏈接 直接幫我把程序寫過來。

哈哈有個1602顯示的不過程序太長貼不上給你個數碼管的吧不行再聯系

1302.c

#include<DS1302.h>

#include<key.h>

ucharbit_ser[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf};

ucharseven_seg[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};

/***********************時間顯示*****************/

voidtimer0_init(void) //T0初始化函數,用於時間的動態顯示

{

TMOD=0x21;

TL0=(65536-5000)%256;

TH0=(65536-5000)/256;

EA=1;

ET0=1;

TR0=1;

}

voidtimer0_isr(void)interrupt1 //T0中斷處理函數

{

charflag; //flag用於表示調整時閃爍的亮或滅

TR0=0;

TL0=(65536-5000)%256;

TH0=(65536-5000)/256;

TR0=1;

flag=x/100*0xff; //設置閃爍標志,如果x大於100則flag為0xff,小於100則為0x00

x++;

if(x>200)

x=0;

switch(i)

{

case0:

P2=bit_ser[0];

if(setflag==3) //根據setflag的值判斷當前位是否需要閃爍

P0=flag|seven_seg[dis_buffer[0]];

else

P0=seven_seg[dis_buffer[0]];

break;

case1:

P2=bit_ser[1];

if(setflag==3)

P0=flag|seven_seg[dis_buffer[1]];

else

P0=seven_seg[dis_buffer[1]];

break;

case2:

P2=bit_ser[2];

if(setflag==2)

P0=flag|seven_seg[dis_buffer[2]];

else

P0=seven_seg[dis_buffer[2]];

break;

case3:

P2=bit_ser[3];

if(setflag==2)

P0=flag|seven_seg[dis_buffer[3]];

else

P0=seven_seg[dis_buffer[3]];

break;

case4:

P2=bit_ser[4];

if(setflag==1)

P0=flag|seven_seg[dis_buffer[4]];

else

P0=seven_seg[dis_buffer[4]];

break;

case5:

P2=bit_ser[5];

if(setflag==1)

P0=flag|seven_seg[dis_buffer[5]];

else

P0=seven_seg[dis_buffer[5]];

break;

}

i++;

if(i>=6)

{

i=0;

if(j==10)

{

j=0;

if(setflag==0)

DS1302_GetTime(&Time); //如果setflag是0,就從1302中讀出時間,因為setflag不是0時,說明處於調整狀態,不需要讀時間

dis_buffer[5]=Time.Second%10; //把當前時間放入顯示緩沖區

dis_buffer[4]=Time.Second/10;

dis_buffer[3]=Time.Minute%10;

dis_buffer[2]=Time.Minute/10;

dis_buffer[1]=Time.Hour%10;

dis_buffer[0]=Time.Hour/10;

}

j++;

}

}

voidmain()

{

Initial_DS1302(Time);

timer0_init();

while(1)

{

set_down();

timer_down();

up_down();

down_down();

beepflag_down();

if(setflag==0&&Time.Hour==romhour&&Time.Minute==romminute&&Beepflag==1) //判斷蜂鳴器是否要響

Beep=!Beep;

}

}

//key.c

#include<reg51.h>

#defineucharunsignedchar

#defineuintunsignedint

uchari=0,j=0,x=0,setflag,flag_set,flag_timer;//setflag用來表示調整的位置,flag_set和flag_timer分別表示當前處於調整狀態還是定時狀態

SYSTEMTIMETime={0,20,15,3,30,6,10}; //系統時間的初始值2010年6月30日星期三,15時20分0秒

chardis_buffer[6]; //存放顯示數據的緩沖區

sbitBeep_flag=P3^2; //蜂鳴器的介面

sbitkey_timer=P3^4; //定時按鈕

sbitkey_set=P3^5; //調整按鈕

sbitkey_up=P3^6; //增加按鈕

sbitkey_down=P3^7; //減小按鈕

charromhour,romminute,romsec; //分別存放定時的時,分,秒

bitBeepflag; //標記鬧鍾是否開啟

//延時函數

voiddelays(ucharx)

{

while(x)x--;

}

//設置鍵的處理函數

voidset()

{

setflag++;

flag_set=1;

if(setflag>=4)

{

setflag=0;

flag_set=0;

Initial_DS1302(Time);

}

}

//定時間的處理函數

voidtimer()

{

setflag++;

flag_timer=1;

if(setflag==1)

{

Time.Hour=romhour;

Time.Minute=romminute;

Time.Second=romsec;

}

elseif(setflag>=4)

{

setflag=0;

flag_timer=0;

romhour=Time.Hour;

romminute=Time.Minute;

romsec=Time.Second;

}

}

//增加鍵的處理函數

voip()

{

switch(setflag)

{

case0:

break;

case1:

Time.Second++;

if(Time.Second>=60)

Time.Second=0;

break;

case2:

Time.Minute++;

if(Time.Minute>=60)

Time.Minute=0;

break;

case3:

Time.Hour++;

if(Time.Hour>=24)

Time.Hour=0;

break;

}

}

//減小鍵的處理函數

voiddown()

{

switch(setflag)

{

case0:

break;

case1:

Time.Second--;

if(Time.Second<0)

Time.Second=59;

break;

case2:

Time.Minute--;

if(Time.Minute<0)

Time.Minute=59;

break;

case3:

Time.Hour--;

if(Time.Hour<0)

Time.Hour=23;

break;

}

}

//設置鍵的掃描函數

voidset_down()

{

if(key_set==0&&flag_timer==0)

{

delays(100);

if(key_set==0)

{

set();

}

while(!key_set);

}

}

//定時鍵的掃描函數

voidtimer_down()

{

if(key_timer==0&&flag_set==0)

{

delays(100);

if(key_timer==0)

{

timer();

}

while(!key_timer);

}

}

//增加鍵的掃描函數

voip_down()

{

if(key_up==0&&setflag!=0)

{

delays(100);

if(key_up==0)

{

up();

while(!key_up);

}

}

}

//減少鍵的處理函數

voiddown_down()

{

if(key_down==0&&setflag!=0)

{

delays(100);

if(key_down==0)

{

down();

while(!key_down);

}

}

}

//定時開關的掃描處理函數

voidbeepflag_down()

{

if(Beep_flag==0)

{

delays(100);

{

Beepflag=!Beepflag;

while(!Beep_flag);

}

}

}

//ds1302.h

#ifndef_REAL_TIMER_DS1302

#define_REAL_TIMER_DS1302

#include<REG51.h>

sbitDS1302_CLK=P1^1;//實時時鍾時鍾線引腳

sbitDS1302_IO=P1^2;//實時時鍾數據線引腳

sbitDS1302_RST=P1^3;//實時時鍾復位線引腳

sbitACC0=ACC^0;

sbitACC7=ACC^7;

sbitBeep=P2^7;

typedefstruct__SYSTEMTIME__

{ charSecond;

charMinute;

charHour;

charWeek;

charDay;

charMonth;

charYear;

}SYSTEMTIME; //定義的時間類型

#defineAM(X) X

#definePM(X) (X+12) //轉成24小時制

#defineDS1302_SECOND 0x80//秒寄存器

#defineDS1302_MINUTE 0x82//分寄存器

#defineDS1302_HOUR 0x84

#defineDS1302_WEEK 0x8A

#defineDS1302_DAY 0x86

#defineDS1302_MONTH 0x88

#defineDS1302_YEAR 0x8C

#defineDS1302_RAM(X) (0xC0+(X)*2) //用於計算DS1302_RAM地址的宏

voidDS1302InputByte(unsignedchard) //實時時鍾寫入一位元組(內部函數)

{unsignedchari;

ACC=d;

for(i=8;i>0;i--)

{ DS1302_IO=ACC0; //相當於匯編中的RRC

DS1302_CLK=1;

DS1302_CLK=0;//發一個高跳變到低的脈沖

ACC=ACC>>1;

}

}

unsignedcharDS1302OutputByte(void) //實時時鍾讀取一位元組(內部函數)

{ unsignedchari;

for(i=8;i>0;i--)

{ ACC=ACC>>1; //相當於匯編中的RRC

ACC7=DS1302_IO;

DS1302_CLK=1;

DS1302_CLK=0;//發一個高跳變到低的脈沖

}

return(ACC);

}

voidWrite1302(unsignedcharucAddr,unsignedcharucDa)//ucAddr:DS1302地址,ucData:要寫的數據

{ DS1302_RST=0;

DS1302_CLK=0;

DS1302_RST=1;

DS1302InputByte(ucAddr); //地址,命令

DS1302InputByte(ucDa); //寫1Byte數據

DS1302_CLK=1;

DS1302_RST=0;//RST0->1->0,CLK0->1

}

unsignedcharRead1302(unsignedcharucAddr) //讀取DS1302某地址的數據

{ unsignedcharucData;

DS1302_RST=0;

DS1302_CLK=0;

DS1302_RST=1;//enable

DS1302InputByte(ucAddr|0x01);//地址,命令

ucData=DS1302OutputByte();//讀1Byte數據

DS1302_CLK=1;//RST0->1->0,CLK0->1

DS1302_RST=0;

return(ucData);

}

voidDS1302_SetProtect(bitflag)//是否防寫

{ if(flag)

Write1302(0x8E,0x80);//WP=1,不能寫入

else

Write1302(0x8E,0x00);//WP=0,可以寫入

}

voidDS1302_SetTime(unsignedcharAddress,unsignedcharValue)//設置時間函數

{ DS1302_SetProtect(0);

Write1302(Address,((Value/10)<<4|(Value%10)));//高4位為十位,低4位為個位

DS1302_SetProtect(1);

}

//獲取時間函數,從DS1302內讀取時間然後存入Time內

voidDS1302_GetTime(SYSTEMTIME*Time)

{ unsignedcharReadValue;

ReadValue=Read1302(DS1302_SECOND);

Time->Second=((ReadValue&0x70)>>4)*10+(ReadValue&0x0F);//轉換成10進制的秒

ReadValue=Read1302(DS1302_MINUTE);

Time->Minute=((ReadValue&0x70)>>4)*10+(ReadValue&0x0F);

ReadValue=Read1302(DS1302_HOUR);

Time->Hour=((ReadValue&0x70)>>4)*10+(ReadValue&0x0F);

ReadValue=Read1302(DS1302_DAY);

Time->Day=((ReadValue&0x70)>>4)*10+(ReadValue&0x0F);

ReadValue=Read1302(DS1302_WEEK);

Time->Week=((ReadValue&0x70)>>4)*10+(ReadValue&0x0F);

ReadValue=Read1302(DS1302_MONTH);

Time->Month=((ReadValue&0x70)>>4)*10+(ReadValue&0x0F);

ReadValue=Read1302(DS1302_YEAR);

Time->Year=((ReadValue&0x70)>>4)*10+(ReadValue&0x0F);

}

//利用STime初始化DS1302

voidInitial_DS1302(SYSTEMTIMESTime)

{ unsignedcharSecond=Read1302(DS1302_SECOND);

if(Second&0x80) DS1302_SetTime(DS1302_SECOND,0);//如果第七為1(表明沒有啟動),則啟動時鍾

DS1302_SetTime(DS1302_SECOND,STime.Second); //設定起始時間

DS1302_SetTime(DS1302_MINUTE,STime.Minute);

DS1302_SetTime(DS1302_HOUR,STime.Hour);

DS1302_SetTime(DS1302_DAY,STime.Day);

DS1302_SetTime(DS1302_MONTH,STime.Month);

DS1302_SetTime(DS1302_YEAR,STime.Year);

DS1302_SetTime(DS1302_WEEK,STime.Week);

}

#endif

6. 單片機課程設計

P1口接一個數碼管,一個按鍵可以接在P3.2作外部中斷。

7. 有人可以幫助我嗎我們要做一個單片機的課程設計——單片機溫度測量

0809是ADC0809把?那個應該是用來A/D轉換的把!
鍵盤介面是0809我倒沒聽說過。即是是有鍵盤擴展電路,一般都是跟I/O口的數量有關的!
你的顯示是用什麼顯示呢?LED點陣?LED數碼管?LCD液晶屏?
熱電偶最好是跟三個同阻值的電阻構成一個電橋,然後由恆流電路供電,從電橋中間出來引出電壓到兩個電壓跟隨器後接一個反向比例運放進行差動放大輸出。最後接入ADC0809進行AD轉換。(ADC0809的應用一般的單片機書本上都有介紹)。
如果是LED數碼管顯示,就用74LS247或74ls248來驅動!

8. 單片機課題設計

proteus我沒用過

不習慣用模擬!!呵呵

hz=500HZ就是你要的頻率你可以自己設

晶振我是按12M算的

我用硬體測試通過了~~

#include<reg52.h>

#defineucharunsignedchar

uchartemp=0,hz;

sbitbell=P1^0;

voidavf()

{

if(temp==2)

temp=0;

bell=0;

}

main()

{

hz=(1/500)/2;

TMOD=0x01;

ET0=1;

EA=1;

TL0=(65536-hz)/256;

TH0=(65536-hz)%256;

TR0=1;

while(1)

{

avf();

if(temp==1)

bell=1;}

}

voidTO()interrupt1

{

temp++;

TL0=(65536-hz)/256;

TH0=(65536-hz)%256;

}

如果需要匯編~~告訴我

我在寫給你

最小系統的原理圖我也畫給你了

晶元你自己選吧可以換的

其他問題就是概述了~你自己寫吧

不過那些都不重要呵呵

其實你只要把程序+硬體設計原理

拿給他就可以了~~

至於proteus你自己畫個吧~~

自己調吧~~

閱讀全文

與單片機角度檢測裝置課程設計相關的資料

熱點內容
電池包翻轉實驗裝置 瀏覽:727
什麼車儀表盤有擋位 瀏覽:332
化工設備儀表怎麼畫 瀏覽:880
三類手持式電動工具使用的場所 瀏覽:558
閥門開關Hss是什麼信號 瀏覽:965
氨壓縮機皮帶傳動裝置 瀏覽:81
哪裡做養殖設備的多 瀏覽:206
廣州廣一閥門廠 瀏覽:242
閥門as代表什麼意思 瀏覽:696
902軸承是什麼地方用的 瀏覽:179
維西特精密機械有限公司怎麼樣 瀏覽:695
手持電動工具的導線長度不得超過多少米 瀏覽:551
閥門上面帶細管是什麼閥門 瀏覽:928
a6怎麼改啟動儀表 瀏覽:6
汽車儀表盤靜電干擾怎麼辦 瀏覽:766
白色儀表盤燈什麼顏色 瀏覽:265
ed工具箱2進不了游戲 瀏覽:555
冰櫃沒製冷紅燈不亮什麼原因 瀏覽:4
蒸汽和空氣管道用什麼閥門 瀏覽:964
球磨機支撐裝置的作用 瀏覽:75