|
发表于 2009-7-12 15:45:03
|
显示全部楼层
算了,俺好人做到底,都帮你做好,已调试通过,以后“不急”的时候加强练习,不能永远吃现成的,这样永远学不好。
1.我重画的Proteus 图(6.9SP4),注意我没有在数码管的段到164的Q输出端加限流电阻(手懒),仿真无所谓,你做实际电路的时一定要加,500欧姆左右,否则长时间工作会烧数码管或164。
点击此处下载 ourdev_460563.rar(文件大小:12K) (原文件名:led164.rar)
2. LED 段码生成器软件
点击此处下载 ourdev_460564.rar(文件大小:315K) (原文件名:LED.rar)
3. 段码生成器使用截图
![](http://cache.amobbs.com/bbs_upload782111/files_16/ourdev_460562.JPG)
(原文件名:LED.JPG)
4.源程序
#include "io8535v.h"
//#include "iom164v.h"
#include "macros.h"
#define uchar unsigned char
void WD164(unsigned char *disdata)
{
flash uchar segs[]={
0xC0,/*0*/
0xF9,/*1*/
0xA4,/*2*/
0xB0,/*3*/
0x99,/*4*/
0x92,/*5*/
0x82,/*6*/
0xF8,/*7*/
0x80,/*8*/
0x90,/*9*/};
uchar mid;
uchar i, j;
PORTA &= ~0x02;
for (j = 0; j < 3; j++)
{
mid = segs[disdata[j]];//转换
for (i = 0; i < 8; i++)
{
if (mid & 0x80)
PORTA |= 0x01;
else
PORTA &= ~0x01;
PORTA |= 0x02;
mid = mid << 1;
PORTA &= ~0x02;
}
}
}
int main()
{
uchar ddata[3] = {1, 2, 3};
PORTA=0;
DDRA = 0XFF;
WD164(ddata);//静态显示,不是扫描,不用循环
while (1);
return 0;
}
5.运行结果
![](http://cache.amobbs.com/bbs_upload782111/files_16/ourdev_460567.JPG)
(原文件名:LED164.JPG) |
|