分享一个单片机不连续引脚用数组动态显示数码管小心得
#include <STC12C5A60S2.H>#define uchar unsigned char
#define uint unsigned int
sbit K1=P3^3; //引脚定义
sbit K2=P3^4; //
sbit K3=P3^5;//
sbit D0=P3^6; //
sbit D1=P3^7;
sbit D2=P1^4;
sbit D3=P1^6;
sbit D4=P1^7;
sbit D5=P3^1;
sbit D6=P1^3;
sbit D7=P1^5;
sbit dot=P1^5; //
sbit BEEP=P3^2;
sbit L0=P3^0; //
sbit L1=P1^1; //
sbit L2=P1^0; //
sbit L3=P1^2;
unsigned char led[]={
0xC0,//"0"
0xF9,//"1"
0xA4,//"2"
0xB0,//"3"
0x99,//"4"
0x92,//"5"
0x82,//"6"
0xF8,//"7"
0x80,//"8"
0x90 //"9"
};//段码数组,共阳
char wei[]={0x01,0x02,0x04,0x08};//位码数组,四个数码管
void P6(char D)//段替换函数
{
D7=D&0X80;
D6=D&0X40;
D5=D&0X20;
D4=D&0X10;
D3=D&0X08;
D2=D&0X04;
D1=D&0X02;
D0=D&0X01;
}
void W(char L)//位替换函数
{
L3=L&0X08;
L2=L&0X04;
L1=L&0X02;
L0=L&0X01;
}
void Delay1ms() //@12.000M 延时1ms
{
unsigned char i, j;
i = 12;
j = 169;
do
{
while (--j);
} while (--i);
}
void delay_n_ms(uint n) //延时n毫秒
{
while(n)
{
Delay1ms();
n=n-1;
}
}
main()
{
while(1)//数码管动态显示
{
P1M0=0x07;//IO设置大电流模式
P3M0=0x01;
W(wei);//打开第一个数码管
P6(led);
delay_n_ms(2);
W(wei);
P6(led);
delay_n_ms(2);
W(wei);
P6(led);
delay_n_ms(2);
W(wei);
P6(led);
delay_n_ms(2);
}
}
//................... 办法有很多,一般查表法和宏定义法比较好用
顶顶顶
帮顶。
除了代码,不能来点作用,功能,效果之类的?
牛逼牛逼快过来
页:
[1]