#include "iom128v.h"
#include <macros.h>
#define RS_H PORTE |= BIT(0); // RS设置成高
#define RS_L PORTE &= ~BIT(0); // RS设置成低
#define LCDEN_H PORTE |= BIT(2); // EN设置成高
#define LCDEN_L PORTE &= ~BIT(2); // EN设置成低
typedef unsigned char uchar;
typedef unsigned int uint;
uchar StartFlag = 0; // 开始启动标志位
uchar timer = 0;
uchar CntMs = 0;
uchar DownFlag = 0; // 按下标志位按下
// 延时程序
void delay(uint x)
{
uint a,b;
for(a=x;a>0;a--)
for(b=500;b>0;b--);
}
// LCD1602写数据
void write_com(uchar com)//根据时序图写出来的写指令函数
{
PORTF = com; // COM数据赋值个PORTD
RS_L; // RS 拉低
LCDEN_L; // 使能LCD_EN拉低
delay(10); // 延时
LCDEN_H; // 使能LCD_EN拉高
delay(10); // 拉低
LCDEN_L; // 使能LCD_EN拉低
}
void write_date(uchar date)//根据时序图写出来的写数据函数
{
PORTF = date; // COM数据赋值个PORTD
RS_H; // // RS 拉高
LCDEN_L; // 使能LCD_EN拉低
delay(10); // 延时
LCDEN_H; // 使能LCD_EN拉高
delay(10); // 延时
LCDEN_L; // 使能LCD_EN拉低
}
void LCD1602_Init(void)
{
DDRE |= BIT(0) + BIT(2) +BIT(1); // 设置RE0 到RE2端口输出
PORTE &= ~BIT(1);
DDRF = 0XFF; // PORTD端口设置输出
write_com(0x38);//显示模式指令
delay(10); // 延时
write_com(0x0c);//开显示 显示光标 光标闪烁
delay(10); // 延时
write_com(0x06);//读写一个字符 地址指针加一
delay(10); // 延时
write_com(0x01);//清屏指令
delay(10);
}
// 初始化定时器1
void InitTimer1(void)
{
DDRB = 0xFF;
TCCR1A|=(1<<WGM11)|(1<<WGM10);
TCCR1B|=(1<<WGM13)|(1<<WGM12);//快速PWM模式设置,非8位!
TCCR1A|=(0<<COM1A1)|(1<<COM1A0);//OC1A输出模式,取反!
TCCR1B|=(0<<CS12)|(1<<CS11)|(0<<CS10);//64分频
OCR1A = 0X1FF; // 初值
}
// 定时50ms
void delay50ms(void)
{
unsigned char a,b,c;
for(c=19;c>0;c--)
for(b=20;b>0;b--)
for(a=130;a>0;a--);
}
// 初始化定时器3
void InitTimer3(void)
{
TCNT3H = 0XEF;//初值
TCNT3L = 0X2C;
TCCR3B = 0X03;//CS02 CS01 CS0 0000 0011======64分频
ETIMSK = 0X04;//开T3/C3
SREG = 0X80;//开总中断
}
// LCD显示时间
void DisplayTimer(uchar x,uchar y,uint Value)
{
if(y == 0)
{
write_com(0x80+x); //显示第一行
}
else if(y == 1)
{
write_com(0xC0+x); //显示第二行
}
write_date(0x30+Value/100); // 显示百位
write_date(0x30+Value%100/10); // 十位
write_date(0x30+Value%100%10); // 个位
}
// LCD显示数据
void DisplayData(uchar x,uchar y,uint Value)
{
if(y == 0)
{
write_com(0x80+x); //显示第一行
}
else if(y == 1)
{
write_com(0xC0+x); //显示第二行
}
write_date(0x30+Value%100/10); // 十位
write_date(0x30+Value%100%10); // 个位
}
// 显示字符串
void Lcd1602String(uchar x,uchar y,unsigned char *s)
{
if (y == 0)
{
write_com(0x80 + x); //显示第一行
}
else
{
write_com(0xC0 + x); //显示第二行
}
while (*s)
{
write_date( *s);
s ++;
}
}
void main()
{
uchar i = 0;
DDRD = 0xFF;
DDRC &= 0xFE;
PORTC|= 0x01;
InitTimer1(); // 初始化定时器1
InitTimer3(); // 初始化定时器3
LCD1602_Init(); // 初始化 1602
Lcd1602String(0,0,"Time= C="); // 显示时间
DisplayTimer(11,0,(61228)/100);
DisplayData(14,0,(61228)%100); // 定时时钟值 61228
Lcd1602String(0,1,"DI="); // 叮
DisplayTimer(3,1,699); // 计数值
Lcd1602String(8,1,"DO="); // 咚
DisplayTimer(11,1,999); // 计数值
while(1)
{
DisplayTimer(5,0,timer); // 显示时间
if((PINC&0x01)==0x00)
{
StartFlag = 1; // 启动计时
DDRB = 0x20;
OCR1A = 0X2BB; // 714
PORTD = 0x00;
for(i = 0;i < 6;i++)
delay50ms();
OCR1A = 0x3E7; // 3E7 999
PORTD = 0xFF;
for(i = 0;i < 14;i++)
delay50ms();
if(DownFlag == 1)
{
DownFlag = 0; //有按下
timer = 0;
}
}
else
{
PORTD = 0xFF;
DDRB = 0x00;
DownFlag = 1; // 没有被按下
StartFlag = 0;
}
}
}
#pragma interrupt_handler timer3_ovf_isr:30
void timer3_ovf_isr(void)
{
if(StartFlag == 1)
{
if(++CntMs >= 20) // 1秒
{
CntMs = 0;
timer++;
}
}
else
{
CntMs = 0;
}
TCNT3H = 0XEF;
TCNT3L = 0X2C;
}
没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
1、使用按键控制蜂鸣器模拟发出“叮咚”的门铃声。 2、“叮”声对应声音频率714Hz,“咚”对应声音频率500Hz,这两种频率由ATmega128的定时器生成,定时器使用的工作模式自定,处理器使用内部4M时钟。“叮”声持续时间300ms,“咚”声持续时间700ms。 3、发“叮”时8个发光二极管亮,发“咚”时发光二极管灭。 4、用LCD液晶显示芯片或数码管显示所用的定时器(ATmega128有定时器0-3),定时器时钟值、定时器的定时/计数器的初值及两种声音频率的持续时间等参数。
资源推荐
资源详情
资源评论
收起资源包目录
AVR128 音乐门铃-proteus-程序-报告.rar (217个子文件)
DS18B20.h.071231115644 260B
DS18B20.c.120704184542 4KB
main.c.121120164018 1B
main.c.121120170104 0B
DS18B20.c.121121130750 4KB
main.c.121121130750 104B
DS18B20.c.121121130820 4KB
DS18B20.h.121121130820 356B
DS18B20.c.121121130912 4KB
DS18B20.c.121121130934 4KB
DS18B20.c.121121131026 4KB
DS18B20.c.121121131102 4KB
main.c.121121131334 1KB
main.c.121121132442 3KB
main.c.121121132640 3KB
main.c.121121133628 3KB
main.c.121121133934 3KB
main.c.121121134016 3KB
main.c.121121134030 3KB
main.c.121121134148 3KB
main.c.121121140036 3KB
main.c.121121142018 5KB
main.c.121121142506 5KB
main.c.121121142552 5KB
main.c.121121142626 5KB
main.c.200705172344 5KB
main.c.200705172402 5KB
main.c.200705172510 3KB
main.c.200705172526 3KB
main.c.200705172542 3KB
main.c.200705172556 3KB
main.c.200705172606 3KB
main.c.200705172658 3KB
main.c.200705172712 3KB
main.c.200705172720 3KB
main.c.200705172728 3KB
main.c.200705172738 3KB
main.c.200705173254 3KB
main.c.200705173458 3KB
main.c.200705173504 3KB
main.c.200705173830 3KB
main.c.200705173842 3KB
main.c.200705173848 3KB
main.c.200705173942 4KB
main.c.200705174358 4KB
main.c.200705174644 4KB
main.c.200705174724 4KB
main.c.200705174732 4KB
main.c.200705174738 4KB
main.c.200705174748 4KB
main.c.200705174754 4KB
main.c.200705174806 4KB
main.c.200705174814 4KB
main.c.200705174818 4KB
main.c.200705174826 4KB
main.c.200705174846 4KB
main.c.200705174856 4KB
main.c.200705174924 4KB
main.c.200705174950 4KB
main.c.200705175026 4KB
main.c.200705175040 4KB
main.c.200705175224 4KB
main.c.200705204358 4KB
DS18B20.c.200706095216 5KB
main.c.200706095552 4KB
main.c.200706095734 5KB
main.c.200706095814 5KB
main.c.200706095830 5KB
main.c.200706100008 5KB
main.c.200706100058 5KB
main.c.200706100122 5KB
main.c.200706100134 5KB
main.c.200706100150 5KB
main.c.200706100204 5KB
main.c.200706100312 5KB
main.c.200706100404 3KB
main.c.200706100414 3KB
main.c.200706100430 3KB
main.c.200706100442 3KB
main.c.200706100456 3KB
main.c.200706100520 2KB
main.c.200706100540 2KB
main.c.200706100624 2KB
main.c.200706101512 3KB
main.c.200706101840 3KB
main.c.200706102130 3KB
main.c.200706102150 3KB
main.c.200706102228 3KB
main.c.200706102240 3KB
main.c.200706102302 3KB
main.c.200706102310 3KB
main.c.200706102344 3KB
main.c.200706102400 3KB
main.c.200706102410 3KB
main.c.200706102418 3KB
main.c.200706102426 3KB
main.c.200706102738 2KB
main.c.200706102742 2KB
main.c.210228165034 2KB
main.c.210228165102 2KB
共 217 条
- 1
- 2
- 3
资源评论
- msg-fobbit2023-03-21资源中能够借鉴的内容很多,值得学习的地方也很多,大家一起进步!
- TOrnaDO-chris2023-03-06资源是宝藏资源,实用也是真的实用,感谢大佬分享~
- 2201_758864862023-10-04资源太好了,解决了我当下遇到的难题,抱紧大佬的大腿~
bbxyliyang
- 粉丝: 134
- 资源: 181
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功