|
上电数码管全亮1秒,然后显示数字:1234
单片机型号:STC任意 (必须支持 PxMx 寄存器,STC89、STC90除外) 晶振频率:12Mhz
硬件连接:P2.0~P2.7连接共阴数码管段码、P1.0~P1.3连接位码。
- #include "STC15.h"
- #include "intrins.h"
- #define u8 unsigned char
- #define u16 unsigned int
- #define u32 unsigned long
- u8 code nbr[16] = { //共阴数码管段码16进制
- 0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71
- };
- u8 show[4]; //4位数码管当前显示的段码 更改数码管显示的段码 只需更改此数组
- u16 delay_ms; //定时器中断延时毫秒
- bit delay; //定时器中断延时毫秒开关 中断外置1 延时完中断内清0
- bit test; //此值为1数码管全亮 蜂鸣器响 所有按键无效 否则正常
- void InitTimer0() {
- TMOD = 0x01;
- TH0 = 0xFC;
- TL0 = 0x18;
- EA = 1;
- ET0 = 1;
- TR0 = 1;
- }
- void main() {
- WDT_CONTR = 0x27;
- P1M0 = 0x0F; P1M1 = 0x00; //P1.0~P1.3强推挽
- P2M0 = 0xFF; P2M1 = 0x00; //P2.0~P2.7强推挽
- test = 1;
- InitTimer0();
- delay_ms = 1000;delay = 1;
- while (delay);
- test = 0;
- show[0] = nbr[1];
- show[1] = nbr[2];
- show[2] = nbr[3];
- show[3] = nbr[4];
- while (1) {
- WDT_CONTR |= 0x10; //看门狗喂狗
- }
- }
- void Timer0Interrupt() interrupt 1{ //12Mhz 1mS定时器中断
- static u8 seg = 0; //当前正在扫描的数码管段码 4位数码管 范围:0~3
- TH0 = 0xFC;
- TL0 = 0x18;
- P1 |= 0xF; //消影
- P2 = test ? 0xFF : show[seg]; //段码
- P1 &= ~(1<< seg); //位码
- if (++seg >= 4) seg = 0;
- if (delay && !--delay_ms) {
- delay = 0;
- }
- }
复制代码 |
|