㈠ 求幫寫一個c52單片機程序
1、用定時器中斷,實現延遲
2、邏輯編程實現循環燈
㈡ 用52單片機C語言編寫程序,實現00~59計時。要求用T0,工作方式1。
#include <reg52.h>
#define uint unsigned int
#define uchar unsigned char
sbit la=P2^6; //段選
sbit wela=P2^7; //位選
uchar shi,ge,num1,num2; //變數
uchar code table[]={0x3f,0x06,0x5b,0x4f, //共陰極字型碼
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71};
void delay(uint x) //延時子程序
{
uint i,j;
for(i=0;i<x;i++)
for(j=0;j<120;j++);
}
void init()
{
TMOD=0x01; //設置定時器0的工作方式
TH0=(65536-50000)/256; //裝初值
TL0=(65536-50000)%256;
EA=1; //開總中斷
ET0=1; //開定時器0中斷
TR0=1; //啟動定時器0
}
void display() //顯示子程序
{
la=1;
P0=table[ge]; //送段選數據
la=0;
P0=0xff; //送位選數據前關閉所有顯示
wela=1;
P0=0xfe; //送位選數據
wela=0;
delay(5); //延時
la=1;
P0=table[shi];
la=0;
P0=0xff;
wela=1;
P0=0xfd;
wela=0;
delay(5);
}
void main()
{
init();
while(1)
{
display();
}
}
void timer() interrupt 1
{
TH0=(65536-50000)/256; //重裝初值
TL0=(65536-50000)%256;
num1++;
if(num1==20) //到了20次,1秒時間到
{
num1=0; //清0重新計數
num2++;
if(num2==60)
num2=0;
P1=0x00;
delay(500);
P1=0xff;
shi=num2/10; //把一個2位數分離後分別送數碼管顯示
ge=num2%10; //十位和個位
}
}
試了的,可以放心,採納吧!
㈢ 52單片機用C語言編程 要求:用中斷間隔讓八個小燈以一秒間隔閃爍五次,然後全亮2秒,循環。
#include<reg51.h>
#defineucharunsignedchar
#defineuintunsignedint
voiddelay(uinta)
{
uchari;
while(a--)for(i=0;i<120;i++);
}
main()
{
uinti;
while(1)
{
for(i=0;i<5;i++)
{
P0=0x00;
delay(1000);
P0=0xff;
dela(1000);
}
P0=0x00;
delay(2000);
}
}
㈣ 用C語言編寫C52單片機的流水燈程序
附上流水燈程序
#include<reg52.h>
#include<intrins.h>
unsigned char temp;
void delay(unsigned int x);
void main()
{
temp=0xfe; /*16進制的表示法,不能用:0eH這種形式了*/
while(1)
{
P1=temp;
delay(1000);
temp=_crol_(temp,1);
}
}
void delay(unsigned int x)
{
unsigned char j;
while(x--)
{
for(j=200;j>0;j--)
{
;
}
}
}
㈤ 89tc52單片機用匯編語言編寫一個程序,程序在補充裡面
K1EQUP2.0
K2EQUP2.1
K3EQUP2.2
ORG0000H
JMPBEGIN
ORG0030H
BEGIN:
MOVDPTR,#TABLE
MOVA,#0
MOVCA,@A+DPTR
MOVP1,A
LOOP:
JBK1,LOOP1
JNBK1,$
MOVA,#1
SJMPLOOP3
LOOP1:
JBK2,LOOP2
JNBK2,$
MOVA,#2
SJMPLOOP3
LOOP2:
JBK3,LOOP
JNBK3,$
MOVA,#3
LOOP3:
MOVCA,@A+DPTR
MOVP1,A
SJMPLOOP
TABLE:;共陰極數碼管顯示代碼表
DB3FH,06H,5BH,4FH,66H;01234
DB6DH,7DH,07H,7FH,6fh;56789
END
㈥ C52單片機匯編語言
你又不是用C寫的,不用定義啊
如果你要想編程方便的話,可以用偽指令定義一些全局變數,以方便修改程序
㈦ 單片機c52 用c語言編寫的 要實現ad轉換程序
#include <reg52.h>
#include <intrins.h>
#define uchar unsigned char
#define uint unsigned int
sbit CS=P3^0;
sbit CLK=P3^1; //時鍾
sbit DIO=P3^2; //ADC0832輸出引腳
sbit din=P0^7;
uchar code tab1[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0x88,0x83,0xA7,0xA1,0x86,0x8E}; //共陽數碼表
uchar code tab[4]={0xfe,0xfd,0xfb,0xf7}; //數碼管位選表
void delay(uint k)
{
uint i,j;
for(i=0;i<k;i++)
for(j=0;j<121;j++);
}
uint A_D() // A/D轉換函數
{
unsigned char i,dat;
CS=0; //片選
CLK=0; //為第1個脈沖作準備
CLK=1; //第1個脈沖
DIO=1; // DI置1,規定的起始信號
_nop_();_nop_();
CLK=0; //第1個脈沖的下降沿
CLK=1; //第2個脈沖
DIO=1; // DI置1, 通道選擇信號:1
_nop_();_nop_();
CLK=0; //第2個脈沖下降沿
CLK=0; //第3個脈沖
DIO=1; // DI置0,通道選擇信號:0, 選通道0
_nop_();_nop_();
// CLK=0; //第3個脈沖下降沿,轉換開始
// _nop_();_nop_();//第3個脈沖後,
// CLK=1;
for(i=0;i<8;i++) //高位在前
{
CLK=1; //第4個脈沖
if(DIO)
dat=(dat<<1)|0x80;//從高位至低位讀取 "|"的優先順序高於">>"
else
dat=(dat<<1)|0x00;
CLK=0;
}
for(i=0;i<8;i++) //高位在前
{
CLK=1; //第4個脈沖
if(DIO)
dat=(dat>>1)|0x80;//從高位至低位讀取 "|"的優先順序高於">>"
else
dat=(dat>>1)|0x00;
CLK=0;
}
CS=1;
CLK=1;
return dat;
}
void display(uint k)
{
P2=tab[1];
P0=tab1[k/100];
din=0;
delay(3);
P2=0xff;
P2=tab[2];
P0=tab1[k/10%10];
delay(3);
P2=0xff;
P2=tab[3];
P0=tab1[k%10];
delay(3);
P2=0xff;
}
void main(void) //主函數
{
uint temp;
while(1)
{
temp=A_D()*5.0/256*100; // 根據轉換結果求出電壓值
display(temp);
}
}
ADC0832程序 板子做出來 能用
㈧ 求C52單片機程序,P1^3跳高電平,且P1^4跳低電平時,P2^3輸出為高電平,其它情況輸出全為低電平,求完整編程
C語言編程如下:
#include<reg52.h>
sbit V1=P1^3;
sbit V2=P1^4;
sbit V3=P2^3;
void main()
{
V3=0; //初始化V3為低電平
while(1)
{
if(V1==1&&V2==0)
V3=1;
else
V3=0;
}
}
㈨ 52單片機c語言程序怎麼寫交通燈控制外部中斷延時10秒,黃燈閃爍5次
摘要 第一個狀態:主幹道、支幹道均亮紅燈5S *
㈩ c52單片機c語言編程新手,下面是我編寫的程序,為什麼不會一直循環
猜想:你可能想通過P1口看程序運行的現象,但是失敗了。
分析:程序是一直在循環,但是由於程序問題,輸出看不到變化。
原理:P1口讀入、修改、重寫是有風險的,因為讀入的值不是寄存器的值,而是埠的值。
而這個值是不定的。
解決:盡可能不要採取埠讀入、修改、重寫,而採用埠緩沖方法。即准備變數p1val,
讀入、修改p1val,再往埠寫入p1val
示例:
void main ()
{
unsigned char i, p1val;
while(1)
{
p1val=0xfe;
for (i=0; i<8; ++i)
{
delay (50000);
P1=p1val;
p1val <<= 1;
p1val |= 1;
}
}
}