学单片机要是有人引导一下,那是最快掌握编程的一种途径,当然也不能全让别人来出力出时间来为你工作,自己要做好请教问题的材料,特别是图文并茂的那种,高手就可以因势利导指点迷津了,所以我先就准备了我这款单片机的系统原理图,我想先从点亮LED3开始,简单的点亮一颗LED应该是比较容易上手的吧,对于新手来说,能掌握这点就算是一脚跨进去了,其他的就不难了。但是万事开头难,用C写程序特别是简单的IO口操作虽然容易做到,但是从手里开始拿到一款芯片,找到该芯片数据手册,然后用对应的编辑软件开始编写第一句程序往往要花费大量的冤枉宝贵时间,一旦掌握了之后回过头来看其实很简单,这个问题就差在没人直接对症指导,还有关键是自己没做好让有心帮忙的大侠能下手帮忙的着手点。我就从这里开始吧。点亮图中LED3,编辑软件Keil Uv4...
STC15W204S单片机,开始学编程,请高手指导。。。有图
写了那么多,乱了,不要误以为我是来指导别人的哦,我是来请教各位大师的,特别是用过STC的高手,请教你们的一些经验,比如你们是用什么编辑软件的,怎么开始创建一个工程新建一个.c文件,然后又该怎么设置编辑软件里的一些关键设置的@#@#¥%%#,又问的太多了,你只要说一点就够,然后又有人愿意补充一些...这样就把头绪理出来了,我这里上传一个Keil Uv4
C51.haozip04 C51.haozip05 C51.haozip06 C51.haozip07 C51.haozip08 C51.haozip09 C51.haozip10 C51.haozip11 C51.haozip12 UV4.haozip01 UV4.haozip02 UV4.haozip03 UV4.haozip04 C51.haozip01 C51.haozip02 C51.haozip03 本分卷由2345好压 编辑软件,方便跟我一样需要的新手吧,希望我们共同进步!。上面这些解压到C盘根目录新建的一个Keil文件夹下:
版区刚刚成立,希望大家能一起学习,一起进步。
我就先一步一步把我的做法贴出来吧,不对的地方请大侠指导一下:
我在STC官网http://www.mcu-memory.com/上面先下载了这个stc-isp-15xx-v6.53 软件,然后把我上面的UV4编辑软件解压到C盘根目录下新建的一个叫keil的文件夹下
为什么要这么做我也不知道,好像我是哪个论坛里看到的说要这么做才可以方便STC单片机型号导入什么的,以后再去了解吧,有知道的也说说是不是这样。然后解压上面这个stc-isp-15xx-v6.53软件并双击运行打开,打开后界面是这样的:
点击右上角小箭头,出现头文件栏目后继续点击中间出现的按键框,“添加MCU型号到Keil中”
太晚了,明天再做了,路过的大侠指导一下啊!!!
继续加油
对于这款STC单片机,我跟你一样一无所知,所以你可以从现在开始跟我一起学,我也在试着学会它,没学过C语言没事,你可以上网查上论坛看,多发帖请教,论坛好人多,但记住自己也要勤快点。
经过这段时间的折磨我终于了解了一点这款单片机。并如愿的实现了点亮上面原理图中的LED3指示灯。
#include "STC15F2K60S2.h"
sbit LEDCONTROL=P1^5;//先定义P1.5这个IO口用LEDCONTROL表示,这个LEDCONTROL可以用别的自己认为好记的代替,比如LEDKZ=P1^5;
sbit LED3=P1^4; //这里定义P1.4这个IO口用LED3表示
void main()
{
while(1)
{
LEDCONTROL=0; //P1.5这个IO口设置为低电平,从原理图分析这个IO口控制的是
//一个PNP型三极管,拉低后三极管导通,其控制的LED3阳极就有了5V工作电压
LED3=0; //P1.4这个IO口也设置为低电平,这样LED3这个指示灯有有电流流通点亮发光了。
}
}
上面只是这个指示灯一直亮着,那么要让这个指示灯动起来,一亮一灭的好看一点就要用到延时程序了,下面这个就可以做到这个功能:
#include "STC15F2K60S2.h"
sbit LEDCONTROL=P1^5;//先定义P1.4这个IO口用LEDCONTROL表示,这个LEDCONTROL可以用别的自己认为好记的代替,比如LEDKZ=P1^4;
sbit LED3=P1^4; //这里定义P1.5这个IO口用LED3表示
void delay()
{
int i, j;
for (i=0; i<800; i++)
for (j=0; j<500; j++);
}
void main()
{
while(1)
{
LEDCONTROL=0;//P1.5这个IO口设置为低电平,从原理图分析这个IO口控制的是一个PNP型三极管,拉低后三极管导通,其控制的LED3阳极就有了5V工作电压
LED3=0; //P1.4这个IO口也设置为低电平,这样LED3这个指示灯有有电流流通点亮发光了。
delay(); //延时一段时间,也就是上面的LED3=0;这句程序表示LED3这个指示灯亮的状态延时保持一段时间
LED3=1; //经过上面一段时间延时后,程序运行到这句指令就把P1.4这个IO口拉高了,指示灯就没回路而熄灭。
}
} //上面这个while(1)是个死循环,就是这几句指令周而复始一直循环运行下去,那么LED3这个指示灯就一亮一灭的了,直到关闭总电源。
STC给我寄的USB转串口线是坏的,晕死,难怪一直不能烧芯片,幸亏有台带串口输出的台式电脑,才验证了我的程序。
哎,也不见高手来指导一下,是天气太热了是吧,没人想出来逛了,我倒是希望跟我一样刚学的新手快快的学起来这款芯片,来跟我一起交流学习,接下来我就要写整个数码管的数字显示程序了,有想学的新手如果有不懂上面的可以直接发帖问,不然下面的数码管你就跟不上了,呵呵。我还想等着你们反过来教教我啊。
没高手来我就只有硬着头皮慢慢揣摩了。。。
出于节能与CPU的考虑,delay延时是否可以不要呢,加一句PCON = 0X01;
再搭配定时器使用延时。
还真不知道按什么排版原则发帖跟帖才不会乱,试试跟第一帖效果怎么样,有论坛发帖经验的高手也指导一下咱,新手们也学习学习。
下面是我成功数码显示功能的程序,新手们可要好好分析了,别小看我这个新手,我可是花了不少时间才琢磨出来的,这个原理图对单片机的IO口操作很有代表性,我觉得^_^。这就是传说中的IO口复用吧,当然还有更精辟的IO口复用,咱慢慢来,学单片机就要先分析硬件原理,这里用两个共阳数码管显示,两组LED的共阴极相同段并在一起,两组的阳极是分开的,这样我们显示时先显示其中一个数码管,另外一个关闭,延时几个毫秒后关闭这个开启另外那个数码管,这样我们眼睛看到的就是两个数码管是一起显示的了,眼睛是分辨不出两个数码管其实是轮流显示的。
#include "STC15W204S.h"
sbit LED=P1^5; //定义控制3个LED的IO口,数码管显示的时候这个IO口必须为高电平,否则3个LED就有机会发光了。
sbit ANJIAN=P3^0; //定义控制按键的IO口,同样的道理,数码管显示的时候按键输出的IO口也设置为高,经过按键隔离电阻后就不影响数码管显示了
sbit SHUMA1=P1^1; //定义控制数码管1的IO口
sbit SHUMA2=P5^5; //定义控制数码管2的IO口
#define uchar unsigned char
#define uint unsigned int
uchar a=0,b=0;//定义全局变量,也可以在main主函数里局部定义,只是我以后要在别的函数和中断函数里要用到这个变量。
const unsigned char table1[]={0xEA,0xEF,0xFA,0xEE,0xEF,0xEE,0xEA,0xEF,0xEA,0xEE,0xFF}; //这里数组等我有空了分析给跟我一样的新手看
const unsigned char table3[]={0xB5,0xFD,0x75,0x75,0x3D,0x37,0x37,0xF5,0x35,0x35,0xFF};
void delay(uchar ms) //延时函数,具体多少时间我不知道,呵呵,不要紧这个时间自己可以修改里面的数字,时间长LED亮度高,相反LED就较暗。
{
uchar i,j;
for(i=0;i
{
for(j=0;j<50;j++);
}
}
void show(uchar xs,uchar k) //显示函数,把显示部分分离出来更清晰方便模块化。
{
LED=1; //控制3个LED三极管Q1的IO口拉高。
P1=0xFF; //P1口全部拉高,这样其上的LED或数码管都不亮,
P3=0xFF; //同上,其中还包含了控制按键拉高,就是说在显示函数里屏蔽其他功能以免造成影响。
P5=0xFF; //控制数码管阳极的Q2的IO口拉高,其控制的数码管不亮。
if(k==1){SHUMA1&=0;}//这句话的意思就是如果是主函数运行到show(a,1)这个显示函数那么就是要显示数码管1的数字,这是就要开启控制数码管1的那个阳极的那个三极管
if(k==0){SHUMA2&=k;}//这句话的意思就是如果是主函数运行到show(b,0)这个显示函数那么就是要显示数码管2的数字,这是就要开启控制数码管2的那个阳极的那个三极管
P1&=table1[xs];
P3&=table3[xs];
delay(5);
}
/////////其中的a是代表数码管的个位,b是代表数码管的十位。
void main()
{
;
while (1)
{
uint jj;
b=(a==10)?b+1:b;
a=(a==10)?0:a;
b=(b==10)?0:b;
a=(a>9)?9:a;
show(a,1);
show(b,0);
jj++;
if(jj==3100){a=a+1;jj=0;}
}
}
这里上传这个原理图的99SE版.schSTC15W204S