80c51單片機c編程
A. 80C51單片機編程
//用定時器T0的中斷控制P0口8位LED循環閃爍
#include<reg51.h> // 包含51單片機寄存器定義的頭文件
#include <intrins.h>
unsigned int i;
/**************************************************************
函數功能:主函數
**************************************************************/
void main(void)
{
i=0;
EA=1; //開總中斷
ET0=1; //定時器T0中斷允許
TMOD=0x01; //使用定時器T0的模式1
TH0=(65536-50000)/256; //定時器T0的定時100ms高位初值
TL0=(65536-50000)%256; //定時器T0的低位初值
TR0=1; //啟動定時器T0
unsigned char LED;
LED = 0xfe;
P0 = LED;
while(1);//無限循環等待中斷
}
/**************************************************************
函數功能:定時器T0的中斷服務程序
**************************************************************/
void Time0(void) interrupt 1 using 0 //「interrupt」聲明函數為中斷服務函數
//其後的1為定時器T0的中斷編號;0表示使用第0組工作寄存器
{
i=i+1;
if(i==10){
i=0;
LED = _crol_(LED,1); //循環左移1位,點亮下一個LED
P0 = LED;
}
TH0=(65536-50000)/256; //定時器T0的高8位重新賦初值
TL0=(65536-50000)%256; //定時器T0的高8位重新賦初值
}
B. 求80C51單片機的程序
請參考如下程序:
#include<absacc.h>
#include<reg52.h>
#include<intrins.h>
#define uint unsigned int
#define uchar unsigned char
#define led RD
#define key_rec T1
sbit BUZZER=P3^7;//發聲音口
uchar code T0_H[16]=;
uchar code T0_L[16]=;
uchar code music[32]=;
uchar code music_L[32]=;
uchar a,b;
uint second,minute;
long t0count;
void delay_music(uint v)
{
while(v!=0) v--;
}
void delay_music1(uint j)
{
while(j!=0)
}
void delay_music2(uint j)
{
while(j!=0)
}
main()
{//uint i;
uchar k,n,m;
delay_music(100);
TMOD=0x11;
TH0=0xfc;
TL0=0x66;
t0count=0;
EA=1;
ET0=0;
TR0=0;
ET1=0;
TR1=0;
while(1)
{
ET1=1;
TR1=1;
for(k=0;k<32;k++)
{
n=music[k];
m=music_L[k];
a=T0_H[n];
b=T0_L[n];
delay_music2(m);
}
}
}
time0() interrupt 1 using 1
{
TH0=0xFC;
TL0=0x66;
t0count=t0count+1;
if (t0count==1000)
{
second++;
if (second==60)
{
minute++;
if (minute==60) minute=0;
second=0;}
t0count=0;
}
}
time1 () interrupt 3 using 3
{
TH1=a;
TL1=b;
BUZZER=!BUZZER;
}
早說嘛!!
改一下不就行了嘛
下面是匯編寫的
ORG 0000H
JMP MAIN
ORG 000BH
JMP INTT0
ORG 0100H
MAIN: MOV SP,#60H
MOV TMOD,#01H
SETB ET0
SETB EA
SETB TR0
START0: SETB INT0
MOV 30H,#00H
NEXT: MOV A,30H
MOV DPTR,#TABLE
MOVC A,@A+DPTR
MOV R2,A
JZ ENDD
ANL A,#0FH
MOV R5,A
MOV A,R2
SWAP A
ANL A,#0FH
JNZ SING
CLR TR0
JMP D1
SING: DEC A
MOV 22H,A
RL A
MOV DPTR,#TABLE1
MOVC A,@A+DPTR
MOV TH0,A
MOV 21H,A
MOV A,22H
RL A
INC A
MOVC A,@A+DPTR
MOV TL0,A
MOV 20H,A
SETB TR0
D1: CALL DELAY
INC 30H
JMP NEXT
ENDD: CLR TR0
JMP START0
INTT0:
PUSH PSW
PUSH ACC
MOV TL0,20H
MOV TH0,21H
CPL INT0
POP ACC
POP PSW
RETI
DELAY: MOV R7,#02
DELAY0: MOV R4,#187
DELAY1: MOV R3,#248
DJNZ R3,$
DJNZ R4,DELAY1
DJNZ R7,DELAY0
DJNZ R5,DELAY
RET
TABLE: DB 82H,01H,81H,94H,84H,0B4H,0A4H,04H
DB 82H,01H,81H,94H,84H,0C4H,0B4H,04H
DB 82H,01H,81H,0F4H,0D4H,0B4H,0A4H,94H
DB 0E2H,01H,0E1H,0D4H,0B4H,0C4H,0B4H,04H
DB 82H,01H,81H,94H,84H,0B4H,0A4H,04H
DB 82H,01H,81H,94H,84H,0C4H,0B4H,04H
DB 82H,01H,81H,0F4H,0D4H,0B4H,0A4H,94H
DB 0E2H,01H,0E1H,0D4H,0B4H,0C4H,0B4H,04H
TABLE1: DW 64260,64400,64524,64580,64684,64777,64820,64898
DW 64968,65030,65058,65110,65157,65178,65217
END
C. 80C51單片機數碼管的顯示 C語言
用10個8段數碼管動態掃描顯示的:
#include
unsigned
char
const
dofly[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};//
顯示段碼值0123456789
unsigned
char
code
seg[]={0,1,2,3,4,5,6,7,8,9};//分別對應相應的數碼管點亮,即位碼
/*------------------------------------------------
延時子程序
------------------------------------------------*/
void
delay(unsigned
int
cnt)
{
while(--cnt);
}
/*------------------------------------------------
主函數
------------------------------------------------*/
main()
{
unsigned
char
i;
while(1)
{
P0=dofly[i];//取顯示數據,段碼
P2=seg[i];
//取位碼
delay(20000);
//掃描間隙延時,時間太長會閃爍,太短會造成重影,自己調試
i++;
if(10==i)
//檢測10位掃描完全?
i=0;
}
}
D. 求助80c51單片機 簡易計算器的程序 用C語言編寫
你既然用模擬,那proteus
就有一個計算器的模擬實例,有程序有模擬圖。在這個文件夾下,我這是win7系統。
C:Program
Files
(x86)Labcenter
ElectronicsProteus
7
ProfessionalSAMPLESVSM
for
8051C51
Calculator
它用的是液晶屏,你把液晶屏刪掉,改成你自己的LED顯示程序就行了。模擬圖如下。它的鍵盤很漂亮,是可以用的。
E. 80C51單片機語言編程
第一個
MOV R0, #030H
MOV R1, #020H ;50H - 30H = 20H
LOOP: MOV A, R0
SUBB A, 0AAH
JZ FINISH
DEC R1
MOV A, R1
JZ DONE
SJMP LOOP
FINISH: MOV 0x51H, #001H
DONE: SJMP $
第二個
MOV R0, #020H
MOV R1, #020H ;40H - 20H = 20H
MOV R2, #000H
LOOP: MOV A, R0
JZ FINISH
LOOP1: DEC R1
JZ DONE
SJMP LOOP
FINISH: INC R2
SJMP LOOP1
DONE: MOV 041H, R2
SJMP $
F. 單片機80C51程序設計,請大神幫忙!
#include"REG52.h"
#define TRUE 1
#define FALSE 0
#define uchar unsigned char
#define uint unsigned int
#define th0 0x3c
#define tl0 0xb0 //50ms at 12MHz Fosc
#define LED P0
sbit K1=P1^0;
uchar LED_Status=0;
bit KeyValidFlag;
void Timer0()interrupt 1
{
TL0=tl0;
TH0=th0;
TR0=0;
KeyValidFlag=TRUE;
}
void TimerInit()
{
TMOD=0x01;
TH0=th0;
TL0=tl0;
EA=1;
ET0=1;
}
void KeyResp()
{
if(K1==0)
{
TR0=1;
KeyDownFlag=TRUE;
}
else
{
TR0=0;
TH0=th0;
TL0=tl0;
KeyDownFlag=FALSE;
}
if(KeyValidFlag && !KeyDownFlag)
{
LED_Status=++LED_Status%8;
KeyValidFlag =FALSE;
}
}
void main()
{
TimerInit();
while(1)
{
KeyResp();
LED=1<<LED_Status;
}//end while
}
直接打字的,未編譯,有什麼小問題的話,可以試試改正,不會再追問。
G. 80c51單片機很簡單的一個編程
/************************************
function:
10hz方波,至於電壓
單靠軟體是不能夠實現的
************************************/
#include
「reg51.h」
sbit
pwm=p3^7;
void
main()
{
tmod=0x02;
th0=6;
tl0=6;
ea=1;
et0=1;
tr0=1;
while(1);
}
void
timer0
()
interrupt
1
{
unsigned
int
count;
count++;
if(count==200)
//200*250us=50ms
pwm=0;
if(count==400)
{
count=0;
pwm=1;
}
}
H. 80C51單片機簡單C語言編程
只要將一個埠信號取反就行了,大概這樣P0.0=~P0.0;Delay(10);一直循環。延時時間自己控制好。
關鍵是單片機是TTL電平輸出0或5v。
I. 單片機80C51編程
第一題只要將ADD/ADDC改為SUBB就可以了
第二題程序如下:
ORG 0000H
AJMP MAIN
ORG 0020H
MAIN:
MOV DPTR ,1000H ;起始地址
MOV R0,#0FFH ;數量
CLR A ;A清零
LOOP:
MOVX @DPTR,A ;傳送數據到指定的地址
INC DPTR ;下一個地址
DJNZ R0,LOOP ;沒有結束則繼續
SJMP $