当前位置: 代码迷 >> 单片机 >> 单片机 数码管显示解决方法
  详细解决方案

单片机 数码管显示解决方法

热度:692   发布时间:2016-04-28 16:35:25.0
单片机 数码管显示
刚开始学单片机,一步一步的对着视频学,并写些简单的程序等,学到了单片机控制数码管的亮灭,可是我写的程序就是不能

控制,请朋友们帮我看看是怎么回事。

这是我写的程序 

#include<reg52.h>
void delay(unsigned int cnt)
{
 while(--cnt);
}
void mian()
{
unsigned char i;

while(1)
{
P0=0x3f; //段选
P2=3; //位选
delay(200);
  }
}
这是开发板自带的程序

#include<reg52.h> 

unsigned char const dofly[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};// 显示段码值01234567
unsigned char code seg[]={0,1,2,3,4,5,6,7};//分别对应相应的数码管点亮,即位码
/*------------------------------------------------
  延时子程序
------------------------------------------------*/
void delay(unsigned int cnt)
{
 while(--cnt);
}
/*------------------------------------------------
  主函数
------------------------------------------------*/
main()
{
 unsigned char i;

 while(1)
  {
 
  P0=dofly[i];//取显示数据,段码
P2=seg[i]; //取位码
delay(200); //扫描间隙延时,时间太长会闪烁,太短会造成重影
i++;
if(8==i) //检测8位扫描完全?
i=0;
  }
}

开发版自带的程序烧到单片机可以控制数码管,看的懂程序的意思。

我自己写就是想先控制一个数码管位选和段选,觉得我自己写的程序和开发板的程序类似,应该可以点亮,但是就是不能,

而且编译时有3个警告。

请朋友帮我看看怎么回事,分数确实不多,因为确实没有多少了(请理解) 先谢谢你们  

这是开发板上数码管的原理图


------解决方案--------------------
你的位选初值不对吧,一次只能有一个脚亮,不可能是3,数码管是共阴共阳呀
------解决方案--------------------
晕。。。。我说呢。。。你看看你那个主函数main写成什么了。。。。。你写成了mian。。。。就是错在这里了

------解决方案--------------------
先初始化你的变量i,不然i++不知道会是多少
  相关解决方案