📄 c8051f0236weishumaguan.c
字号:
#include<stdio.h>
#include "C8051F020.h"
/*
sbit D0=P3^0;
sbit D1=P3^1;
sbit D2=P3^2;
sbit D3=P3^3;//D0——D3是要显示的数字
sbit DP=P3^4;
sbit A0=P3^5;
sbit A1=P3^6;
sbit A2=P3^7;//A0——A2 用做3 8译码器输入,用来扫描六位共阴极数码管的位选择信号
*/
bit flagq=0;
bit flagb=0;
unsigned int temp ,key ;
unsigned char code DIS_DAT[10]={0x0,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09};
unsigned char code DIS_BIT[6]={0x00,0x20,0x40,0x60,0x80,0xa0};
static char M=0,N=0;
void DataDish(unsigned int dataTmp) ;
void DataDisHH(unsigned int dataTmp) ;
void keyscan();
void delay(int m) ;
void Port_IO_Init() ;
void Oscillator_Init() ;
void Init_Device();
void Timer_Init();
main()
{
Init_Device();
Timer_Init();
TH0=252;
TL0=250;
TR0=1 ;
EA=1;
while(1)
{
DataDis(895);
}
}
void DataDish(unsigned int dataTmp)
{
switch(M)
{
case 0:
P3=P3&0xf0|0x0A;DP=0; //显示字符h
P3 = P3&0x1f|DIS_BIT[0]; break;//选通最高位数码管
case 1:
P3 = P3|0x0f;DP=0; //不显示,常熄灭
P3 = P3&0x1f|DIS_BIT[1];break; //选通次高位数码管
case 2: if(dataTmp/1000==0)
{flagq=1;P3=P3|0x0f;DP=0;} //千位是零则熄灭不点亮
else
{P3 = P3&0xf0|DIS_DAT[dataTmp/1000];DP=0;flagq=0;} //要显示的千位数字
P3 = P3&0x1f|DIS_BIT[2];break;//选通千位数码管
case 3: if(flagq==1&&dataTmp/100==0)
{flagb=1;P3=P3|0x0f;DP=0;} //百位是零且千位也是零则熄灭不点亮
else
{P3 = P3&0xf0|DIS_DAT[(dataTmp%1000)/100];DP=0;flagb=0;} // 要显示的百位数字
P3 = P3&0x1f|DIS_BIT[3];break; //选通百位数码管
case 4: if(flagb==1&&dataTmp/10==0)
{P3=P3|0x0f;DP=0;} // 十位是零、百位是零且千位也是零则熄灭不点亮
else
P3 = P3&0xf0|DIS_DAT[(dataTmp%100)/10] ; // 要显示的十位数字
P3 = P3&0x1f|DIS_BIT[4];break;//选通十位数码管
case 5: P3 = P3&0xf0|DIS_DAT[dataTmp%10]; DP=0; // 要显示的个位数字
P3 = P3&0x1f|DIS_BIT[5];break;//选通个位数码管
default: break;
}
}
void Port_IO_Init()
{
XBR0 = 0x05;
XBR2 = 0x40;
P1MDOUT = 0xff;
P3MDOUT = 0xff;
P1 = 0xff;
P3 = 0xff;
}
void Oscillator_Init()
{
int i = 0;
OSCXCN = 0x67;
for (i = 0; i < 3000; i++);
while ((OSCXCN & 0x80) == 0);
OSCICN = 0x08;
}
void Init_Device(void)
{
Port_IO_Init();
Oscillator_Init();
}
void Timer_Init()
{
EA=0;
TF0=0;
TR0=0;
TMOD = 0x01;
TH0=252;
TL0=250;
ET0=1 ;
EA=1;
}
void int0_ISR() interrupt 1 //定时器用做数码管的位选择扫描定时
{
TH0=252;
TL0=250;
if(M>=5)
M=0;
else
M++;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -