/*
定时器0控制LED的闪烁时间;计数器1来控制数码管的显示
*/
#include #define uint unsigned int #define uchar unsigned char sbit DULA = P2^6; sbit WELA = P2^7; sbit LED1 = P1^0; void display(uint i); void delay(uint z); uchar code arry[] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; void delay(uint z) { uint a,b; for(a = z;a > 0;a--){ for(b = 114;b > 0;b--); } } void display(uint i) { uint one,two;//这里是两位,如果用三位数码管就设置一个百位,那么百位就是i/100;十位就是i%100/10;个位就是i%10 one = i / 10; two = i % 10; P0 = 0xff; WELA = 1; //打开位选 P0 = 0xfe; WELA = 0; DULA = 1;//打开段选 P0 = arry[one]; DULA = 0; delay(5); P0 = 0xff; WELA = 1; //打开位选 P0 = 0xfd; WELA = 0; DULA = 1;//打开段选 P0 = arry[two]; DULA = 0; delay(5); } void main(void) { uchar a; TR0 = 1;//打开定时器0 TR1 = 1;//打开定时器1 TMOD = 0x61;//设置T1为计数器,工作方式为2;T0为定时器,工作方式为1 TH0 = 0x4b; TL0 = 0xfc; TH1 = 0; //这是一个8位自动重装的寄存器 TL1 = 0; //当TL1记满,重新装入TH1的值 while(1){ if(TF0 == 1){ TH0 = 0x4b;//重新装入初值 TL0 = 0xfc; TF0 = 0; a++; } if(a == 20){ LED1 = ~LED1; //初始点亮LED,每次取反就是变换状态 a = 0; } display(TL1);//用杜邦线将P10口和外部引脚P35(T1)口连接; //计数器是根据外部每来一个脉冲,计数器就会+1 //所以当LED1的状态变化一次,便会产生不同的电平信号, //由杜邦线可以让T1口感知到,计数器就会+1了 } }
上一篇:用定时器T0的中断控制8位LED闪烁
下一篇:编程控制8位LED循环点亮
推荐阅读最新更新时间:2024-11-03 20:05
设计资源 培训 开发板 精华推荐
- LT3973EDD 1.21V 降压转换器的典型应用
- CL520 线性开关 LED 驱动器的典型应用
- U盘版BADUSB
- TB67H401FTG 大电流驱动有刷直流电机驱动器评估板
- MAXREFDES1251:使用MAX17596的单输出反激转换器
- MC33074ADR2G 单位增益缓冲器的典型应用 (AV = +1)
- AM3GH-1205SZ 5V DC/DC转换器的典型应用
- DC1705A-C,用于 LTC6946-3 的演示板,具有集成 VCO 的 0.37 GHz 至 5.7 GHz 整数 N 频率合成器
- LT1584CM 7A 低压差稳压器的典型应用
- EVAL-ADV7281AMEBZ,ADV7281A-M 10 位、4 倍过采样 SDTV 视频解码器的评估板,具有差分输入