单片机源程序如下:
- #include"reg52.h"
- #define uchar unsigned char
- #define uint unsigned int
- /*****数码管位选****/
- sbit SMG_A = P2^2;
- sbit SMG_B = P2^3;
- sbit SMG_C = P2^4;
- /****数码管码表****/
- uchar code table[10] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};//0~9
- /****函数声明*****/
- void Delay(uchar x);
- void Display_SMG();
- void Init();
- uchar count = 0;//计数20,T = 20*50ms = 1s
- int number = 0;
- /*****主函数*****/
- void main()
- {
- Init();
- while(1)
- {
- Display_SMG();
- }
- }
- /******初始化函数********/
- void Init()
- {
- TMOD = 0x01;//定时器0,方式1
- TH0 = (65536 - 46080)/256;//装初值,延时50ms
- TL0 = (65536 - 46080)%256;
- EA = 1;//开总中断
- ET0 = 1;//开定时器中断
- TR0 = 1;//启动定时器0
- }
- /********数码管显示函数***********/
- void Display_SMG()
- {
- uchar ge,shi,bai,qian;
- qian = number / 1000;
- bai = (number / 100)%10;
- shi = (number / 10)%10;
- ge = number % 10;
-
- //*****数码管显示个位******
- SMG_A = 0;
- SMG_B = 0;
- SMG_C = 0;
- P0 = table[ge];
- Delay(10);
- //*****数码管显示十位******
- SMG_A = 1;
- SMG_B = 0;
- SMG_C = 0;
- P0 = table[shi];
- Delay(10);
- //*****数码管显示百位******
- SMG_A = 0;
- SMG_B = 1;
- SMG_C = 0;
- P0 = table[bai];
- Delay(10);
- //*****数码管显示千位******
- SMG_A = 1;
- SMG_B = 1;
- SMG_C = 0;
- P0 = table[qian];
- Delay(10);
- }
- /********定时器中断函数**********/
- void time0() interrupt 1
- {
- TH0 = (65536 - 46080)/256;//装初值,延时50ms
- TL0 = (65536 - 46080)%256;
- count++;
- if(count == 20) //延时1s后
- {
- count = 0;
- number++;
- if(number == 9999)
- {
- number = 0;
- }
- }
- }
- /*********延时函数*********/
- void Delay(uchar x)
- {
- uchar y,z;
- for(y = 30;y > 0;y--)
- for(z = x;z > 0;z--);
- }
复制代码
|