共有1篇文章被收藏推荐
收录于2008-01-27
认领
报错
推荐
最近终于有空更新了,花了几天时间,弄出个小东西,虽然有很多种实现方式在网上流传了,但我却从没有试过,乘有时间,也弄出了四种方式的显示,各位帮忙看看,哪里还有不好的地方,希不吝指教.
一.原理及仿真图
此种为从右往左显示.
此中为从左往右显示
此种为从下往上显示
此种为从上往下显示
原理图说明:
1.本实例采用微芯PIC16F877A单片机,此单片机适合初学者
2.点阵采用24X24点,左边为行线,采用U1-U3三个74LS373地址所存芯片,复用单片机RB端口.
右边为列线,采用U4-U6三个74LS373地址所存芯片,复用单片机RD端口.
3.单片机RC端口控制六片373的选通.
4.显示原理:24列列线轮流拉为低电平时,行线输出行玛,通过一定延时,字符即可显示,并通过计算,即可实现上述四种显示方式.
二.程序(已附解释,PICC 8.05 通过)
#include<pic.h>
#define uch unsigned char
int offset;//定义偏置变量,以使字符运动
//以下为需显示的字符数组
const uch zxhn[]=
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x10,0x30,0xE0,0x60,0x00,0x80,0x00,0xF0,0xF0,0x10,0x00,0xF0,0xE0,
0x20,0x00,0x00,0xF0,0xF0,0x10,0x00,0x00,0x00,0x81,0x83,0x8E,0xCE,0xE0,0x78,0x76,
0x3D,0x00,0xFF,0x7F,0x04,0x38,0xFF,0xFF,0x00,0x3C,0x38,0xFF,0xFF,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x3F,0x3F,0x20,0x10,0x18,0x0E,0x07,0x00,0x00,0x00,0x1F,0x1F,
0x00,0x00,0x00,0x3F,0x3F,0x00,0x00,0x00, //"洲",
0x00,0x00,0x00,0x30,0x60,0x00,0x80,0x70,0x30,0x90,0x40,0x40,0x40,0x40,0xE0,0xE0,
0x40,0x40,0x40,0x40,0xE0,0xE0,0x40,0x00,0x00,0x41,0x49,0x49,0x49,0xFF,0xFF,0x49,
0x6D,0x6D,0x4B,0x9C,0x8C,0x40,0xFF,0xFF,0x01,0x8E,0x8C,0x40,0xFF,0xFF,0x00,0x00,
0x00,0x40,0x20,0x10,0x0C,0x07,0x01,0x00,0x00,0x03,0x03,0x11,0x10,0x30,0x3F,0x1F,
0x11,0x11,0x10,0x70,0x3F,0x3F,0x00,0x00, //"翔"
0x00,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0xC0,0xC0,0x80,0x00,0x00,0xE0,0xF8,0x38,
0x10,0x00,0x00,0x00,0x80,0x80,0x00,0x00,0x00,0x00,0x02,0x04,0x18,0xB0,0xE0,0xFC,
0x9F,0x23,0x10,0x0C,0x07,0xC3,0xFD,0x3D,0x3D,0xE5,0x19,0x07,0x03,0x03,0x01,0x00,
0x00,0x10,0x08,0x04,0x03,0x41,0x20,0x21,0x27,0x1F,0x18,0x0C,0x06,0x03,0x01,0x00,
0x00,0x03,0x0F,0x1C,0x38,0x18,0x10,0x10, //"欢"
0x00,0x00,0x00,0x10,0x30,0xE0,0xC0,0x00,0x00,0xC0,0xC0,0x20,0x30,0x38,0x10,0xF0,
0xC0,0x40,0x40,0x40,0xE0,0xC0,0x40,0x00,0x00,0x00,0x08,0x08,0x08,0xFC,0xFC,0x08,
0x80,0xFF,0xFF,0x40,0x20,0x20,0x00,0xFF,0xFF,0x40,0x80,0x80,0xFF,0xFF,0x00,0x00,
0x00,0x00,0x18,0x18,0x0C,0x07,0x07,0x0C,0x08,0x18,0x10,0x10,0x30,0x30,0x30,0x37,
0x37,0x30,0x30,0x31,0x30,0x30,0x10,0x08, //"迎"
0x00,0x00,0x00,0x00,0x80,0xC0,0x70,0x30,0x10,0x00,0x00,0xC0,0x70,0x78,0x50,0x40,
0x40,0x40,0x40,0xC0,0xE0,0x40,0x40,0x00,0x00,0x08,0x04,0x02,0x03,0xFF,0x7F,0x00,
0x40,0x22,0x11,0x9C,0x0E,0x44,0xC0,0xFF,0x7F,0x01,0x06,0x09,0x38,0x70,0x00,0x00,
0x00,0x00,0x10,0x30,0x3C,0x1F,0x00,0x1F,0x3F,0x31,0x30,0x30,0x37,0x37,0x30,0x38,
0x3E,0x18,0x01,0x02,0x0E,0x1C,0x18,0x00, //"您"
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};
const uch col[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};//列码
//初始化子程序
void init()
{
ADCON1=0x06;//初始化RA口为普通数字端口
TRISA=0X20;
PORTA=0;
TRISB=0;
PORTB=0;
TRISC=0;
PORTC=0;
TRISD=0;
PORTD=0;
}
//延时子程序
void delay1ms()
{
uch i;
for(i=0;i<150;i++)
{ NOP();
}
}
//从右往左显示
void display1()
{
uch i,j,k,t,n;
int m=0;//字符定位变量
for(n=0;n<6;n++)
{
for(offset=0;offset<24;offset++)//偏置最多24位
{
for(t=0;t<4;t++)//每个位置显示4次
{
for(i=0;i<24;i++)//取数,每行24列,故取24个数
{
PORTD=0xff;//一开始先把列置高电平,关显示
PORTC=0x70;
NOP();
PORTC=0;
PORTB=zxhn[i+offset+m];//取行码
if((i+offset)>23)PORTB=zxhn[i+offset+48+m];
RC0=1;
NOP();
RC0=0;
PORTB=zxhn[i+24+offset+m];
if((i+offset)>23)PORTB=zxhn[i+offset+72+m];
RC1=1;
NOP();
RC1=0;
PORTB=zxhn[i+48+offset+m];
if((i+offset)>23)PORTB=zxhn[i+offset+96+m];
RC2=1;
NOP();
RC2=0;
j=i/8;//求需要选通的行线
k=i%8;//求需要选通的列线
PORTD=col[k];
switch(j)
{
case 0: RC4=1; NOP(); RC4=0; break;
case 1: RC5=1; NOP(); RC5=0; break;
case 2: RC6=1; NOP(); RC6=0; break;
}
delay1ms(); //视觉暂留
}
}
}
m=m+72;//定位下一个初始字符
}
}
//从左往右显示
void display2()
{
uch i,j,k,t,n,tt1,tt2,tt3;
int m=0;//字符定位变量
for(n=0;n<6;n++)
{
for(offset=24;offset>0;offset--)//偏置最多24位
{
for(t=0;t<4;t++)//每个位置显示4次
{
for(i=24;i>0;i--)//取数,每行24列,故取24个数
{
if((i+offset)>23)
{
tt1=zxhn[i+offset-24+m];
tt2=zxhn[i+offset+m];
tt3=zxhn[i+offset+24+m];
}
else
{
tt1=zxhn[i+offset+m+72];
tt2=zxhn[i+offset+m+96];
tt3=zxhn[i+120+offset+m];
}
PORTD=0xff;//一开始先把列置高电平,关显示
PORTC=0x70;
NOP();
PORTC=0;
PORTB=tt1; //取行码
RC0=1;
NOP();
RC0=0;
PORTB=tt2;
RC1=1;
NOP();
RC1=0;
PORTB=tt3;
RC2=1;
NOP();
RC2=0;
j=(i-1)/8;//求需要选通的373
k=(i-1)%8;//求需要选通的列线
PORTD=col[k];
switch(j)
{
case 0: RC4=1; NOP(); RC4=0; break;
case 1: RC5=1; NOP(); RC5=0; break;
case 2: RC6=1; NOP(); RC6=0; break;
}
delay1ms(); //视觉暂留
}
}
}
m=m+72;
}
}
//从下往上显示
void display3()
{
uch i,j,k,t,n,tt1,tt2,tt3,l;
int m=0;//字符定位变量
for(n=0;n<18;n++)
{
for(l=0;l<7;l++)//滚动8位
{
for(t=0;t<3;t++)//每个位置显示4次
{
for(i=0;i<24;i++)//取数,每行24列,故取24个数
{
tt1=(zxhn[i+m]>>l)|(zxhn[i+24+m]<<(8-l));
tt2=(zxhn[i+24+m]>>l)|(zxhn[i+48+m]<<(8-l));
tt3=(zxhn[i+48+m]>>l)|(zxhn[i+72+m]<<(8-l));
PORTD=0xff;//一开始先把列置高电平,关显示
PORTC=0x70;
NOP();
PORTC=0;
PORTB=tt1; //取行码
RC0=1;
NOP();
RC0=0;
PORTB=tt2;
RC1=1;
NOP();
RC1=0;
PORTB=tt3;
RC2=1;
NOP();
RC2=0;
j=i/8;//求需要选通的373
k=i%8;//求需要选通的列线
PORTD=col[k];
switch(j)
{
case 0: RC4=1; NOP(); RC4=0; break;
case 1: RC5=1; NOP(); RC5=0; break;
case 2: RC6=1; NOP(); RC6=0; break;
}
delay1ms(); //视觉暂留
}
}
}
m=m+24;
}
}
//从上往下显示
void display4()
{
uch i,j,k,t,n,tt1,tt2,tt3,l,a,b;
int m=0;//字符定位变量
for(n=0;n<6;n++)
{
for(l=0;l<24;l++)
{
for(t=0;t<3;t++)//每个位置显示4次
{
for(i=0;i<24;i++)//取数,每行24列,故取24个数
{
a=l/8;
b=l%8;
if(a==0)
{
tt1=(zxhn[i+m]<<b)|(zxhn[i+120+m]>>(8-b));
tt2=(zxhn[i+24+m]<<b)|(zxhn[i+m]>>(8-b));
tt3=(zxhn[i+48+m]<<b)|(zxhn[i+24+m]>>(8-b));
}
if(a==1)
{
tt1=(zxhn[i+m+120]<<b)|(zxhn[i+96+m]>>(8-b));
tt2=(zxhn[i+m]<<b)|(zxhn[i+m+120]>>(8-b));
tt3=(zxhn[i+24+m]<<b)|(zxhn[i+m]>>(8-b));
}
if(a==2)
{
tt1=(zxhn[i+m+96]<<b)|(zxhn[i+72+m]>>(8-b));
tt2=(zxhn[i+m+120]<<b)|(zxhn[i+96+m]>>(8-b));
tt3=(zxhn[i+m]<<b)|(zxhn[i+m+120]>>(8-b));
}
PORTD=0xff;//一开始先把列置高电平,关显示
PORTC=0x70;
NOP();
PORTC=0;
PORTB=tt1; //取行码
RC0=1;
NOP();
RC0=0;
PORTB=tt2;
RC1=1;
NOP();
RC1=0;
PORTB=tt3;
RC2=1;
NOP();
RC2=0;
j=i/8;//求需要选通的行线
k=i%8;//求需要选通的列线
PORTD=col[k];
switch(j)
{
case 0: RC4=1; NOP(); RC4=0; break;
case 1: RC5=1; NOP(); RC5=0; break;
case 2: RC6=1; NOP(); RC6=0; break;
}
delay1ms(); //视觉暂留
}
}
}
m=m+72;
}
}
void main()
{
uch mo;
init();
while(1)
{
display1();
display2();
display3();
display4();
}
}
三.总结
虽然已有四种方式显示了,但我觉得可以尝试更多的方式,例如,可以象滚轮子一样,旋转着从左滚到右显示,只是数据处理的量可能大了些,已经有两个自由度了,而我的四种只有一个自由度.由于本人水平有限,没有想到什么好的思路,不过希望抛砖引玉,写出这种显示方式.
最近工作需要,要控制直流电机的转速,以前没有做过类似的项目,查了好多东西,终于鼓捣出一个,实际效果还可以,现在仿真出来,供大家参考,如有更好的建议也可以告诉我.
原理图如下
我简要说明一下
1.电源部分:
220伏交流经整流,再经过R3的降压和D10的稳压,提供一个和电网电压频率一样的同步信号.这一路再经过7815,提供控制电路部分的直流电源+15V.
2.电机控制部分
AC220V经整流出来经过一个可控硅和电机串联接入回路,通过控制可控硅的通断频率来控制电机的通断,从而控制了转速,这里D7的主要作用就是在电机线圈不通电的时候,把多余的能量释放掉.
3.控制部分
主要通过控制程控管Q3的通断,来产生一定平率的脉冲,通过光偶加到可控硅的门极,从而控制电机速度.
控制程控管的信号主要有三个:1.电压给定信号,通过调节R4,R5,R6三个电位器给定一个电压信号,中间一个也是一个调速的旋钮.2.同步信号,当电网电压过零点时,5处会产生一个0电压信号,使C7通过Q1放电,等待下一个周期来临.
3.反馈信号,从电机线圈端采样反馈到程控管的控制极,使输出信号更加平稳.程控管开通的长短有C7决定.
仿真输出波形图1:
调速旋钮R5改变一以后:
红色为电机线圈端的波形,绿色为程控管正极的波形.
从波形来看,调速效果还可以,达到预想的效果
以下为自己做的实验板:
因为最近自己想开发一款产品,但芯片比较贵,我就试着去免费申请,结果真的拿到了.现在我把可以申请免费样片的网址都罗列出来,希望和我一样有心没钱的人也能享受开发的乐趣.
1、推荐铁电存储器(未见量的限制,据说最多有人申请了100片,不知真假.)
介绍:铁电存储器(FRAM)产品将ROM的非易失性数据存储特性和RAM的无限次读写、高速读写以及低功耗等优势结合在一起。FRAM产品包括各种接口和多种密度,像工业标准的串行和并行接口,工业标准的封装类型,以及4Kbit、6Kbit、64Kbit、256Kbit和1Mbit等密度。
申请地址:http://www.huazhoucn.com/mianfei.aspx
申请注意:填写好企业、姓名等内容,不然可能收不到。当然可以多几个人申请,嘿嘿
2、VK系列UART(一次最多2片)
介绍:维肯公司主要提供集成电路,射频电子标签读卡模块,医疗电子产品,汽车电子产品等在类的电子产品和整体解决方案。
申请地址:http://www.vkic.com/usermanage/login.asp
申请注意:属企业级的申请,要填正确公司、姓名、联系方式。
3、ADI公司(最多索取3种产品,每种2片)
介绍:ADI含几乎所有的模拟器件产品。
申请地址:http://www.analog.com/intl/china/orderSamples/
4、Maxim公司(最多索取3种产品,每种2片)
介绍:Maxim公司免费提供Maxim/Dallas样品,以方便您评估测试其性能之用。
申请地址:http://www.maxim-ic.com.cn/samples/
申请注意:需填写该表格中的“最终产品”和“预计年用量” 两项内容
5、Microchip Technology Inc(最多索取5种,每种1片)
介绍:单片机和模拟半导体供应商
申请地址:http://sample.microchip.com/Default.aspx?testCookies=true
申请注意:时间较长,2个星期
6、TI((最多提供 8 种不同型号的器件样片) )
介绍:模拟和 DSP 技术
OT+home_b_samples
申请注意:在申请前组织下运用
7、成都国腾
介绍:IC接口类、IC电源类、IC存储类、IC消费类、IC其它产品、IP类、IC通讯类
申请地址:http://www.gticc.com/cn/khfw-ypsq1.htm
8、南京沁恒
介绍:涵盖电子电路、单片机和DSP、可编程器件、计算机硬件体系构架、计算机BIOS和系统软件
申请地址:http://www.wch.cn/technique/index2.asp
申请注意:客户需自付快递运费
9、飞思卡尔
申请地址:http://www.freescale.com/webapp/sps/site/homepage.jsp?nodeId=010984007869597059286929489
10、美国微芯科技公司
介绍:以太网控制器
11、北天星
介绍:ATMEL、RAMTRON、ALLIANCE、TAISOL、ATCHIP、UTC、ESI、VIMICRO、Philips、MXIC、ST等原厂的各种芯片样品
申请地址:http://www.po-star.
12、深圳市英蓓特信息技术有限公司
介绍:嵌入式开发
申请地址:http://www.embed.com.cn/yangpian/index.asp?company_id=5089
注意:邮资自付
13、润金法
介绍:单片机
申请地址:http://www.ic365.com.cn/asp/apply.asp
注意:向企业,个人有些困难
14、双龙电子
介绍:SUNSHINE(编程器)、HILO(编程器/仿真器)、MICROTEK(仿真器)、ADVANTECH(编程器)、LEAP(编程器)、XELTEK(编程器)、
ENPLAS(Seckt)、3M(Socket)、CHIPTOOL(Socket)、ATMEL AVR(仿真器)
15、杭州利尔达科技
介绍:TI、ROHM、SIPEX、CATALYST、RAINSUN 等诸多国际著名半导体产品
16、泰仁发
介绍:单片机
申请地址:http://www.tairenfa.com/apply.htm
17、丹特公司
介绍:功率转换和电力存储系统
申请地址:http://www.dionics-usa.com/sample_req_form.htmhttp://www.mcu-memory.comcom/sample.asp
尽管苹果董事长乔布斯对产品细节精益求精,但是3G版iPhone仍存在许多不足。甚至在它发布之前,就出现了一些或大或小的问题。因此,iPhone与其他产品一样,也就是一款产品而已。
到目前为止,笔者认为它有下列七项不足或令人失望的地方:
1、售价
虽然3G版iPhone比第一代iPhone要便宜一半,售价仅199美元。但是对于消费者来说,这个价格并不算便宜。仔细算算,3G版iPhone的价格其实比第一代iPhone的价格还要贵160美元,因为AT&T将另一款售价更高的服务与3G版iPhone捆绑在一起,以弥补iPhone最开始的成本。Gizmodo的败家发烧友将这称作是“在价格上玩的小把戏”,但是纽约时报的技术博客Bits将这称为“对于消费者而言的一次退步”。
2、不支持Flash
IPhone的网络浏览器功能很强大。它配备的显示屏尺寸大,分辨率高,用户完全可以用手指操作。 但是它最大的问题是,不支持Adobe的Flash技术,这也就是说,它不能完全显示那些包含多媒体内容的网站。Adobe正在努力提高其技术的兼容性,但是目前iPhone仍不支持它。
3、未配备可更换电池
许多商旅人士通常都没有时间停下来给手机充电。他们一般会随身携带多块备用电池。 但是,3G版iPhone不能更换电池,这一点令消费者们颇为失望。虽然消费者可以买到DIY的工具,但是笔者建议消费者们最好不要自己去改装。
4、视频录制
苹果电脑中预装了一款视频编辑和娱乐软件iMovie。除Shuffle之外的iPod都已经可以观看视频。 但是如果消费者想录制视频,那最好去购买索尼的产品。 尽管它内建了一款200万像素的数码相机,但是苹果3G版iPhone还不能录制视频,这个功能即使连许多低端的功能手机都已经具备了。
5、没有剪切与粘贴功能
自从第一款iPhone去年上市以来,发烧友们就对不能在iPhone上使用复制与粘贴功能感到不爽。这项功能其实非常有用,比如消费者可以将博客中的一段话通过复制与粘贴功能迅速添加到电子邮件中发送给好友。 而且,这还不用改变手机的接口。
6、没有多媒体信息类的服务
福布斯的David Ewalt将3G版iPhone不支持多媒体信息服务称作最令人抓狂的问题之一。 消费者根本没办法打开好友通过短信息发来的任何图片。
7、没有语音拨号功能
到目前为止,还没有人对此提出意见。也许那是因为大家都还在抱怨iPhone的按键不好按。iPhone没有语音识别功能。正是因为这项功能,消费者们才能够在旅途中使用黑莓。
|
-
搜索不到您的频道?
>立即加入 -
想与您的读者互动?快来认领您的频道
>立即认领 -
想知道您的博客详细订阅数据么?
>到FeedSky查看 -
想体验专业的博客托管服务么?
>注册BlogBus











时,
;
。
。





