求51单片机的c语言,利用定时器1控制LED灯每隔100ms亮一个,并且数码管上的数每隔200ms加1,加到100清零

利用定时器1控制LED灯每隔100ms亮一个,并且数码管上的数每隔200ms加1,加到100清零

#include<reg51.h>
#include<intrins.h>
#define uchar unsigned char;
uchar distab[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0x00};  //0到f
uchar number,dat,time;
void t0isr() interrupt 1
{
TH0=(65536-5000)/256;
TL0=(65536-5000)%256;
number++;
if(number>1)number=0;
switch(number)
{
case 0:P2=0x02;P0=distab[dat/10];
break;
case 1:P2=0x01;P0=distab[dat%10];
break;
default:break;
}
}
void t1isr() interrupt 3
{
TH1=(65536-50000)/256;
TL1=(65536-50000)%256;
time++;
if(time%2)P1=_crol_(P1,1);
if(time%4)dat++;
dat%=100;
}
main()
{
TMOD=0x11;
TH0=(65536-5000)/256;
TL0=(65536-5000)%256;
TH1=(65536-50000)/256;
TL1=(65536-50000)%256;
time=0;
dat=0;
TR1=1;
ET1=1;
TR0=1;
ET0=1;
EA=1;
P1=0xfe;
while(1);
}来自:求助得到的回答
温馨提示:内容为网友见解,仅供参考
第1个回答  2017-11-10
定义一个引脚,用一个while,分别赋值0.1,中间用delay()

用51单片机实现每隔一秒数码管显示刷新一次,用定时器0实现定时功能。但...
ET0=1;\/\/加一行,开定时器T0中断 TMOD=0x01;\/\/定时器0方式1 TH0=(65535-50000)\/256;\/\/定时50ms TL0=(65535-50000)%256;num=0;temp=0;TR0=1;\/\/开定时器0 P0=LED7Code[num]; \/\/不能是num++ } void main(){ system_init();\/\/参数初始化 while(1){ if(temp==20) \/\/定时1s,...

求一个51单片机定时闹钟程序。要C语言。能够调时间
include <AT89X51.H> \/*包含器件配置文件*\/ define uchar unsigned char define uint unsigned int char DATA_7SEG[10]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,};\/*0~9的数码管段码*\/ uchar hour=0,min=0,sec=0; \/*时、分、秒单元清零*\/ uchar deda=0; ...

定时器延时问题(51单片机,c语言)
sbit LED1=P2^3; \/\/数码管个分位 uchar ms20,s1;\/\/20毫秒和1s变量定义(声明)\/\/定时器T0初始化,10ms秒初值 void InitTimer0(void){ TMOD=0x01;TH0=0x0D8;TL0=0x0F0;EA=1;ET0=1;TR0=1;} void Display(uchar dat4,uchar dat3,uchar dat2,uchar dat1){ static uchar k;P2...

51单片机怎么同时控制LED亮灭时间和数码管显示
LED 亮;延时5秒;LED 灭;延时10秒;数码管 +1;循环以上内容;这节课 的重点是 定时器,而不是 用延时 函数。

急求一个用51单片机编的可按键调时的数字时钟程序,数码管显示,C语言...
void timer0() interrupt 1 {TH0=0xD8;TL0=0xF0;sec100++;if(sec100 >= 100)\/\/1秒时间 (100*10ms=1000ms=1s){sec100 = 0; pro_timedate();\/\/调用时间和日期处理程序}if (sec&0x01)\/\/"RICHMCU"闪一秒,停一秒update_disbuf(0x00," ",hour,min,sec); \/\/0x00表示显示00位置的自定义字符els...

51单片机中开发板上的单个东西比如led,数码管,矩阵键盘灯操作起来都是...
难度低的就是自己在大循环里做几个小循环。每个小循环的执行时间不同。执行所需时间不同等等。。比如。按键扫描,至少没100MS扫描一次,数码管动态扫描的话要10毫秒扫描一次。LED100MS扫描一次。那就做10毫秒执行一次的循环一个,100ms执行一次的循环一个。把需要时间不同的任务放到不同的位置。。大概...

51单片机C语言程序4个独立按键实现对数码管数字显示的加减清零等
include <reg52.h>\/\/P0是数码管。P1是LED.P2是按键sbit KEY_OUT_1 = P2^3;sbit KEY_OUT_2 = P2^2; sbit KEY_OUT_3 = P2^1;sbit KEY_OUT_4 = P2^0;#define uchar unsigned char#define ulint unsigned long#define Frequency 10\/\/定时器中断时间 = f*T#define Time 1\/\/一个周期...

51单片机的共阴数码管怎么显示数字(c语言)
要让51单片机共阴数码管显示数字,只需要将单片机的P2端口输出数字对应的段码即可。以显示数字“0”为例,c语言程序如下:include<reg52.h> define uchar unsigned char define uint unsigned int \/\/数码管的段码编码 Uchar table[10] ={0x3f,0x06,...

51单片机按键控制数码管?
PCON = 0x80; \/\/ 数据位8、停止位1。效验位无 (11.0592M)TH1 = 0xF4; \/\/TH1: reload value for 2400@11.0592MHz TR1 = 1; \/\/启动定时器1 ES = 1; \/\/允许串口中断位 EA = 1; \/\/允许总中断位 c=0;s=1;k=0;P1 =~table[k];while(1){ if(k0==0 && y0...

用C语言编写8051单片机程序
void timer0() interrupt 1 { TH0=0xf8;\/\/重新赋值定时2ms TL0=0x30;if(flag==0)\/\/定义用于判断计数是否到了250,若到了则不再计数,转向else执行流水灯闪烁任务 { t++;if(t==500){ t=0;one++;P2=200+ten*10+one; \/\/在P2口的流水等,也是从200开始计数。if(one==10){ one=0;...

相似回答