编写软件 Atmel Studio7
仿真软件 proteus
程序
#include <avr/io.h>
#define led_wei_ddr DDRA|=0XF0
#define led_wei PORTA
#define led_duan_ddr DDRB=0XFF
#define led_duan PORTB
#define uchar unsigned char
#define uint unsigned int
int table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e};//共阳数码管0--9代码
void delay_ms(unsigned int x) // 延时 (x) ms
{
unsigned char j;
while(x--)
{
for(j=0;j<123;j++)
{
;
}
}
}
void delay_us(unsigned char x) // 延时 (x*2+5) us
{
while(--x);
}
void show(uchar j,uchar k)
{
led_wei|=0xF0; //如果换位的话这里也要改,使清屏 //共阳共阴和高低电平驱动也不一样
led_wei&=~1<<(k);
/*if(k==1) //这用来在有需要的位上加小数点
{
led_duan=table[j]&0x7f;
delay_ms(4);
}*/
led_duan = table[j];
delay_ms(5);
}
/*****************数码管输出函数****************/
void led_display(uint dat,uchar num)//dat为要输出的数,num为要输出数字的位数
{
uchar i,ad[4];
led_duan_ddr;
led_wei_ddr;
for(i=0;i<num;i++)
{
ad=dat%10;
dat=dat/10;
}
for(i=0;i<num;i++)
{
show(ad,i);
delay_ms(5);
}
}
int main(void)
{
/* Replace with your application code */
while (1)
{
led_display(6666,4);
}
}
程序通过 无错误 无警告 设置F_CPU=8000000UL 数码管模块 100us
请教各位老师 怎样修改 能正确显示
|