刚开始学单片机,一步一步的对着视频学,并写些简单的程序等,学到了单片机控制数码管的亮灭,可是我写的程序就是不能
控制,请朋友们帮我看看是怎么回事。
这是我写的程序
#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++不知道会是多少