专家
公告
财富商城
电子网
旗下网站
首页
问题库
专栏
标签库
话题
专家
NEW
门户
发布
提问题
发文章
终于又碰到问题了,段码LCD屏?
2019-03-24 20:39
发布
×
打开微信“扫一扫”,打开网页后点击屏幕右上角分享按钮
站内问答
/
Atmel MCU
8020
19
1342
关于上次ATMEGA169驱动段码LCD ,感觉除了规格书,没有类似的教程什么的,看了规格书也没看出方法方向,对于新手根本不知道从哪着手,虽然知道是专业的LCD屏驱动(之前直接有用过普通IO口驱动过段码LCD屏数字变化很辛苦),交流驱动应该会比普通IO要方便,但是不知道这个单片机驱动段码LCD屏的方法方式是怎样的,不知道大家最初做的时候是从哪突破的?看各位有做过类似的可否讲讲这款MCU驱动段码LCD的流程该如何? 此帖出自
小平头技术问答
友情提示:
此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
19条回答
px2noa
1楼-- · 2019-03-27 15:30
//timercount ext_6-2
#include <mega128.h>
#include <stdio.h>
#include <delay.h>
#asm
.equ __lcd_port=0x15 ;PORTC
#endasm
#include <lcd.h>
unsigned char TEXT[2][16];
unsigned char hour = 0;
unsigned char min = 0;
unsigned char sec = 0;
unsigned char n = 0;
bit flag = 0;
bit flag_1 = 0;
unsigned char key;
void Display_switch(void)
{
key = PIND & 0x03;
switch(key){
case 0b00000010:
delay_ms(150);
if(flag_1 == 0)
{
flag_1 = 1;
}
else
{
flag_1 = 0;
}
break;
case 0b00000001:
sec = 0;
min = 0;
hour = 0;
n = 0;
if(flag_1 == 1)
flag = 0;
break;
default: break;
}
}
--------------------------------------------
void Display_count(void)
{
if(sec >= 100){
sec = 0;
min++;
if(min >= 60){
min = 0;
hour++;
if(hour >=60){
hour = 0;
n++;
if(n > 12){
n = 0;
}
}
}
}
}
void Display_LCD(void)
{
lcd_clear();
sprintf(TEXT[0],"%2d :%2d", n, hour);
lcd_gotoxy(0,0);
lcd_puts(TEXT[0]);
sprintf(TEXT[1],":%2d :%2d", min,sec);
lcd_gotoxy(0,1);
lcd_puts(TEXT[1]);
}
void main()
{
DDRC = 0xff;
PORTC =0xff;
DDRD = 0x00;
TCCR1A = 0x00;
TCCR1B = 0x0D;
OCR1A = 156;
TIMSK = 0x10;
SREG = 0x80;
lcd_init(16);
#asm("sei")
while(1)
{
Display_switch();
Display_count();
if(flag == 1){
flag = 0;
Display_LCD();
}
};
}
interrupt [TIM1_COMPA] void timer1_compa_isr(void)
{
if(flag_1 == 1){
sec++;
}
flag = 1;
}
加载中...
上一页
1
2
3
4
一周热门
更多
>
相关问题
相关文章
Arduino-每个人的微控制器
0个评论
一款由长短音密码控制的门禁密码锁的设计
0个评论
IAR Embedded Workbench for Atmel AVR 6.10 环境配置
0个评论
×
关闭
采纳回答
向帮助了您的网友说句感谢的话吧!
非常感谢!
确 认
×
关闭
编辑标签
最多设置5个标签!
保存
关闭
×
关闭
举报内容
检举类型
检举内容
检举用户
检举原因
广告推广
恶意灌水
回答内容与提问无关
抄袭答案
其他
检举说明(必填)
提交
关闭
×
关闭
您已邀请
15
人回答
查看邀请
擅长该话题的人
回答过该话题的人
我关注的人
#include <mega128.h>
#include <stdio.h>
#include <delay.h>
#asm
.equ __lcd_port=0x15 ;PORTC
#endasm
#include <lcd.h>
unsigned char TEXT[2][16];
unsigned char hour = 0;
unsigned char min = 0;
unsigned char sec = 0;
unsigned char n = 0;
bit flag = 0;
bit flag_1 = 0;
unsigned char key;
void Display_switch(void)
{
key = PIND & 0x03;
switch(key){
case 0b00000010:
delay_ms(150);
if(flag_1 == 0)
{
flag_1 = 1;
}
else
{
flag_1 = 0;
}
break;
case 0b00000001:
sec = 0;
min = 0;
hour = 0;
n = 0;
if(flag_1 == 1)
flag = 0;
break;
default: break;
}
}
--------------------------------------------
void Display_count(void)
{
if(sec >= 100){
sec = 0;
min++;
if(min >= 60){
min = 0;
hour++;
if(hour >=60){
hour = 0;
n++;
if(n > 12){
n = 0;
}
}
}
}
}
void Display_LCD(void)
{
lcd_clear();
sprintf(TEXT[0],"%2d :%2d", n, hour);
lcd_gotoxy(0,0);
lcd_puts(TEXT[0]);
sprintf(TEXT[1],":%2d :%2d", min,sec);
lcd_gotoxy(0,1);
lcd_puts(TEXT[1]);
}
void main()
{
DDRC = 0xff;
PORTC =0xff;
DDRD = 0x00;
TCCR1A = 0x00;
TCCR1B = 0x0D;
OCR1A = 156;
TIMSK = 0x10;
SREG = 0x80;
lcd_init(16);
#asm("sei")
while(1)
{
Display_switch();
Display_count();
if(flag == 1){
flag = 0;
Display_LCD();
}
};
}
interrupt [TIM1_COMPA] void timer1_compa_isr(void)
{
if(flag_1 == 1){
sec++;
}
flag = 1;
}
一周热门 更多>