定时器中断实验51单片机,P2口外接8个发光二极管,4个共阳极接法,4个共阴极接法,如图所示.要求分别用C语言

定时器中断实验51单片机,P2口外接8个发光二极管,4个共阳极接法,4个共阴极接法,如图所示.要求分别用C语言,第1张

虽然看不到图但是这种问题实在不难,给你程序等于害你,给你点思路自己写才能帮助你:首先设定好定时器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灯程序求修改、单片机定时器中断等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/9455433.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-28
下一篇 2023-04-28

发表评论

登录后才能评论

评论列表(0条)

保存