㈠ 求帮写一个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;
}
}
}