虽然看不到图但是这种问题实在不难,给你程序等于害你,给你点思路自己写才能帮助你:首先设定好定时器1,如果晶振是12MHz,TH1=(65536-50000)/256,TL1=(65536-50000)%6,TMOD=0x10,主要就这三步,配置好了定时器1。然后给P2一个初值0xf0,然后进入主程序死循环等待中断,中断函数重装初值后,i ,当i增到20说明1s时间到,i=0,P2=~P2。具体思路给你了。
希望我的回答能帮助到你。
#include<reg52h>
sbit P00=P0^0;
sbit key=P1^0;
unsigned int i=0;
void main(void)
{
TMOD=0x10;//设定定时器的工作模式为定时器1方式1
TH1=15536/256;//向定时器装入初值高八位
TL1=15536%256;//向定时器装入初值低八位
EA=1;//开总开关
ET1=1;//开分开关
TR1=1;//启动定时器
while(1)
{
if(key==0)TR1=0;
else TR1=1;
}
}
void t1(void) interrupt 3//定时器0服务函数
{
TH1=15536/256;//向定时器装入初值高八位
TL1=15536%256;//向定时器装入初值低八位
if(++i==30)//延时15S
{
i=0;
P00=~P00;//闪烁
}
}
#include <pich> //调用头文件,可以去PICC软件下去查找PIC16F87XA单片机的头文件
__CONFIG(XT&WDTEN&LVPDIS); //定义配置字,晶振类型:XT,启动开门狗,禁止低电压编程
#define HC138_A RE2 //定义U6、U7、U8的A为RE2端口
#define HC138_B RE1 //定义U6、U7、U8的B为RE1端口
#define HC138_C RE0 //定义U6、U7、U8的C为RE0端口
#define U6_E RA2 //定义U6_E为RA2端口,U6E=1时,U6使能否则失能
#define U7_E RA3 //定义U7_E为RA3端口,U7E=1时,U7使能否则失能
#define U8_E RA1 //定义U8_E为RA1端口,U8E=1时,U8使能否则失能
#define V1 RA5 //定义V1为RA5端口
unsigned int tmcon;
//---------------------------------------
//名称: 初始化函数
//日期:20101001
//-----------------------------------------
void init(void)
{
ADCON1=0X06; //所有IO均为数字口,模拟量输入禁止
OPTION=0x80; //关闭RB口电平变化功能
TRISA=0B11010001; //RA1,RA2,RA3,RA5置为输出,其他未用设置为输入
TRISB=0B11111111; //其他未用设置为输入
TRISC=0B11111111; //其他未用设置为输入
TRISD=0B11110011; //未用设置为输入
TRISE=0B11111000; //RE0,RE1,RE2置为输出,其他未用设置为输入
RD2=0; //关闭蜂鸣器
RD3=0; //关闭继电器
RA1=0; //关掉数码管、发光二极管
RA2=0; //关掉LED点阵屏左8列
RA3=0; //关掉LED点阵屏右8列
RBIE=0; //RB口电平变化中断禁止
}
//---------------------------------------
//名称: T0初始化函数
//日期:20100501
//-----------------------------------------
void timer0init(void)
{
T0CS=0; //TMR0工作于定时器方式
PSA=1; //TMR0不分频
T0IF=0; //清除TMR0中断标志
T0IE=1; //TMR0中断允许
TMR0=0x13; //赋初值,以便TMR0每250US中断一次
GIE=1;
}
//---------------------------------------
//名称: T0中断函数(250US)
//日期:20101001
//-----------------------------------------
void interrupt ISR(void)
{
if(TMR0IF==1) //250us
{
TMR0=0x13;
T0IF=0;
if(++tmcon>3999) //计数4000次后,为1秒
{
tmcon=0;
V1=!V1;
}
}
}
//---------------------------------------
//名称: 主函数
//日期:20101001
//-----------------------------------------
void main(void)
{
init();
timer0init();
V1=0; //熄灭V1
HC138_A=0; //使74HC138的Y0端为0,其他高阻
HC138_B=0; //使74HC138的Y0端为0,其他高阻
HC138_C=0; //使74HC138的Y0端为0,其他高阻
U6_E=0; //U6关闭
U7_E=0; //U7关闭
U8_E=1; //U8打开
while(1)
{
asm("CLRWDT");
}
}//tusongbai@163com
/
文件名 : 定时器的使用c
描述 : 相对前面的软件延时,定时器的延时更为精确。
定时时间可用光盘中的“51定时器计算exe”计算。该软件
位于单片机开发辅助工具文件夹中。
相应的视频为“定时器的使用exe”。
创建人 : 东流,2009年4月8日
版本号 : 20
/
#include<reg52h>
#define uchar unsigned char
#define uint unsigned int
uchar Count = 0;
uchar code table[10] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
uchar code LED_W[8] = {0,4,2,6,1,5,3,7};
/
名称 : Time0_Init()
功能 : 定时器的初始化,110592MZ晶振,50ms
输入 : 无
输出 : 无
/
void Time0_Init()
{
TMOD = 0x01;
IE = 0x82;
TH0 = 0x4c;
TL0 = 0x00;
TR0 = 1;
}
/
名称 : Time0_Int()
功能 : 定时器中断,中断中实现 Count 加一
输入 : 无
输出 : 无
/
void Time0_Int() interrupt 1
{
TH0 = 0x4c;
TL0 = 0x00;
Count++; //长度加1
}
/
名称 : Main()
功能 : 主函数
输入 : 无
输出 : 无
/
void main()
{
uchar i = 0;
Time0_Init();
while(1)
{
P0 = table[i % 10]; //取 i 的个位
P2 = LED_W[0];
while(1)
{
if(Count == 20) //当Count为 20 时,i 自加一次,20 50MS = 1S
{
Count = 0;
i++;
break;
}
}
}
}
以上就是关于定时器中断实验51单片机,P2口外接8个发光二极管,4个共阳极接法,4个共阴极接法,如图所示.要求分别用C语言全部的内容,包括:定时器中断实验51单片机,P2口外接8个发光二极管,4个共阳极接法,4个共阴极接法,如图所示.要求分别用C语言、单片机C语言定时中断LED灯程序求修改、单片机定时器中断等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)