⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 yangliang12.c

📁 实现单片机定时器中断
💻 C
字号:
#include<reg52.h>
#include<intrins.h>
#include"stdio.h"//或者写成#include<stdio.h>
#define uint unsigned int
#define uchar unsigned char
#define size1 16
#define size2 6
sbit wela=P2^6;
sbit dula=P2^7;

int temp;//LED显示器中间变量
int numofinterrupt=0;//数码管中断次数变量
int num1;//数码管显示数字表数组元素下标
int num2;//数码管位选控制下标
int table[size1]={1,2,3,4,5,6,7,8,9,8,8,8,8,8,8,8,};//字符数组
int wetable[size2]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf};//位选信息数组
int count=0;//作为输出字符数组的计数器
int control=1;//主程序中问题处理的标志控制循环标志
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//进入主函数执行 
void main()
{	
	TMOD=0x01;//使用定时器中断来进行数码管持续时间2毫秒的显示
	TH0=(65536-50000)/256;
	TL0=(65536-50000)%256;
	EA=1;//使用定时器中断进行定时操作
	ET0=1;
	TR0=1;
///////////////////////////////////////////////////////////
	temp=0xfe;//led灯亮问题
	P0=temp;
///////////////////////////////////////////////////////////	
	num1=0;//在还没进入中断处理子程序时,就应该使得数码管显示字符数组的第0个元素,否则会使数码管刚开始显示的是乱码
	num2=0;//数码管位选在没进中断时就应该选中第一个数码管来进行显示

	wela=1;//位选所存信号
	P1=wetable[num2];//选中第一个数码管
	wela=0;

	dula=1;//段选中的第一个数码管显示字符数组中的第一个数字
	P1=table[num1];
	dula=0;
///////////////////////////////////////////////////////////
	while(control==1)
	{	
		for(count=0;count<=(size1-1);count++)
		{
			printf("%d",table[count]);
		}
		if(count==15)
		{count=0;}
			
	}

}//主函数执行完成
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//以下是定时器中断处理子程序
void time0() interrupt 1 using 1
{
	TH0=(65536-50000)/256;//这是重新载入预置数,取得高八位
	TH0=(65536-50000)%256;//取得预置数的低八位
	numofinterrupt++;
	if(numofinterrupt==40)	//应该是1秒钟就会变化一次的啊为什么实际程序变化这么慢呢???
	{
		numofinterrupt=0;//这句话千万不能忘记了,我忘了写,结果出了大错啊,切忌!!
		//以下2句是LED灯的显示发光程序
			temp=_crol_(temp,1);//显示下一个LED灯
			P0=temp;

	    	num2++;//来选取下一个数码管
		if(num2==6)//六个数码管用完时就应当在用第一个数码管来进行重复显示
		{
			num2=0;
		}
			wela=1;//位选所存信号
			P1=wetable[num2];//
			wela=0;
			
			num1++;//显示下一个字符数组中的字符
			if(num1==16)
			{num1=0;}
			dula=1;
			P1=table[num1];
			dula=0;
					
	}		
}//定时中断程序结束
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -