AVR单片机做一个秒表,用12864显示

[复制链接]
查看11 | 回复1 | 2010-5-21 09:00:03 | 显示全部楼层 |阅读模式
有12864单独显示汉字的程序,可以在四行显示汉字,经过实验好用;有一个秒表的程序,是用数码管显示的,也是成功的,就是不知道如何将这两个融合在一起,试了好几次都不能显示。不知道错在哪了。。。
#include
#include
#defineuintunsigned int
#defineuchar unsigned char
uchar shu=0;//定义全局变量
#pragma interrupt_handler miao:9
void lcd_init();//LCD初始化函数
void writedata(uchar);//向LCD写数据

void busy_check(void);//检测LCD是否忙
void writecommand(uchar);//向LCD写命令
void lcdtextout(uchar address,uchar shu);//向指定的地址写字符串
void setxy(uchar x,uchar y);//设定显存地址
void busy_check(void)
{
DDRB=0x00;
PORTA&=~BIT(0); //RS-0

PORTA|=BIT(1);
//RW-1
PORTA|=BIT(2);
//E-1


asm("nop");//*****重要:不同编译器效率不一样

while((PINB&0x80)!=0x00);//检测P7是否有数据输出,不=0,忙,就在内部循环,==0就让B口输出,输出完使E=0,为下一次检测做好准备
DDRB=0xff;
PORTA&=~BIT(2);
//E=0 */
}
//*************************写命令函数*****************************//
void writecommand(uchar data)
{

busy_check();


PORTA&=~BIT(0); //RS-0
PORTA&=~BIT(1); //RW-0


PORTA|=BIT(2); //E=1


PORTB=data;

PORTA&=~BIT(2);
//E=0



}
//******************************写数据函数****************************//
void writedata(uchar data)
{

busy_check();

PORTA|=BIT(0);
//RS-1
PORTA&=~BIT(1);
//RW-0


PORTA|=BIT(2); //E=1


PORTB=data;

PORTA&=~BIT(2);
//E=0

}
void lcd_init(void)
{


writecommand(0x30); //选择基本指令集
writecommand(0x30);//选择8bit数据流
writecommand(0x0c);//开显示(无游标、不反白)
writecommand(0x01);//清除显示,并且设定地址指针为00H
writecommand(0x06);//指定在资料的读取及写入时,设定游标的移动方向及指定显示的移位
}
void lcdtextout(uchar address,uchar shu)
{
writecommand(0x80+address);
while(shu)
{

writedata(shu);
}
}
//***************************设置坐标*****************************//
void setxy(uchar x,uchar y)
{

writecommand(0x36); //功能设置 扩充指令 直接显示

writecommand(y);
//Y地址设置

writecommand(x);
//X地址设置
}
void miao()
{
if(shu==60);

shu=0;

shu++;

TCNT1H=0x85;

TCNT1L=0xed;
}
void main()
{
uint i=65535;

DDRB=0xff;
DDRA=0xff;
lcd_init();

TCCR1B=0x04;//256分频
TCNT1H=0x85;
TCNT1L=0xed;//8M/256=31250,31250-65535=34285,转换为16进制为85ED,所以H是85,L是ED
TIMSK|=BIT(2);//中断屏蔽寄存器,不用管
SREG|=BIT(7);//开启总中断,不然不会执行中断
while(1)

{
lcdtextout(0,shu/10);

lcdtextout(16,shu%10);
}
}

回复

使用道具 举报

千问 | 2010-5-21 09:00:03 | 显示全部楼层
在while(1)显示的时候加一些延时看看注意硬件上的引脚链接是不是和程序对应用JTAG在线仿真看看 方便你调试程序
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行