刚入门AVR单片机一段时间,感觉资料很少,所以进度很慢,刚才百度到这里来,现上传一个数码管的程序来和大家分享,高手就跳过吧,初学可以下载来做参考
proteus仿真原理图:
单片机源程序:
/*
* smg8_avr.h
*
* Created: 2017/3/16 1:54:20
* Author: lyl
*/
#ifndef SMG8_AVR_H_
#define SMG8_AVR_H_
#include "lyl_avr.h"
//数码管端口定义
#define smgPORT PORTA
#define smgPORT_DDR DDRA
#define DS PA5//串行数据输入端口
#define SHCP PA6//为移位寄存器的时钟脉冲输入口
#define STCP PA7//为存储寄存器的时钟脉冲输入口
//OE为输出使能端口,低电平有效,已直接接地
void smgPortInit(void);//数码管端口初始化
void smg74HC595_WriteByte(uchar ucData); //向74HC595发送一个数据
void smgDisplay(uchar bitCode,uchar segCode,uchar dp); //在数码管的某一位上显示某一个字符
//共阳数码管的编码,并将数据定义在CODE区
const uchar SMG_SEG_CODE[18]={//共阳数码管的段码编码,并将数据定义在CODE区
0xc0,/*0*/
0xF9,/*1*/
0xA4,/*2*/
0xB0,/*3*/
0x99,/*4*/
0x92,/*5*/
0x82,/*6*/
0xF8,/*7*/
0x80,/*8*/
0x90,/*9*/
0x88,/*A=10*/
0x83,/*b=11*/
0xC6,/*C=12*/
0xA1,/*d=13*/
0x86,/*E=14*/
0x8E,/*F=15*/
0xFF,/*不显示=16*/
0xBF,/*横杆“-”=17*/
};
//数码管的位选择编码
const uchar SMG_BIT_CODE[10]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};
#define SMG8_SetDS() setbit(smgPORT,DS)
#define SMG8_ClrDS() clrbit(smgPORT,DS) //数据引脚
#define smgSTCP_SET() setbit(smgPORT,STCP)
#define smgSTCP_CLR() clrbit(smgPORT,STCP) //上升沿更新数据
#define smgSHCP_SET() setbit(smgPORT,SHCP)
#define smgSHCP_CLR() clrbit(smgPORT,SHCP) //上升沿移入数据
#define smgDS_SET() setbit(smgPORT,DS)
#define smgDS_CLR() clrbit(smgPORT,DS) //数据引脚
/************************************************************************/
/* 函数名称:smgPortInit
函数功能:初始化8位共阳数码管的数据端口
入口参数:无
返回值:无 */
/************************************************************************/
void smgPortInit(void){
smgPORT|=((1< /************************************************************************/ /*函数名称:smg74HC595_WriteByte 函数功能:向74HC595发送一个字节数据 入口参数:ucData-要发送的数据 返回值:无 */ /************************************************************************/ void smg74HC595_WriteByte(uchar ucData){ for(uchar i = 0 ;i < 8;i++){//高位在前低位在后 if((ucData & (0x80>>i)) != 0) smgDS_SET(); else smgDS_CLR(); smgSHCP_CLR(); smgSHCP_SET();//SHCP引脚的上升沿移入数据 _delay_us(10); } } /************************************************************************/ /*函数名称:smgDisplay 函数功能:在8位共阳数码管的指定位置上显示一个字符 入口参数:bitCode-位选择码,即选择要在哪位数码管上显示数据 :segCode-数据段码选择,即要显示什么数据 :dp-当dp取值不等于0时,数码管将显示后面的小圆点 返回值:无 */ /************************************************************************/ void smgDisplay(uchar bitCode,uchar segCode,uchar dp){//在数码管的某一位上显示某一个字符 uchar a; if(dp==0) a=0x00; else a=0x80; smg74HC595_WriteByte(SMG_BIT_CODE[bitCode]); //显示在哪一个数码管上 smg74HC595_WriteByte(SMG_SEG_CODE[segCode]-a); //显示的数据 smgSTCP_CLR();
上一篇:Atmega32A驱动LCD1602显示屏
下一篇:基于OV7670摄像头的SCCB总线的实现
推荐阅读
史海拾趣
请问,用IWebBrowser控件在窗体里打开网页,怎样获得网页的HTML接口(目的是想获得网页源文件,对网页元素进行分析) 部分代码如下: IWebBrowser2 *m_pBrowser; HRESULT hr; IDispatch* pHtmlDocDispatch = NULL; IHTMLDocument2 * pHtmlDoc = NULL; IHTMLWindow2 * p = NULL; hr = m_pBrowser ...… 查看全部问答∨ |
|
在DirectShow架构中,IPersistPropertyBag::Load 函数可以用来设置视频捕捉设备,其实就是对camera等设备的初始化,即打开camera驱动。那么,请问各位前辈,既然已经打开了camera驱动,就应该会有对应的设备句柄咯,由于在接下来的操作当中还需要 ...… 查看全部问答∨ |
|
使用MagicARM2200和ZLG/IP软件包,实现基于以太网接口的WEB服务器应用实验中,访问不了MagicARM2200上运行的网页,怎么办? 小弟在做《ARM嵌入式系统实验教程(三)附加实验》的4.3TCP通讯实验时,程序编译通过,ping连接IP也ping的通,就是访问不了MagicARM2200上运行的网页,那是什么原因啊?… 查看全部问答∨ |
|