㈠ 用单片机c51,c语言编0-9计数器程序!谢谢!!!
你的硬件电路有问题啊,单片机31号脚要接高电平
还有,你的数码管接法也不对啊
看你的排阻接法,你的数码管要用共阴极的
当加到9之后,再按一下,是不是又恢复到0啦???
下面是更改的回答
#include<reg51.h>
unsignedchara;
unsignedcharcodetable[]={
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x67};
voidinit(void)
{
EA=1;
EX0=1;
IT0=1;
}
voidmain(void)
{
init();
while(1)
{
P0=table[a];
}
}
voidEX_0(void)interrupt0
{
a++;
if(a>9)
a=0;
}
望采纳
㈡ 用C语言如何开51单片机的计数器,最好编个实例程序
#include <reg51.h>
#define uchar unsigend uchar
#define uint unsigned int
unsigned char code LED7Code[] = {~0x3F,~0x06,~0x5B,~0x4F,~0x66,~0x6D,~0x7D,~0x07,~0x7F,~0x6F,~0x77,~0x7C,~0x39,~0x5E,~0x79,~0x71};//数码管段码
void main()
{
uint k;
TMOD=0X50;//设置模式为1,计数模式
TH1=0X00;
TL1=0X00;//初始值设定
IE=0X00;//关全局中断
TR1=1;//开定时计数器1运行
while(1)
{
if(TL1==16)//进行判断,为16时,计数值归零
TL1=0X00;
k=TL1;
P0=LED7Code[k];//数码管进行显示
}
}
此程序目的见http://..com/question/350774230.html
㈢ 单片机60秒计时报警器 求c程序 用AT89C51单片机的定时/计数器T0产生一秒的定时时间,作为秒计数时间,
#include <reg51.H>
sbit P3_5 =P3^5;
void delay()
{
unsigned char i,j;
for(j=20;j>0;j--)
for( i= 250;i>0;i--);
}
unsigned char code dispcode[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,
0x80,0x90,0x88,0x83,0xC6,0xA1,0x86,0x8E,0x00};
unsigned char second;
unsigned char keycnt;
unsigned int tcnt;
void main(void)
{
unsigned char i,j;
TMOD=0x02;
ET0=1;
EA=1;
second=0;
P0=dispcode[second/10];
P2=dispcode[second%10];
TR0=1;
while(1)
{
if( second ==60)
{
TR0=0;
P1=0x5F;
delay();
P1=0xFF;
delay();
}
}
}
void t0(void) interrupt 1 using 0
{
tcnt++;
if(tcnt==4000)
{
tcnt=0;
second++;
P0=dispcode[second/10];
P2=dispcode[second%10];
}
}
㈣ C51单片机程序
TH0=0xf6;
TL0=0xff;
上两行是定时器/计数器T0的初值,因为T0是16位的,所以用TH0表示高八位,TL0表示低八位
TH1=0xfd;
TL1=0xfd;
T1初值
TMOD=0x21;
定时器/计数器模式控制寄存器如图
GATE=1时,由外部中断引脚INT0、INT1来启动定时器T0、T1
GATE=0时,仅由TR0,TR1置位分别启动定时器T0、T1。
C/T=0时为定时功能,C/T=1时为计数功能
M0、M1——方式选择功能
M1M0工作方式计数器模式TMOD(设置定时器模式)
00方式013位计数器TMOD=0x00
01方式116位计数器TMOD=0x01
10方式2自动重装8位计数器TMOD=0x02
11方式3T0分为2个8位独立计数器,T1为无中断重装8位计数器TMOD=0x03
PCON=0x00;
PCON主要是为CHMOS型单片机的电源控制而设置的专用寄存器
WDCON=0x00;清狗
SCON=0x50;
SCON1=0x40;
串口控制寄存器
㈤ 51单片机按键计数器C语言编程
#include<reg51.h>
#defineucharunsignedchar;
uchardistab[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0x00};//0到f
ucharnumber,dat,dis[4];
voidt0isr()interrupt1
{
TH0=(65536-5000)/256;
TL0=(65536-5000)%256;
number++;
number%=3;
switch(number)
P1=0x20<<number;
P0=distab[dis[number]];
}
voidint0isr()interrupt0
{
dat++;
dat%=1000;
dis[0]=dat%10;
dis[1]=dat%100/10;
dis[2]=dat/100;
}
main()
{
TMOD=0x01;
TH0=(65536-5000)/256;
TL0=(65536-5000)%256;
TR1=1;
ET1=1;
EX0=1;
IT0=1;
EA=1;
while(1);
}