|
单片机型号:STC任意(STC89/90除外) 晶振频率:12Mhz 硬件连接(共阴数码管):段码:P2.0~P2.7 位码:P1.0~P1.7
上电后数码管全亮1秒,显示00000000 每秒加1 加到99999999最后清0,以此类推。
- #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[8]; //8位数码管当前显示的段码 更改数码管显示的段码 只需更改此数组
- bit delay,test,feed_dog;
- u16 delay_ms;
- void InitTimer0(){
- TMOD = 0x01;
- TH0 = 0xFC;
- TL0 = 0x18;
- EA = 1;
- ET0 = 1;
- TR0 = 1;
- }
- void main(){
- //P1、P2强推挽
- P1M0 = 0xFF; P1M1 = 0x00;
- P2M0 = 0xFF; P2M1 = 0x00;
- WDT_CONTR = 0x27;
- InitTimer0();
- test = 1; delay_ms = 1000; delay = 1;
- while (delay);
- test = 0;
- while (1) {
- _nop_(); _nop_(); _nop_(); _nop_();
- if (_testbit_(feed_dog)) {
- WDT_CONTR |= 0x10;
- }
- _nop_(); _nop_(); _nop_(); _nop_();
- }
- }
- void Timer0Interrupt() interrupt 1{ //12Mhz 1mS 定时器中断
- static u8 seg = 0;
- static u16 ms = 999;
- static u32 sec = 99999999;
- TH0 = 0xFC;
- TL0 = 0x18;
- if (delay && !--delay_ms) {
- delay = 0;
- }
- P1 = 0xFF; //消影
- P2 = test ? 0xFF : show[seg]; //段码
- P1 &= ~(1 << seg); //位码
- if (++seg >= 8) seg = 0;
- if (!test && ++ms >= 1000) {
- feed_dog = 1;
- ms = 0;
- if (++sec >= 100000000) {
- sec = 0;
- }
- show[0] = nbr[sec / 10000000 % 10];
- show[1] = nbr[sec / 1000000 % 10];
- show[2] = nbr[sec / 100000 % 10];
- show[3] = nbr[sec / 10000 % 10];
- show[4] = nbr[sec / 1000 % 10];
- show[5] = nbr[sec / 100 % 10];
- show[6] = nbr[sec / 10 % 10];
- show[7] = nbr[sec % 10];
- }
- }
复制代码 |
|